一种基于动态符号表的内核模块内存占用优化方法与流程

文档序号:36272301发布日期:2023-12-06 19:55阅读:22来源:国知局

本发明属于计算机应用开发,具体涉及一种基于动态符号表的内核模块内存占用优化方法。


背景技术:

1、linux内核模块通常被编译为独立的.ko文件,当其加载到内存后一般仅占用几兆空间,然而对于总内存只有几十兆的嵌入式linux系统而言能否精简内核模块加载所占的空间就变得尤为重要。通常情况下,将内核模块加载到内存的过程中,其自带的符号表并非必须完全加载,其中既有必要的导出符号也有仅供调试用的符号,这些仅供调试用的符号绝大部分时候是不被实际使用的,一般仅在内核模块崩溃需要生成调用栈时才需要使用,因此现有的内核模块加载过程导出了过多的符号造成了内存空间的浪费,降低了系统性能。


技术实现思路

1、有鉴于此,本发明提供了一种基于动态符号表的内核模块内存占用优化方法,实现了较低内存占用的系统启动。

2、本发明提供的一种基于动态符号表的内核模块内存占用优化方法,包括以下步骤:

3、步骤1、当系统启动加载内核时,遍历内核模块,解析内核模块获取其符号表及该符号表所对应的索引节点,将已被内核模块标记为需导出的符号加载到全局符号表中,并为加载的符号分配内存;

4、步骤2、根据所述索引节点获取所有内核模块elf文件中的符号表对应的磁盘块指针;

5、步骤3、当产生异常时,获取当前异常相关的内存地址记为异常地址,若异常地址存在于当前内核内存中则获取异常地址对应的符号作为目标符号,执行步骤5;若异常地址未存在于当前内核内存中则遍历所有内核模块,找到包含异常地址的内核地址范围所对应的内核模块,将该内核模块记为目标内核模块,执行步骤4;

6、步骤4、将异常地址转换为目标内核模块内的偏移地址,根据步骤2获取的目标内核模块的磁盘块指针找到其符号表所在磁盘块作为目标磁盘块,读取目标磁盘块中的数据,逐个解析符号直到找到与异常地址对应的符号,将其作为目标符号;

7、步骤5、加载目标符号,完成系统的启动,结束本流程。

8、进一步地,所述步骤1还包括:

9、步骤1.1、调用内核标准方法读取内核模块的模块文件,遍历模块文件,逐个解析符号表中的每个符号,查找是否存在由export_symbol或export_symbol_gpl标记的符号,若存在则执行步骤1.2,否则执行步骤1.3;

10、步骤1.2、解析export_symbol或export_symbol_gpl所标记符号的文件内地址,将这些符号加载到全局符号表中;

11、步骤1.3、遍历模块文件,逐个解析符号表中的每个符号,若符号具有外部可见属性则将其加载到全局符号表中,否则不加载该符号。

12、进一步地,所述步骤1中所述为加载的符号分配内存的方式为:采用slab分配器或slob分配器为加载的符号分配内存。

13、进一步地,所述步骤3中所述异常为:系统启动异常、加载内核模块失败或应用启动异常。

14、进一步地,所述步骤1中还包括:采用insmod、rmmod及lsmod命令动态地加载、卸载及查看内核模块。

15、进一步地,所述步骤1的实现方式为:采用修改linux系统内insmod函数的符号表加载部分实现。

16、有益效果

17、本发明通过修改内核模块的符号表加载机制,在系统启动加载内核时仅将内核模块声明导出的符号加载到全局符号表中,当系统启动加载异常时根据异常地址在当前内核内存中或内核模块中查找到加载异常的符号,将异常地址转换为其所在内核模块的偏移地址,根据偏移地址按需完成符号的加载,实现较低内存占用的系统启动,有效提升了系统启动时的性能。



技术特征:

1.一种基于动态符号表的内核模块内存占用优化方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的内核模块内存占用优化方法,其特征在于,所述步骤1还包括:

3.根据权利要求1所述的内核模块内存占用优化方法,其特征在于,所述步骤1中所述为加载的符号分配内存的方式为:采用slab分配器或slob分配器为加载的符号分配内存。

4.根据权利要求1所述的内核模块内存占用优化方法,其特征在于,所述步骤3中所述异常为:系统启动异常、加载内核模块失败或应用启动异常。

5.根据权利要求1所述的内核模块内存占用优化方法,其特征在于,所述步骤1中还包括:采用insmod、rmmod及lsmod命令动态地加载、卸载及查看内核模块。

6.根据权利要求1所述的内核模块内存占用优化方法,其特征在于,所述步骤1的实现方式为:采用修改linux系统内insmod函数的符号表加载部分实现。


技术总结
本发明公开了一种基于动态符号表的内核模块内存占用优化方法,通过修改内核模块的符号表加载机制,在系统启动加载内核时仅将内核模块声明导出的符号加载到全局符号表中,当系统启动加载异常时根据异常地址在当前内核内存中或内核模块中查找到加载异常的符号,将异常地址转换为其所在内核模块的偏移地址,根据偏移地址按需完成符号的加载,实现较低内存占用的系统启动,有效提升了系统启动时的性能。

技术研发人员:温研
受保护的技术使用者:北京麟卓信息科技有限公司
技术研发日:
技术公布日:2024/1/15
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1