本发明涉及操作系统动态装载的,具体涉及一种基于申威处理器嵌入式操作系统的动态装载实现方法。
背景技术:
1、申威处理器目前没有一个嵌入式实时操作系统能够具有动态装载功能。软件所需要的所有模块,都需要编译、链接成一个镜像文件,然后一次性加载到内存中。加入到内存中后就无法再更改,如果需要增加、修改功能,则需要重新修改模块代码,再和其它模块一起,编译、链接成一个镜像文件,再重新加载到内存中。
2、在现有技术中,以一个功能升级需求为例,当场景用户需要升级软件音频功能时:对于软件开发来说,只需要修改音频相关的内核模块文件代码,然后编译、链接成内核模块文件。将内核模块文件通过 insmod命令加载到系统中(使用动态装载技术),功能即可完成升级,不需要重启系统,不需要将所有模块重新编译。而动态库文件也是如此,如果音频功能替换为动态库文件,则通过修改、编译、和替换相应动态库文件也可实现对应功能的升级。
3、对于客户来说,自己可以编写相应的 app程序源文件,编译链接成可执行文件上传系统,运行后也可实现自定义功能(使用动态装载技术)。
4、因此,现有技术中基于申威处理器的嵌入式实时操作系统在使用时存在以下缺陷与不足:
5、1)软件开发复杂,无法做到功能模块化。同时模块的功能升级复杂,不利于后续功能的维护和迭代;
6、2)对内存大小会有要求,因为所有可能需要的模块都需要一次性装载到内存中;
7、3)用户拿到系统后,无法做二次开发,只能被动使用。系统升级周期很长,用户体验差。
8、因此,亟需提供一种基于申威处理器嵌入式操作系统的动态装载实现方法以解决上述现有技术中存在的缺陷与不足。
技术实现思路
1、为了解决现有技术中存在的缺陷与不足,本发明提供了一种基于申威处理器嵌入式操作系统的动态装载实现方法。
2、本发明提供的具体方案为:
3、一种基于申威处理器嵌入式操作系统的动态装载实现方法,其特征在于:包括以下步骤:
4、1)打开需装载文件;
5、2)解析需装载文件;
6、3)根据解析结果判断需装载文件的类型;需装载文件的类型至少包括有可重定位文件、可执行文件及共享目标文件;
7、4)根据需装载文件的类型选择对应的装载方式;
8、a)当需装载文件的类型为可重定位文件时:
9、a1)解析需装载文件的各个段;
10、a2)读取节区头部表,读入第一文件信息;
11、a3)初始化可重定位文件模块的内存;
12、a4)读取程序数据段及代码段;
13、a5)处理第一文件信息;
14、b)当需装载文件的类型为可执行文件或共享目标文件时:
15、b1)读取和解析需要装载文件的各个段以获得第二文件信息;
16、b2)分段映射并加载可加载段;
17、b3)根据第二文件信息,导出符号并按照倒叙加载所依赖的库;
18、b4)重定位所有需要重定位的模块。
19、作为本发明的进一步优选实施方式,
20、所述步骤1)中,所述需装载文件选用elf文件;
21、所述步骤2)中,解析需装载文件的elf头部分。
22、作为本发明的进一步优选实施方式,
23、所述步骤3)中,根据解析结果中需装载文件的elf头部分成员e_type判断需装载文件的类型。
24、作为本发明的进一步优选实施方式,
25、所述步骤a2)中,读入的第一文件信息至少包括有字符串表、重定位节及符号表。
26、作为本发明的进一步优选实施方式,
27、所述步骤a3)中,包括以下步骤:
28、a3.1)计算 bss 和导出符号表的大小,并为它们分配内存;
29、a3.2)为导出符号表分配内存并构造一个 got 节;
30、a3.3)计算并分配模块需要分配的内存大小。
31、作为本发明的进一步优选实施方式,
32、所述步骤a5)中,包括以下步骤:
33、a5.1)对字符串表进行处理;
34、a5.2)重定位过程;
35、a5.3)导出符号表。
36、作为本发明的进一步优选实施方式,
37、所述步骤a5.2)中,
38、计算所需要的 got 节大小与对应重定位类型在 got 表中的偏移;
39、每个需重定位符号的每个不同加数占一个 got 表条目,用链表数组计算每个符号的不同加数的个数;
40、通过 type 字段的高位去传递 got 表项偏移。
41、作为本发明的进一步优选实施方式,
42、所述步骤b1)中,包括以下步骤:
43、b1.1)读取段头部表,根据段头部表内的信息为可执行文件分配内存空间;
44、b1.2)解析dynamic段,获得第二文件信息;
45、b1.3)导出符号表。
46、作为本发明的进一步优选实施方式,
47、所述步骤b2)中,包括以下步骤:
48、b2.1)根据段的属性,给相应内存进行相应属性设置;
49、b2.2)将需要加载的段加载到分配出的内存空间中。
50、作为本发明的进一步优选实施方式,
51、所述步骤b1.2)中,获得的第二文件信息至少包括有依赖库信息、符号表、及重定位表。
52、相较于现有技术,本发明能够实现的技术效果包括:
53、1)本发明提供一种基于申威处理器嵌入式操作系统的动态装载实现方法,在申威平台上基于嵌入式实时操作系统,提出一种动态装载技术,让程序开发模块化,功能的升级更新更方便,同时减少对内存的要求,且能够提升客户使用体验。
54、2)本发明提供一种基于申威处理器嵌入式操作系统的动态装载实现方法,采用动态装载方式,不需要一次性装载到内存中,节约编译和链接时间。
55、3)本发明提供一种基于申威处理器嵌入式操作系统的动态装载实现方法,支持内核模块、位置无关的可执行程序以及动态库的加载,适用范围广。
56、4)本发明提供一种基于申威处理器嵌入式操作系统的动态装载实现方法,支持加载应用程序时自动加载应用程序所依赖的库文件并且自动解决依赖关系。
1.一种基于申威处理器嵌入式操作系统的动态装载实现方法,其特征在于:包括以下步骤:
2.根据权利要求1所述的一种基于申威处理器嵌入式操作系统的动态装载实现方法,其特征在于:
3.根据权利要求2所述的一种基于申威处理器嵌入式操作系统的动态装载实现方法,其特征在于:所述步骤3)中,根据解析结果中需装载文件的elf头部分成员e_type判断需装载文件的类型。
4.根据权利要求1所述的一种基于申威处理器嵌入式操作系统的动态装载实现方法,其特征在于:所述步骤a2)中,读入的第一文件信息至少包括有字符串表、重定位节及符号表。
5.根据权利要求4所述的一种基于申威处理器嵌入式操作系统的动态装载实现方法,其特征在于:所述步骤a3)中,包括以下步骤:
6.根据权利要求5所述的一种基于申威处理器嵌入式操作系统的动态装载实现方法,其特征在于:所述步骤a5)中,包括以下步骤:
7.根据权利要求6所述的一种基于申威处理器嵌入式操作系统的动态装载实现方法,其特征在于:所述步骤a5.2)中,
8.根据权利要求1所述的一种基于申威处理器嵌入式操作系统的动态装载实现方法,其特征在于:所述步骤b1)中,包括以下步骤:
9.根据权利要求8所述的一种基于申威处理器嵌入式操作系统的动态装载实现方法,其特征在于:所述步骤b2)中,包括以下步骤:
10.根据权利要求8所述的一种基于申威处理器嵌入式操作系统的动态装载实现方法,其特征在于:所述步骤b1.2)中,获得的第二文件信息至少包括有依赖库信息、符号表及重定位表。