一种基于直接读写FLASH的本地动态加载系统及方法技术方案

技术编号:19489067 阅读:58 留言:0更新日期:2018-11-17 12:01
本发明专利技术涉及一种基于直接读写FLASH的本地动态加载系统及方法,涉及计算机嵌入式软件技术领域。本发明专利技术在嵌入式系统本地动态加载时直接从FLASH上进行读取,通过在内存中重新生成绝对定位的二进制文件方法,达到执行动态库的目的。可以看出,本发明专利技术为嵌入式动态库本地动态加载提供了一种高效的方案,涉及的动态加载器并未限定特定的目标机操作系统及文件系统,方便进行移植,可以提高本地动态加载执行效率。

【技术实现步骤摘要】
一种基于直接读写FLASH的本地动态加载系统及方法
本专利技术涉及计算机嵌入式软件
,具体涉及一种基于直接读写FLASH的本地动态加载系统及方法。
技术介绍
动态库工程在编译阶段不对工程内的目标文件链接,将链接过程推迟到运行时再进行。对于资源有限的嵌入式系统,动态链接技术可以有效解决共享的目标文件多个副本浪费内存空间的问题。动态链接的基本思想决定了动态工程内目标文件中的函数和变量在DSP内存真实地址在动态库运行时获取,因此需要在目标机端编写动态加载软件,用于动态库运行时符号解析与重定位。目前嵌入式系统在自举模式下,从FLASH设备加载动态库时,通常的方案是借助目标机端文件系统,使用文件操作接口进行动态库的读取。目前已有的本地动态加载方案需要借助目标机端文件系统,在启动前将动态库以文件的形式放到目标机上,需要动态库时调用目标端文件操作接口进行读取。该方案需要在主机端有文件系统的支持,可一致性较差。并且添加文件系统后,动态加载过程会占用较多时间,难以保证动态加载的性能。
技术实现思路
(一)要解决的技术问题本专利技术要解决的技术问题是:如何提高本地动态加载执行效率。(二)技术方案为了解决上述技术问题,本专利技术提供了一种基于直接读写FLASH的本地动态加载系统,包括运行在宿主机上的工程管理模块、文件生成模块和程序固化模块;以及运行在目标机的操作系统自举模块、获取全局符号表模块和加载动态库模块;所述工程管理模块,用于创建与管理应用工程与动态库工程这两类工程,并生成可执行文件APP.out与动态库文件,所述应用工程包含操作系统内核和动态加载器程序,编译后生成可执行文件,该可执行文件是目标机端第一个加载的文件,创建应用工程APP,编译生成可执行文件APP.out;所述动态库工程包含应用工程或其它动态库所调用的函数和使用的全局变量,编译后生成动态库文件,动态库文件不能独立运行,只能供可执行文件或其它动态库调用,允许创建一个或者多个动态库工程,设所创建两个动态库工程名称分别为A和B,编译生成动态库文件A.out和B.out;所述文件生成模块的输入为可执行文件或动态库文件,用于根据输入文件的类型,输出不同的文件,若输入文件为可执行文件APP.out时,生成符号表文件APP.symbol;输入文件为动态库文件A.out时,生成控制文件A.out.ctl;输入文件为动态库文件B.out时,生成控制文件B.out.ctl;所述符号表文件保存可执行文件内全局符号的key-value值;所有的可执行文件对应的符号表文件格式一致的,不同的可执行文件,符号表文件内容是不一致的;所有的动态库文件对应的符号表文件格式一致的,不同的动态库文件,控制文件的内容是不一致的;所述程序固化模块用于将在主机端生成的文件放到目标板FLASH上;所述操作系统自举模块用于将APP.out文件从FLASH的0x90000000搬运至指定片内RAM处,并跳转到操作系统入口处执行;所述获取全局符号表模块用于将全局符号从FLASH上符号表文件提取出到内存,并对宿主机生成的符号表文件进行解析,将符号表文件内符号获取到内存后,供动态加载器加载动态库过程使用。该过程分为两步完成:从FLASH上获取符号表文件,并解析符号表文件内符号信息;优选地,所述程序固化模块具体用于对目标板FLASH进行划分,将不同的文件固化在FLASH的不同位置;。3、如权利要求1所述的系统,其特征在于,所述加载动态库模块具体用于指定动态库控制文件地址和加载动态库;指定动态库控制文件地址:动态加载器为用户提供加载动态库的接口getFileCtlInfo,该接口到FLASH指定区域获取符号表文件内容,用户在加载动态库时调用该接口,并提供动态库控制文件地址;函数getFileCtlInfo从FLASH获取控制文件,并根据控制文件的格式解析文件内容;加载动态库:根据动态库对应控制文件内容,查找并获取指定FLASH地址处的动态库文件,并将获取的动态库加载到目标板内存。优选地,所述系统所实现的直接从FLASH读取动态库文件函数包括改变文件读取位置函数、返回文件读写位置函数、读取文件内容函数、开始读取文件函数和结束读取文件函数。优选地,所述目标机的硬件平台是飞腾FT-Q6713,运行其上的嵌入式操作系统为RTEMS,该操作系统集成了FLASH驱动程序与动态加载器,操作系统启动后,首先启动动态加载器,将操作系统的所有全局符号获取并进行管理,然后指定需要加载的动态库,动态加载器从FLASH上获取动态库并加载到内存中进行符号重定位。优选地,宿主机端运行软件为CCS6.1。本专利技术还提供了一种基于直接读写FLASH的本地动态加载方法,包括以下步骤:工程管理步骤,创建与管理应用工程与动态库工程这两类工程,并生成可执行文件APP.out与动态库文件,所述应用工程包含操作系统内核和动态加载器程序,编译后生成可执行文件,该可执行文件是目标机端第一个加载的文件,创建应用工程APP,编译生成可执行文件APP.out;所述动态库工程包含应用工程或其它动态库所调用的函数和使用的全局变量,编译后生成动态库文件,动态库文件不能独立运行,只能供可执行文件或其它动态库调用,允许创建一个或者多个动态库工程,设所创建两个动态库工程名称分别为A和B,编译生成动态库文件A.out和B.out;文件生成步骤,用于根据输入的可执行文件或动态库文件的类型,输出不同的文件,若输入文件为可执行文件APP.out时,生成符号表文件APP.symbol;输入文件为动态库文件A.out时,生成控制文件A.out.ctl;输入文件为动态库文件B.out时,生成控制文件B.out.ctl;所述符号表文件保存可执行文件内全局符号的key-value值;所有的可执行文件对应的符号表文件格式一致的,不同的可执行文件,符号表文件内容是不一致的;所有的动态库文件对应的符号表文件格式一致的,不同的动态库文件,控制文件的内容是不一致的;程序固化步骤,将在主机端生成的文件放到目标板FLASH上;操作系统自举步骤,将APP.out文件从FLASH的0x90000000搬运至指定片内RAM处,并跳转到操作系统入口处执行;获取全局符号表步骤,将全局符号从FLASH上符号表文件提取出到内存,并对宿主机生成的符号表文件进行解析,将符号表文件内符号获取到内存后,供动态加载器加载动态库过程使用,该过程分为两步完成:从FLASH上获取符号表文件,并解析符号表文件内符号信息;所述加载动态库模块用于在应用工程执行过程中,将需要的符号所在的动态库加载到目标机内存。(三)有益效果本专利技术在嵌入式系统本地动态加载时直接从FLASH上进行读取,通过在内存中重新生成绝对定位的二进制文件方法,达到执行动态库的目的。可以看出,本专利技术为嵌入式动态库本地动态加载提供了一种高效的方案,涉及的动态加载器并未限定特定的目标机操作系统及文件系统,方便进行移植,可以提高本地动态加载执行效率。附图说明图1是本专利技术实施例的系统中宿主机端功能模块组成图;图2是本专利技术实施例的系统中目标机FLASH存放文件示例图;图3是本专利技术实施例的系统中目标机端功能模块组成图。具体实施方式为使本专利技术的目的、内容、和优点更加清楚,下面结合附图和实施例,对本文档来自技高网...

【技术保护点】
1.一种基于直接读写FLASH的本地动态加载系统,其特征在于,包括运行在宿主机上的工程管理模块、文件生成模块和程序固化模块;以及运行在目标机的操作系统自举模块、获取全局符号表模块和加载动态库模块;所述工程管理模块,用于创建与管理应用工程与动态库工程这两类工程,并生成可执行文件APP.out与动态库文件,所述应用工程包含操作系统内核和动态加载器程序,编译后生成可执行文件,该可执行文件是目标机端第一个加载的文件,创建应用工程APP,编译生成可执行文件APP.out;所述动态库工程包含应用工程或其它动态库所调用的函数和使用的全局变量,编译后生成动态库文件,动态库文件不能独立运行,只能供可执行文件或其它动态库调用,允许创建一个或者多个动态库工程,设所创建两个动态库工程名称分别为A和B,编译生成动态库文件A.out和B.out;所述文件生成模块的输入为可执行文件或动态库文件,用于根据输入文件的类型,输出不同的文件,若输入文件为可执行文件APP.out时,生成符号表文件APP.symbol;输入文件为动态库文件A.out时,生成控制文件A.out.ctl;输入文件为动态库文件B.out时,生成控制文件B.out.ctl;所述符号表文件保存可执行文件内全局符号的key‑value值;所有的可执行文件对应的符号表文件格式一致的,不同的可执行文件,符号表文件内容是不一致的;所有的动态库文件对应的符号表文件格式一致的,不同的动态库文件,控制文件的内容是不一致的;所述程序固化模块用于将在主机端生成的文件放到目标板FLASH上;所述操作系统自举模块用于将APP.out文件从FLASH的0x90000000搬运至指定片内RAM处,并跳转到操作系统入口处执行;所述获取全局符号表模块用于将全局符号从FLASH上符号表文件提取出到内存,并对宿主机生成的符号表文件进行解析,将符号表文件内符号获取到内存后,供动态加载器加载动态库过程使用。该过程分为两步完成:从FLASH上获取符号表文件,并解析符号表文件内符号信息。...

【技术特征摘要】
1.一种基于直接读写FLASH的本地动态加载系统,其特征在于,包括运行在宿主机上的工程管理模块、文件生成模块和程序固化模块;以及运行在目标机的操作系统自举模块、获取全局符号表模块和加载动态库模块;所述工程管理模块,用于创建与管理应用工程与动态库工程这两类工程,并生成可执行文件APP.out与动态库文件,所述应用工程包含操作系统内核和动态加载器程序,编译后生成可执行文件,该可执行文件是目标机端第一个加载的文件,创建应用工程APP,编译生成可执行文件APP.out;所述动态库工程包含应用工程或其它动态库所调用的函数和使用的全局变量,编译后生成动态库文件,动态库文件不能独立运行,只能供可执行文件或其它动态库调用,允许创建一个或者多个动态库工程,设所创建两个动态库工程名称分别为A和B,编译生成动态库文件A.out和B.out;所述文件生成模块的输入为可执行文件或动态库文件,用于根据输入文件的类型,输出不同的文件,若输入文件为可执行文件APP.out时,生成符号表文件APP.symbol;输入文件为动态库文件A.out时,生成控制文件A.out.ctl;输入文件为动态库文件B.out时,生成控制文件B.out.ctl;所述符号表文件保存可执行文件内全局符号的key-value值;所有的可执行文件对应的符号表文件格式一致的,不同的可执行文件,符号表文件内容是不一致的;所有的动态库文件对应的符号表文件格式一致的,不同的动态库文件,控制文件的内容是不一致的;所述程序固化模块用于将在主机端生成的文件放到目标板FLASH上;所述操作系统自举模块用于将APP.out文件从FLASH的0x90000000搬运至指定片内RAM处,并跳转到操作系统入口处执行;所述获取全局符号表模块用于将全局符号从FLASH上符号表文件提取出到内存,并对宿主机生成的符号表文件进行解析,将符号表文件内符号获取到内存后,供动态加载器加载动态库过程使用。该过程分为两步完成:从FLASH上获取符号表文件,并解析符号表文件内符号信息。2.如权利要求1所述的系统,其特征在于,所述程序固化模块具体用于对目标板FLASH进行划分,将不同的文件固化在FLASH的不同位置;。3.如权利要求1所述的系统,其特征在于,所述加载动态库模块具体用于指定动态库控制文件地址和加载动态库;指定动态库控制文件地址:动态加载器为用户提供加载动态库的接口getFileCtlInfo,该接口到FLASH指定区域获取符号表文件内容,用户在加载动态库时调用该接口,并提供动态库控制文件地址;函数getFileCtlInfo从FLASH获取控制文件,并根据控制文件的格式解析文件内容;加载动态库:根据动态库对应控制文件内容,查找并获取指定FLASH地址处的动态库文件,并将获取的动态库加载到目标板内存。4.如权利要求1所述的系统,其特征在于,所述系统所实现的直接从FLASH读取动态库文件函...

【专利技术属性】
技术研发人员:张记强张杨王仁
申请(专利权)人:北京计算机技术及应用研究所
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1