附录A ADT IDE中的链接定位脚本说明
链接定位是系统级软件开发过程中必不可少的一部分。嵌入式软件开发均属于系统级开发,绝大部分嵌入式软件都涉及到链接定位脚本文件。链接定位脚本使得我们的目标代码组织更加灵活。
1.链接定位脚本文件说明
链接定位过程一般由链接器根据链接定位脚本完成,比较简单的系统可以通过设置链接器开关选项取代链接定位脚本。链接定位的关键是链接定位脚本的编写。我们从典型的目标文件结构开始,来介绍链接定位脚本文件的编写。下面是该系统一个目标文件的典型组织,见图A-1。
图A-1 目标文件典型组织图
图A-1中从第二栏开始,分别展示了该文件各个段(Sections)的属性:名称(Name)、类型(Type)、地址(Addr)、偏移(Offs)、大小(Size)、固定单元大小(Es)、标志(Flg)、连接依赖(Lk)、附加属性(Inf)、字节对其宽度(Al)。
地址部分(Addr)描述了这一段在目标系统中的地址,而偏移(Offs)则记载了该段在目标文件中的偏移,大小(Size)表示该段的实际长度。比如图A-1中.Text段的地址为0x0c700000、偏移为0x008000、大小为0x00d950,这说明该段位于文件的偏移0x008000处,它将被下载到目标板0x0c700000处。(https://www.xing528.com)
从段的分类来看,第7段以后的内容仅仅与调试有关,涉及到定位的也就是前面几段,即.text、.data、.rodata、.bss。下面是一个具体的链接定位脚本文件:
text段是程序代码段,紧随其后的是几个符号定义,它们是由编译器在编译连接时自动计算的。当我们在链接定位文件中申明这些符号后,编译连接时,该符号的值会自动代入到源程序的引用中。如果想进一步了解连接定位的一些含义,可以参考编程手册中的ld一章。
data段的起始位置是由连接定位文件所确定,大小在编译连接时自动分配,它和我们的程序大小没有关系,但和程序使用到的全局变量、常量数量相关。
bss的初始值也是由我们自己定义的连接定位文件所确定,我们应该将它定义在可读写的RAM区内。stack的顶部在可读写的RAM区的最后,我们可以非常灵活的定义其起点和大小,但对大部分情况来说,程序区在ROM或Flash中,可读写区域在SRAM或DRAM中,我们可以考虑一下自己的程序规模、函数调用规模、存储器组织,然后参照一个连接定位文件稍加修改就可以了。
2.链接定位脚本修改实例
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
