System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种用于嵌入式设备的动态加载方法及系统技术方案_技高网

一种用于嵌入式设备的动态加载方法及系统技术方案

技术编号:44018222 阅读:4 留言:0更新日期:2025-01-15 01:03
本发明专利技术公开了一种用于嵌入式设备的动态加载方法及系统,包括以下步骤:步骤S1:主机将固件和动态库文件烧录到嵌入式设备的存储介质;步骤S2:在嵌入式设备内存中运行固件;步骤S1中,动态库生成模块将动态库源码按功能分别生成对应动态库文件,固件源码集成动态加载模块并编译生成固件文件;其中,固件文件中保存对应动态库文件的信息,所述信息至少包括动态库名、动态库文件在存储介质中的起始地址以及动态库文件在存储介质中所占用的内存大小;步骤S2中,在固件运行到加载某个库函数时,根据固件文件中保存的对应动态库文件的信息在存储介质中找到对应动态库文件,并把该动态库文件映射到内存中并构建该动态库的全局动态符号表以调用库函数。

【技术实现步骤摘要】

本专利技术属于计算机嵌入式软件开发与硬件交互,尤其涉及一种用于嵌入式设备的动态加载方法及系统


技术介绍

1、动态库加载技术起源于操作系统和编程语言的发展,旨在解决大型软件系统中静态链接库的局限性。静态链接库在编译时将代码静态地集成到应用程序中,这会导致应用程序体积增大,与之相对,动态库允许程序在运行时加载和关闭库文件,从而减少内存占用。对于固件开发者而言,使用静态链接库能够提高固件的可靠性,但从内存资源的利用方面考虑,动态库相对于静态库更加灵活且占用内存空间更少,且动态加载模块技术允许程序在不重启的情况下加载和卸载模块,这种技术通过使用特定的api实现,使得程序能够查询和调用动态库中的函数和变量。在嵌入式系统、桌面应用程序、web服务器和移动设备等领域,动态库和动态加载模块技术都发挥着重要作用。它们不仅提高了软件的灵活性和可扩展性,还为软件开发带来了更高的效率和更好的用户体验。随着技术的不断发展,动态库和动态加载模块预计将继续在软件工程中扮演重要角色。

2、现有技术中,许多在嵌入式设备中实现动态加载模块都采取了文件系统,例如将文件系统挂载到sd卡或者flash中,将动态库转存到文件系统中,在需要使用动态库时直接从文件系统中调用。虽然挂载文件系统是一个相对标准化的过程,但在实际操作中也会遇到一些挑战,例如需要确保文件系统与目标硬件(如存储介质和处理器)兼容、需要选择适合应用需求的文件系统类型、驱动程序支持、文件系统依赖项多等问题。

3、同时,现有技术也提出了不采取了文件系统而直接读写flash的本地动态加载方法,在嵌入式系统本地动态加载时直接从flash上进行读取,但取决于硬件平台的设计和需求,难以在所有嵌入式设备中得到广泛适用。因为固件可以运行在不同多种类型的存储介质中,例如emmc、sd卡、固态硬盘等。

4、故,针对现有技术的缺陷,实有必要提出一种技术方案以解决现有技术存在的技术问题。


技术实现思路

1、有鉴于此,确有必要提供一种用于嵌入式设备的动态加载方法及系统,通过在固件中存储库文件相关信息,在固件运行时直接将存储在存储介质中动态库文件映射到ram中,并将ram中的库文件中所有动态符号生成动态符号表存储到一块新的内存空间中,在固件运行调用时只需访问该动态符号表而不用访问库文件;由于将库函数映射到ram中,能够大大提高动态库调用速度,同时在调用完库文件后马上释放掉在ram中申请的内存资源,减少数据泄露的风险,提高内存资源利用率。

2、为了解决现有技术存在的技术问题,本专利技术的技术方案如下:

3、一种用于嵌入式设备的动态加载方法,包括如下步骤:

4、步骤s1:主机将固件和动态库文件烧录到嵌入式设备的存储介质;

5、步骤s2:在嵌入式设备内存中运行固件;

6、步骤s1中,动态库生成模块将动态库源码按功能分别生成对应动态库文件,固件源码集成动态加载模块并编译生成固件文件;其中,固件文件中保存对应动态库文件的信息,所述信息至少包括动态库名、动态库文件在存储介质中的起始地址以及动态库文件在存储介质中所占用的内存大小;

7、步骤s2中,在固件运行到加载某个库函数时,根据固件文件中保存的对应动态库文件的信息在存储介质中找到对应动态库文件,并把该动态库文件映射到内存中并构建该动态库的全局动态符号表以调用库函数。

8、作为进一步的改进方案,步骤s1中,固件文件中通过定义一个结构体数组来保存对应动态库文件的相关信息。

9、作为进一步的改进方案,步骤s2还包括:

10、将调用到的动态库文件根据其在存储介质中的地址及占用大小映射到内存中;

11、解析内存中的动态库,统计全局函数符号;

12、根据统计的全局函数符号在内存上申请对应内存空间,构建全局动态符号表;

13、根据每个符号在全局动态符号表对应的内存地址调用相应库函数;

14、在完成对库文件的调用后,关闭动态库,直接释放掉在内存中申请的空间。

15、作为进一步的改进方案,步骤s1中,采用rt-thread操作系统的动态加载模块并将其集成固件中。

16、作为进一步的改进方案,动态库生成模块管理各个动态库之间的依赖关系,使每个动态库独立生成一个动态库文件。

17、作为进一步的改进方案,固件和动态库文件在存储介质中连续存储或者存储在存储介质中的不同位置。

18、作为进一步的改进方案,步骤s2中,在内存中存储一张调用历史表,用于记录初次调用动态库之后留下调用的信息;不同线程中调用的不同库函数,再次进入某线程时,利用调用历史表提前将对应动态库加载到内存中。

19、作为进一步的改进方案,在固件运行到加载某个库函数时,利用rt-thread操作系统的动态加载模块的接口加载对应动态库文件;

20、构建全局动态符号表后,通过dlopen接口返回一个库句柄handle,用以表示符号表所在地址;

21、在固件运行调用库函数时,使用dlsym接口获取动态库函数地址,其中,dlsym接口包含两个输入参数,第一个为调用库文件的库句柄,即为dlopen的返回值,第二个输入参数为需要调用的动态函数名,根据dlsym中所需调用的函数名,在内存中的全局动态符号表找到所需的函数地址;

22、在完成对库文件的调用后,使用dlclose接口,关闭或卸载之前dlopen接口所打开的动态链接库,释放内存中为库文件所申请的空间。

23、作为进一步的改进方案,步骤s1中,存储介质为flash、emmc或sd卡中任一种。

24、本专利技术还公开了一种用于嵌入式设备的动态加载系统,包括主机和嵌入式设备,主机用于生成固件和动态库文件并烧录到嵌入式设备的存储介质:其中,主机包括:

25、动态库生成模块,用于将每个动态库源码按照功能分块编译成不同的动态库文件;

26、固件生成模块,用于将固件源码编译成固件,其中,固件中集成动态加载模块,所述动态加载模块用于动态加载相应的动态库文件;

27、动态库烧录模块,用于将所生成的固件和动态库文件烧录至嵌入式设备的存储介质;

28、嵌入式设备用于在内存中运行固件并实现动态加载动态库文件,其中,通过固件中的动态加载模块实现对动态库的加载调用;固件文件中保存对应动态库文件的信息,所述信息至少包括动态库名、动态库文件在存储介质中的起始地址以及动态库文件在存储介质中所占用的内存大小;在固件运行到加载某个库函数时,根据固件文件中保存的对应动态库文件的信息在存储介质中找到对应动态库文件,并把该动态库文件映射到内存中并构建该动态库的全局动态符号表以调用库函数。

29、与现有技术相比较,本专利技术技术方案具有如下技术效果:

30、1、充分利用ram的灵活性以及cpu读取快的优点,将其他存储介质中动态库文件映射到ram中,并将ram中的库文件中所有动本文档来自技高网...

【技术保护点】

1.一种用于嵌入式设备的动态加载方法,其特征在于,包括如下步骤:

2.根据权利要求1所述的用于嵌入式设备的动态加载方法,其特征在于,步骤S1中,固件文件中通过定义一个结构体数组来保存对应动态库文件的相关信息。

3.根据权利要求2所述的用于嵌入式设备的动态加载方法,其特征在于,步骤S2还包括:

4.根据权利要求3所述的用于嵌入式设备的动态加载方法,其特征在于,步骤S1中,采用RT-Thread操作系统的动态加载模块并将其集成固件中。

5.根据权利要求4所述的用于嵌入式设备的动态加载方法,其特征在于,动态库生成模块管理各个动态库之间的依赖关系,使每个动态库独立生成一个动态库文件。

6.根据权利要求4所述的用于嵌入式设备的动态加载方法,其特征在于,固件和动态库文件在存储介质中连续存储或者存储在存储介质中的不同位置。

7.根据权利要求4所述的用于嵌入式设备的动态加载方法,其特征在于,步骤S2中,在内存中存储一张调用历史表,用于记录初次调用动态库之后留下调用的信息;不同线程中调用的不同库函数,再次进入某线程时,利用调用历史表提前将对应动态库加载到内存中。

8.根据权利要求4所述的用于嵌入式设备的动态加载方法,其特征在于,在固件运行到加载某个库函数时,利用RT-Thread操作系统的动态加载模块的接口加载对应动态库文件;

9.根据权利要求4所述的用于嵌入式设备的动态加载方法,其特征在于,步骤S1中,存储介质为flash、eMMC或SD卡中任一种。

10.一种用于嵌入式设备的动态加载系统,其特征在于,包括主机和嵌入式设备,主机用于生成固件和动态库文件并烧录到嵌入式设备的存储介质:其中,主机包括:

...

【技术特征摘要】

1.一种用于嵌入式设备的动态加载方法,其特征在于,包括如下步骤:

2.根据权利要求1所述的用于嵌入式设备的动态加载方法,其特征在于,步骤s1中,固件文件中通过定义一个结构体数组来保存对应动态库文件的相关信息。

3.根据权利要求2所述的用于嵌入式设备的动态加载方法,其特征在于,步骤s2还包括:

4.根据权利要求3所述的用于嵌入式设备的动态加载方法,其特征在于,步骤s1中,采用rt-thread操作系统的动态加载模块并将其集成固件中。

5.根据权利要求4所述的用于嵌入式设备的动态加载方法,其特征在于,动态库生成模块管理各个动态库之间的依赖关系,使每个动态库独立生成一个动态库文件。

6.根据权利要求4所述的用于嵌入式设备的动态加载方法,其特征在于,固件和动态库文件在存储介质中连续存储或者存储在...

【专利技术属性】
技术研发人员:樊凌雁史天毅刘宇翔黄柏茗
申请(专利权)人:杭州电子科技大学
类型:发明
国别省市:

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

1