![ARM体系结构与编程(第2版)第11章_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/3e676f32-af18-406b-ba57-195e62eebce7/3e676f32-af18-406b-ba57-195e62eebce71.gif)
![ARM体系结构与编程(第2版)第11章_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/3e676f32-af18-406b-ba57-195e62eebce7/3e676f32-af18-406b-ba57-195e62eebce72.gif)
![ARM体系结构与编程(第2版)第11章_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/3e676f32-af18-406b-ba57-195e62eebce7/3e676f32-af18-406b-ba57-195e62eebce73.gif)
![ARM体系结构与编程(第2版)第11章_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/3e676f32-af18-406b-ba57-195e62eebce7/3e676f32-af18-406b-ba57-195e62eebce74.gif)
![ARM体系结构与编程(第2版)第11章_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/3e676f32-af18-406b-ba57-195e62eebce7/3e676f32-af18-406b-ba57-195e62eebce75.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第11章章 ARM连接器连接器11.1 ARM映像文件映像文件ARM中的各种源文件(包括汇编程序、C语言程序以及C+程序)经过ARM编译器编译后,生成ELF格式的目标文件。这些目标文件和相应的C/C+运行时库经过ARM连接器处理后,生成ELF格式的映像文件(Image)。这种ELF格式的映像文件可以被写入嵌入式设备的ROM中。本节介绍这种ELF格式的映像文件的结构。211.1.1 ARM映像文件的组成映像文件的组成1. ARM映像文件的组成部分映像文件的组成部分一个映像文件由一个或多个域组成。每个域包含一个或多个输出段。每个输出段包含一个或多个输入段。各输入段包含了目标文件中的代码和数据。3
2、11.1.1 ARM映像文件的组成映像文件的组成2. ARM映像文件各组成部分的地址映射映像文件各组成部分的地址映射ARM映像文件各组成部分在存储系统中的地址有两种:一种是在映像文件位于存储器中时(也就是该映像文件开始运行之前)的地址,称为加载时地址;一种是在映像文件运行时的地址,称为运行时地址。在图11.2给出的例子中,RW段的加载时地址为0 x6000(指该段所占的存储区域的起始地址),该地址位于ROM中;RW段的运行时地址为0 x8000(指该段所占的存储区域的起始地址),该地址位于RAM中。4RO段RAM加载时的地址映射关系运行时的地址映射关系0 x00000 x60000 x8000
3、0 xa0000 xffffRW段RO段RW段ZI 段ROM 11.1.2 ARM映像文件的入口点映像文件的入口点1. ARM映像文件中的两类入口点映像文件中的两类入口点2. 定义初始入口点定义初始入口点3. 普通入口点的用法普通入口点的用法511.1.3 输入段的排序规则输入段的排序规则通常情况下,一个输出段中,各输入段的排列顺序通常情况下,一个输出段中,各输入段的排列顺序是由下面几个因素决定的。用户也可以通过连接选是由下面几个因素决定的。用户也可以通过连接选项项-first和和-last来改变这些规则。来改变这些规则。输入段的属性。输入段的名称。各输入段在连接命令行的输入段列表中的排列顺序
4、。按照输入段的属性,其排列顺序如下所示。按照输入段的属性,其排列顺序如下所示。(1)只读的代码段。(2)只读的数据段。(3)可读写的代码段。(4)其他已经初始化的数据段。(5)未初始化的数据。611.2 ARM连接器介绍连接器介绍ARM开发包中包含了连接器开发包中包含了连接器armlink,它将编译得,它将编译得到的到的ELF格式的目标文件以及相关的格式的目标文件以及相关的C/C+运行时运行时库进行连接,生成相应的结果文件。库进行连接,生成相应的结果文件。具体来说,具体来说,armlink可以完成以下操作:可以完成以下操作:连接编译后得到的目标文件和相应的C/C+运行时库,生成可执行的映像文件
5、。将一些目标文件进行连接,生成一个新的目标文件,供将来进一步连接时使用,这称为部分连接。指定代码和数据在内存中的位置。生成被连接文件的调试信息和相互间的引用信息。711.2 ARM连接器介绍连接器介绍armlink在进行部分连接和完全连接生成可执行的映像文件时所进行的在进行部分连接和完全连接生成可执行的映像文件时所进行的操作是不同的。下面分别介绍这两种情况。操作是不同的。下面分别介绍这两种情况。(1)armlink在进行完全连接生成可执行的映像文件时执行下面的操作。解析输入的目标文件之间的符号引用关系。根据输入目标文件对C/C+函数的调用关系,从C/C+运行时库中提取相应的模块。将各输入段排序
6、,组成相应的输出段。删除重复的调试信息段。根据用户指定的分组和定位信息,建立映像文件的地址映射关系。重定位需要重定位的值。生成可执行的映像文件。(2)armlink在进行部分连接生成新的目标文件时执行下面的操作。删除重复的调试信息段。最小化符号表的大小。保留那些未被解析的符号。生成新的目标文件。811.3 ARM连接器生成的符号连接器生成的符号ARM连接器定义了一些符号,这些符号中都包含字符连接器定义了一些符号,这些符号中都包含字符$。ARM连接器在生成映像文件时,用它们来代表映像文件中连接器在生成映像文件时,用它们来代表映像文件中各域的起始地址以及存储区域界限、各输出段的起始地址以各域的起始
7、地址以及存储区域界限、各输出段的起始地址以及存储区域界限、各输入段的起始地址以及存储区域界限。及存储区域界限、各输入段的起始地址以及存储区域界限。比如,比如,Load$region_name$Base代表域代表域region_name加载时的起始地址;而加载时的起始地址;而image$region_ name$Base代表代表域域region_name运行时的起始地址。运行时的起始地址。这些符号可以被汇编程序引用,用于地址重定位。这些符号这些符号可以被汇编程序引用,用于地址重定位。这些符号可以被可以被C程序作为外部符号引用。程序作为外部符号引用。所有这些符号,只有在其被应用程序引用时,所有这些
8、符号,只有在其被应用程序引用时,ARM连接器连接器才会生成该符号。才会生成该符号。推荐使用映像文件中与域相关的符号,而不是使用与段相关推荐使用映像文件中与域相关的符号,而不是使用与段相关的符号。的符号。911.3.1 连接器生成的与域相关的符号连接器生成的与域相关的符号连接器生成的与域相关的符号如表连接器生成的与域相关的符号如表11.1所示。各符号的命名所示。各符号的命名规则是:如果使用了地址映射配置文件规则是:如果使用了地址映射配置文件(scatter文件文件),该文,该文件规定了映像文件中各域的名称;如果未使用地址映射配置件规定了映像文件中各域的名称;如果未使用地址映射配置文件文件(sca
9、tter文件文件),连接器按照下面的规则确定各符号中的,连接器按照下面的规则确定各符号中的region_name:对于只读的域,使用名称ER_RO。对于可读写的域,使用名称ER_RW。对于使用0初始化的域,使用名称ER_ZI。10符号名称含 义Load$region_name$Base域region_name的加载时起始地址Image$region_name$Base域region_name的运行时起始地址Image$region_name$Length域region_name运行时的长度(为4字节的倍数)Image$region_name$Limit域region_name运行时存储区域末尾
10、的下一个字节地址(该地址不属于域region_name所占的存储区域) 11.3.1 连接器生成的与域相关的符号连接器生成的与域相关的符号对于映像文件的每个域,如果其中包含了对于映像文件的每个域,如果其中包含了ZI属性的属性的输出段,连接器将会为该输出段,连接器将会为该ZI输出段生成另外的符号。输出段生成另外的符号。这些符号如表这些符号如表11.2所示。所示。11符号名称含 义Image$region_name$ ZI$Base域region_name中ZI输出段的运行时起始地址Image$region_name$ ZI$Length域region_name中ZI输出段运行时的长度(为4字节的
11、倍数)Image$region_name$ ZI$Limit域region_name中ZI输出段运行时存储区域末尾的下一个字节地址(该地址不属于域region_name所占的存储区域) 11.3.2 连接器生成的与输出段相关的符号连接器生成的与输出段相关的符号如果未使用地址映射配置文件如果未使用地址映射配置文件(scatter文件文件),连接,连接器生成的与输出段相关的符号如器生成的与输出段相关的符号如 表表11.3所示;如所示;如果使用了地址映射配置文件果使用了地址映射配置文件(scatter文件文件),表,表11.3中所列的符号没有意义,如果应用程序使用了这些中所列的符号没有意义,如果应用
12、程序使用了这些符号,将可能得到错误的结果,这时应该使用上一符号,将可能得到错误的结果,这时应该使用上一小节中介绍的与域相关的符号。小节中介绍的与域相关的符号。12符号名称含 义Image $RO$BaseRO输出段运行时的起始地址Image$RO$LimitRO输出段运行时存储区域的界限Image $RW$BaseRW输出段运行时的起始地址Image$RW$LimitRW输出段运行时的存储区域界限Image $ZI$BaseZI输出段运行时的起始地址Image$ZI$LimitZI输出段运行时存储区域的界限11.3.3 连接器生成的与输入段相关的符号连接器生成的与输入段相关的符号ARM连接器为
13、映像文件中的每一个输入段生成两个连接器为映像文件中的每一个输入段生成两个符号,如表符号,如表11.4所示。所示。13符号名称含 义SectionName$BaseSectionName输入段运行时的起始地址SectionName $LimitSectionName输入段运行时的存储区域界限11.4 连接器的优化功能连接器的优化功能1. 删除重复的调试信息段删除重复的调试信息段2. 删除重复的代码段删除重复的代码段3. 删除未使用的段删除未使用的段4. 生成小代码段生成小代码段(veneer)1411.5 运行时库的使用运行时库的使用ARM连接器使用连接器使用C/C+运行时库的基本步骤如下。运行
14、时库的基本步骤如下。(1)ARM连接器根据一定的规则确定需要使用哪些C/C+运行时库。具体的规则在11.5.1小节中介绍。(2)从各搜索路径中查找相应的C/C+运行时库。参见11.5.2小节中的介绍。(3)选择合适种类的C/C+运行时库。适应于不同的编译选项和连接选项,各C/C+运行时库具有不同的种类。参见11.5.3小节中的介绍。(4)重复扫描各C/C+运行时库,解析各符号。参见11.5.4小节中的介绍。1511.5.1 C/C+运行时库与目标文件运行时库与目标文件ARM中中C/C+运行时库就是一些运行时库就是一些ELF格式的目标文件的集合,这些目标格式的目标文件的集合,这些目标文件是按照文
15、件是按照ar格式组织在一起的。格式组织在一起的。ARM连接器在使用一般目标文件和连接器在使用一般目标文件和C/C+运行时库时有所不同。其主要区别如下所示。运行时库时有所不同。其主要区别如下所示。(1)在ARM连接器的输入列表中的所有目标文件将被无条件地包含到输出的映像文件中,而不论该目标文件是否被其他的目标文件引用。如果用户在连接时没有指定连接选项-noremove,连接器将会在后面的处理中删除映像文件中没有被使用的段。(2)而连接器在使用C/C+运行时库时,有所不同,主要遵守下面的规则:如果在连接器的输入列表中显式地指定了C/C+运行时库的某成员,则该成员将被无条件地包含到输出的映像文件中,
16、而不论该成员是否被其他的目标文件引用。如果C/C+运行时库中某成员被其他的目标文件按nonweak方式引用,或者被其他已经被包含的C/C+运行时库中的成员按nonweak方式引用,则该C/C+运行时库中的成员将会被包含到输出的映像文件中。被按weak方式引用的C/C+运行时库中的成员不会被包含到输出的映像文件中。1611.5.2 查找需要的查找需要的C/C+运行时库运行时库可以通过下面可以通过下面3种方法来指定种方法来指定ARM标准标准C/C+运行运行时库的路径。其中连接选项时库的路径。其中连接选项-libpath指定的指定的ARM标标准准C/C+运行时库的路径优先级高于使用环境变量运行时库的
17、路径优先级高于使用环境变量ARMLIB指定的指定的ARM标准标准C/C+运行时库的路径。运行时库的路径。使用连接选项-libpath来指定ARM标准C/C+运行时库的路径。这时指定的是包含路径armlib和cpplib的父路径。使用Code Warrior IDE中关于连接选项的控制面板来指定ARM标准C/C+运行时库的路径。使用环境变量ARMLIB来指定ARM标准C/C+运行时库的路径。这时ARMLIB被设置成包含路径armlib和cpplib的父路径。1711.5.3 选择合适种类的选择合适种类的C/C+运行时库运行时库针对不同的编译选项和连接选项,各针对不同的编译选项和连接选项,各C/C
18、+运行时运行时库具有不同的种类。各种不同种类的库具有不同的种类。各种不同种类的C/C+运行时运行时库是依靠其名称来识别的。库是依靠其名称来识别的。C/C+运行时库的命名运行时库的命名格式如下所示:格式如下所示: root_.1811.5.4 扫描扫描C/C+运行时库运行时库在从上面的操作中得到需要使用的在从上面的操作中得到需要使用的C/C+运行时库,运行时库,ARM连接器扫描这些连接器扫描这些C/C+运行时库,加载相应的对象,解析各运行时库,加载相应的对象,解析各目标文件中的符号。具体操作步骤如下。目标文件中的符号。具体操作步骤如下。(1)ARM连接器按顺序扫描各C/C+运行时库,以完成所有的
19、nonweak方式的引用关系。这样,如果有多个目标可以满足引用关系,则排在前面的库被使用。这是一个必须注意的特点。(2)如果某个库的成员满足引用要求,该成员被加载,从而解析了相应的符号。该成员函数的引入也可能实现了weak方式的引用。(3)在引入某个成员后,在解析了一些符号同时,可能带来新的需要解析的符号。(4)这种解析过程重复进行,直到解析完所有的符号,或者确定某些符号不能被解析为止。1911.6 从一个映像文件中使用另一个映像文件中的符号从一个映像文件中使用另一个映像文件中的符号在在ARM中,从一个映像文件中访问另一个映像文件中,从一个映像文件中访问另一个映像文件中的符号是通过中的符号是通
20、过symdefs文件实现的。本节介绍这文件实现的。本节介绍这些相关的技术。些相关的技术。2011.6.1 symdefs文件文件symdefs文件是一种目标文件。与普通的目标文件文件是一种目标文件。与普通的目标文件不同的是,其中只包含了符号和其对应的数值,没不同的是,其中只包含了符号和其对应的数值,没有包含代码和数据。一个有包含代码和数据。一个symdefs文件通常包括文件通常包括3部分:一个标识符;可选的注释部分;包含符号和部分:一个标识符;可选的注释部分;包含符号和其对应的数值的部分。下面是一个其对应的数值的部分。下面是一个symdefs文件的文件的简单例子。它包括了一个简单例子。它包括了
21、一个symdefs文件通常包含的文件通常包含的3部分。部分。标识符:标识符: # 注释:注释: ; value type name, this is an added comment2111.6.1 symdefs文件文件1. 标识符字符串标识符字符串2. 注释注释3. 符号及其对应的值符号及其对应的值(1)符号的地址值:ARM连接器使用固定的十六进制值来表示符号的地址值。用户在修改该地址值时可以使用十六进制,也可以使用十进制。(2)符号的类型:它有下面3类。A:ARM代码符号。T:Thumb代码符号。D:数据符号。(3)符号名称:满足ARM中关于合法符号的定义。2211.6.2 建立建立sy
22、mdefs文件文件在完成所有的其他连接操作后,在完成所有的其他连接操作后,ARM连接器可以生连接器可以生成一个成一个symdefs文件。对于部分连接和失败的连接文件。对于部分连接和失败的连接操作,操作,ARM连接器不会产生连接器不会产生symdefs文件。文件。使用连接选项使用连接选项-symdefs filename生成相应的生成相应的symdefs文件时,可以有下面两种情况:文件时,可以有下面两种情况:如果连接选项中指定的文件filename不存在,在ARM连接器生成包括所有全局符号的symdefs文件。如果连接选项中指定的文件filename已存在,则该文件的内容将限制ARM连接器生成的
23、symdefs文件中包括哪些符号。2311.6.3 symdefs文件的使用文件的使用 使用使用symdefs文件的方法与使用普通的目标文件相文件的方法与使用普通的目标文件相同,将其作为输入文件。同,将其作为输入文件。ARM连接器从连接器从symdefs文文件中提取需要的符号及其相关信息,将这些信息加件中提取需要的符号及其相关信息,将这些信息加入到输出符号表中,这些符号具有入到输出符号表中,这些符号具有ABSOLUTE和和GLOBAL属性。属性。ARM连接器像对待从其他目标文连接器像对待从其他目标文件中提取的符号一样对待这些符号。件中提取的符号一样对待这些符号。在从在从symdefs文件中提取
24、符号及其相关信息时,在文件中提取符号及其相关信息时,在下列情况下,下列情况下,ARM连接器认为该符号为非法符号,连接器认为该符号为非法符号,将产生错误信息:将产生错误信息:该符号的某一列信息为空时。该符号的某一列具有非法的数值时。2411.7 隐藏或者重命名全局符号隐藏或者重命名全局符号本节介绍如何将输出文件中的符号隐藏或者重命本节介绍如何将输出文件中的符号隐藏或者重命名。这样可以避免全局符号名称冲突。名。这样可以避免全局符号名称冲突。ARM提供的提供的steering格式的文件就是用于这一目的。格式的文件就是用于这一目的。2511.7.1 steering文件的格式文件的格式steering
25、文件是一个文本文件,其格式如下:文件是一个文本文件,其格式如下:第1个非空格字符为字符“#”或者“;”的行是注释行,注释行是被作为空行来对待的。其中可以包含空行,以提高可读性。空行将被ARM连接器忽略。既非空行,也非注释行的行,可以是一个完整的命令,也可以是一个命令的一部分,因为一个命令可以跨多个行。一个命令行的最后一个非空格字符如果为字符“,”,表示下面的一行是本命令的续行部分。2611.7.2 steering文件中的命令文件中的命令1. RENAME2. HIDE 3. SHOW2711.8 ARM连接器的命令行选项连接器的命令行选项ARM连接器的命令行格式如下所示:连接器的命令行格式如
26、下所示: armlink -help -vsn -partial -output file -elf -ro-base address -ropi-rw-base address -rwpi -split -scatter file -debug|-nodebug-remove (RO/RW/ZI)|-unremove -entry location -keep section-id-first section-id -last section-id -libpath pathlist -scanlib|-noscanlib-locals|-nolocals -callgraph -info
27、topics -map -symbols -symdefs file-edit file -xref -xreffrom object(section) -xrefto object(section)-errors file -list file -verbose -unmangled |-mangled -via file-strict -unresolved symbol input-file-list2811.8 ARM连接器的命令行选项连接器的命令行选项其中选项的含义及用法如下所示。其中选项的含义及用法如下所示。1. -help2. -vsn3. -partial4. -output
28、file5. -elf6. -ro-base address7. -ropi8. -rw-base address9. -rwpi10. -split11. -scatter file12. -debug2911.8 ARM连接器的命令行选项连接器的命令行选项13. -nodebug14. -remove(RW/RO/ZI)15. -unremove16. -entry location17. -keep section-id18. -first section-id19. -last section-id20. -libpath pathlist21. -scanlib22. -noscan
29、lib23. -locals24. -nolocals3011.8 ARM连接器的命令行选项连接器的命令行选项25. -callgraph26. -info topics27. -map28. -symbols29. -symdefs file30. -edit file31. -xref32. -xreffrom object(section)33. -xrefto object(section)34. -errors file3111.8 ARM连接器的命令行选项连接器的命令行选项35. -list file36. -verbose37. -unmangled38. -mangled39. -via file40. -strict41. -unresolved symbol42. -input-file-list3211.9 使用使用scatter文件定义映像文件的地址映射文件定义映像文件的地址映射根据映像文件中地址映射的复杂程度,有两种方法来告诉根据映像文件中地址映射的复杂程度,有两种方法来告诉ARM连接器连接器这些相关的信息。对于映像文件中地址映射关系比较简单的情况,可以这些相关的信息。对于映像文件中地址映射关系比较简单的情况,可以使用命令行选项;对于映像文件中地址映
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2031年中国全塑水平尺行业投资前景及策略咨询研究报告
- 2025至2030年火龙果项目投资价值分析报告
- 植物生长调节剂项目风险识别与评估综合报告
- 搬家服务满意度合同模板
- 二零二五年度创业孵化器办公室租赁与创业辅导合同
- 2025年物业管网燃气维护合同
- 2025年水电燃气费用预算合同
- 2025年商铺租赁合同中不可抗力条款
- 2025年中国地磁感应门行业市场发展前景及发展趋势与投资战略研究报告
- 2025年聚氨酯涂料项目可行性研究报告
- 2024年05月浙江金华成泰农商银行员工招考笔试历年参考题库附带答案详解
- 北京市海淀区2024-2025学年七年级上学期期末考试数学试题(含答案)
- 带看协议书范本(2篇)
- 2025-2030年中国科教玩具行业发展动态及前景趋势分析报告新版
- 股权投资项目建议书
- 2025年北京广播电视台招聘(140人)历年高频重点提升(共500题)附带答案详解
- 2024复工复产安全培训
- 中学生宿舍日常与管理
- 2025中国南光集团限公司校园招聘高频重点提升(共500题)附带答案详解
- 江苏省苏州市2024-2025学年第一学期八年级数学期末模拟卷(一)(无答案)
- 【历史】秦汉时期:统一多民族国家的建立和巩固复习课件-2024-2025学年统编版七年级历史上册
评论
0/150
提交评论