您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术嵌入式Linux系统小型化技术 正文
嵌入式Linux系统小型化技术

嵌入式Linux系统小型化技术

点击数:7349 次   录入时间:03-04 11:54:21   整理:http://www.55dianzi.com   嵌入式系统-技术
2.2.2、 ELF文件的符号表和重定位过程

ELF文件的Section header table中有一个类型为SHT_DYNSYM的Section,该Section记录了创建进程映像所需要的所有符号。

a、符号值确定和符号定位,ELF文件中字符串ection(.shstrtab)用于保存所有字符串,ELF头通过e­_shstrndx域保存节头名字字符串表(.shstrtab)的节索引。ELF文件中符号名字域值是.shstrtab节的一个字符索引:Syrnbol结构中St_name对应相应的字符串表一个索引,在相应的字符串表中对应其符号值,St_value对应两类不同地址:对于文件内部定义符号,对应该符号内容的文件内部相对地址;对于外部调用符号,对应待调符号的地址(已解析)或重定位表中的一个入口(未解析)。St_info保存符号的类型和相应的属性。

b、被调符号重定位。符号表中,STT-SEC-TION对应重定位入口信息表。重定位入口以数组的形式存在于ELF文件中,其中的R_offset保存着应用于重定位行为的地址,而R_addend对应一个偏移用于计算要存储于重定位域中的值。R_info中给出受重定位影响的符号索引和重定位应用的类型。例如:当类型为R_386_JMP_SLOT时,符号值就对应一个.plt(过程连接表)入口的位置.

c、外部符号装载。对于外部符号代码的装载,装载器通过lazy MODE装载方式将外部符号代码加载到进程映像中:首次调用外部符号通过PLT[0]中的装载代码和PLT[1]中出栈参数将待调符号代码加载到.got表中;以后对此待调符号的调用通过对应.got表入口进行控制传输。

2.2.3、 ELF文件符号提取实现

对每个参与动态链接的共享目标文件来说,其程序头表(Program header table)有一个类型为PT_DYNAMIC的入口元素。该入口所指向的段.dynamic section是一个Elf32_Dyn的结构数组.Elf32_Dyn结构中有一个属性标志d_tag和一个联合结构d_un,d_tag控制d_un中的解释。数组中下标为DT_SYMTAB的入口指向符号表。通过对符号表、重定位表、过程连接表、全局过程表的相关控制结构进行分析,完成文件定义符号和待调符号的分离提取,算法如下:

symtab=.dynamic[DT_SYMTAB]->d_un. d->ptr

∥根据DT_SYMTAB找到符号表的地址

for(int i=0;symtab[i]!=NULL;i++)

∥对符号表中所有入口进行扫描

{swith((symtab[i] ->st_info)>>4) ∥根据符号类型进行操作

}…

case STB_WEAK:

case STB_GLOBOL:/*对全局性的和弱符号可用于外部文件调用*/

if(对应入口指向过程连接表入口)/*如果其指向的地址为.plt入口则在创建进程映像的时候需要重定位*/

loadrequest(symtab[i]->st_name);/*重定位并将该符号的名字在字符表找到reLOCate(symtab[i]->st_value)相应的值,并将其名字放人相应的关系表*/

else

loadprovide(symtab[i]->st_name);/*如果是内部定义,那么此符号名是供其它的应用程序调用*/

… }}

ELF文件中定义符号和待调符号由其st_value所指的目标进行区分:对应于.plt表的待调符号需要重定位;对应于内部符号,如果是弱类型(WEAK)或全局类型(GL0BOL)则用于其它文件调用。通过对ELF格式中的待调符号的提取,建立起应用程序和符号的依赖关系。

2.3、嵌入式系统小型化结果与分析

对各个表进行连接得到应用程序依赖的目标文件集合。将集合中的目标文件无重复记录并重新连接从而得到最小化库。前后库中各数据对比见表3。小型化后,系统库内各组成部分显著减少,库被缩减近50%。对于日益庞大的嵌入式系统中的应用程序,根据库文件内部的依赖关系,在其基础上对应用程序进行优化裁减,对一般性应用可以使系统库减小40%~50%。

 

小型化前

小型化后

目标文件(个)

1183

544

符号(个)

9118

4861

显性依赖(条)

3819

1887

间接依赖(条)

120273

55425

上一页  [1] [2] [3] [4]  下一页


本文关键字:技术  嵌入式  Linux  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术