链接脚本文件是什么,怎样编写 [转]

转载 2006年05月17日 23:46:00
链接定位是系统级软件开发过程中必不可少的一部分,嵌入式软件开发均属
于系统级开发,绝大部分嵌入式软件都涉及到链接定位脚本文件;链接定位脚本
使得我们的目标代码组织更加灵活. 
1)链接定位脚本文件说明 
链接定位过程一般由链接器根据链接定位脚本完成,比较简单的系统可以通
过设置链接器开关选项取代链接定位脚本;链接定位的关键是链接定位脚本的编
写.我们从典型的目标文件结构开始,来介绍链接定位脚本文件的编写.下面是
该系统一个目标文件的典型组织:  

其中第二栏开始分别展示了该文件各个段(Sections)的属性:名称(Name),
类型(Type),地址(Addr),偏移(Offs),大小(Size),固定单元大小(Es),
标志(Flg),连接依赖(Lk),附加属性(Inf),字节对其宽度(Al). 
地址部分(Addr)描述了这一段在目标系统中的地址,而偏移(Offs)则记
载了该段在目标文件中的偏移,大小(size)表示该段的实际长度;比如上图
中.Text段的地址为0x0c700000,偏移为0x008000,大小为0x00d950,说明该
段位于文件的偏移0x008000处,它将被下载到目标板0x0c700000处. 
从段的分类来看,第7段以后的内容仅仅与调试有关,涉及到定位的也就是
前面几段:.text,.data,.rodata,.bss,下面是一个具体的链接定位脚本文
件: 
SECTIONS 

. = 0x0c200000; /*赋当前地址,后续的代码将从该地址开始存放 */ 
.text : { (.text) } /*.text段表示代码段,从0x0c200000开始放置代码*/ 

Image_RW_Base = .; /* RW(可写数据)基址,实际上是在这里声明了一个全局符号,我们可
以在程序中使用该符号,它等同于在代码中声明一个全局变量,但它的值由链接器指定,在这里"=."表
示该符号的值等于当前地址;下面的定义类似*/ 

.data : { (.data) } /*数据段, 保存已经初始化的全局数据 */ 
.rodata : { *(.rodata) } /*只读数据段, 保存已经初始化的全局只读数据*/ 

Image_ZI_Base = .; /*ZI基地址, 需要清零的区域 zero init*/ 
.bss : { *(.bss) } /*堆栈段,未初始化的全局变量也保存在此*/ 

__bss_start__ = .; /* bss的基地址*/ 
__bss_end__ = .; /* bss的结束地址*/ 

__EH_FRAME_BEGIN__ = .; /* FRAME开始地址(基地址)*/ 
__EH_FRAME_END__ = .; /* FRAME结束地址,gcc编译器使用 */ 
武汉创维特 All rights reserved 9 
FAQ 
PROVIDE (__stack = .); /* 当前地址赋给栈,栈地址一般是可读写区最高处*/ 

end = .; /* 结束地址*/ 
_end = .; /* 结束地址*/ 

.debug_info 0 : { *(.debug_info) } /*调试信息*/ 
.debug_line 0 : { *(.debug_line) } /*调试信息*/ 
.debug_abbrev 0 : { *(.debug_abbrev)} /*调试信息*/ 
.debug_frame 0 : { *(.debug_frame) } /*调试信息*/ 

text段是程序代码段,紧随其后的是几个符号定义,它们是由编译器在编译
连接时自动计算的,当我们在链接定位文件中申明这些符号后,编译连接时,该
符号的值会自动代入到源程序的引用中,如果你想进一步了解连接定位的一些含
义,可以参考编程手册中的ld一章. 
data段的起始位置也是由连接定位文件所确定,大小在编译连接时自动分
配,它和我们的程序大小没有关系,但和程序使用到的全局变量,常量数量相关. 
bss的初始值也是由我们自己定义的连接定位文件所确定,我们应该将它定
义在可读写的RAM区内,stack的顶部在可读写的RAM区的最后,我们可以非常
灵活的定义其起点和大小,但对大部分情况来说,程序区在ROM或FLASH中,可
读写区域在SRAM或DRAM中,我们可以考虑一下自己程序规模,函数调用规模,
存储器组织,然后参照一个连接定位文件稍加修改就可以了. 
2)链接定位脚本修改实例 
SECTIONS 

. = 0x00000000; /*将代码段起始地址修改到0*/ 
.text : { *(.text) } 
Image_RW_Base = .; 
.=0xc0000000 /*设置数据段从0xc0000000开始存放*/ 
.data : { *(.data) } 

.=0xd0000000 /*设置只读数据段从0xd0000000开始存放*/ 
.rodata : { *(.rodata) } 

Image_ZI_Base = .; 
.bss : { *(.bss) } 
Image_ZI_Limit = .; 

/*申明一个符号download_size */ 
download_size = SIZEOF(.text)+SIZEOF(.data)+SIZEOF(.rodata)+SIZEOF(.bss); 

__bss_start__ = .; 
__bss_end__ = .; 

java长连接转短连接

我们经常看到短信和微博中用到短链接,短链接的主要职责就是把原始链接很长的地址压缩成只有6 个字母的短链接地址, 当点击这6 个字母的链接后,又可以跳转到原始链接地址。 转换原理: 并...
  • ghjzzhg
  • ghjzzhg
  • 2017年11月14日 20:18
  • 107

C语言学习篇-1Hello, World!(编写、编译、链接、运行)

说明:初识第一个程序。开发工具的选择 写代码的工具:记事本、ULtraEdit、Vim、Xcode等。 选择Xcode的原因:苹果公司官方提供的开发利器、简化开发的工程、有高亮显示功能。 代码编写 程...
  • fd070910
  • fd070910
  • 2016年05月30日 22:01
  • 1728

如何把手机上的CSDN链接地址转换成电脑上的

时常会在地铁上用手机搜一些技术资料,并且一搜很多还都是csdn上的文章,这时候看到一些好的就想发送到电脑上回去了好好研究。我通常的做法是先通过QQ发送到"我的电脑",然后回去用电脑登QQ,点开手机发过...
  • wuzhoudao
  • wuzhoudao
  • 2016年12月10日 23:19
  • 1202

【Java】接口长URL转成短连接的实现(代码案例实操)

有时候,我们不想采用很长的url链接,主要的一些原因: URL太长占显示空间、难于输入,转成二维码点点小,难于识别长的URL提供的信息太多,不利于信息安全,甚至容易造成倒库其他理由......例...
  • hj7jay
  • hj7jay
  • 2017年03月22日 10:37
  • 1354

长URL链接转短链接算法(JAVA)

最近看到微博的短链接真是很火啊,新浪、腾讯、搜狐等微博网站都加入了短链接的功能。之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少。短链接的主要职责...
  • crazy123456789
  • crazy123456789
  • 2014年05月05日 15:40
  • 4876

java长链接转短链接代码

我们经常看到短信和微博中用到短链接,短链接的主要职责就是把原始链接很长的地址压缩成只有6 个字母的短链接地址,当我们点击这6 个字母的链接后,我们又可以跳转到原始链接地址。 原理并不是采用压缩算法(如...
  • yushouling
  • yushouling
  • 2017年02月14日 12:30
  • 8339

微信接口API之长链接转短链接代码示例

  • weiming8517
  • weiming8517
  • 2016年06月10日 11:15
  • 8485

将淘宝客链接转换为正常淘宝、天猫商品链接

前一阵有个朋友采集了一堆的淘宝客推广链接,但很多都是加密后的格式http://s.click.taobao.com/t?e=zGU34CA7K%2BPkqB07S4%2FK0CITy7klxxrJ35...
  • ufojoan
  • ufojoan
  • 2013年08月21日 10:47
  • 8365

微信公众号开发------长链接转短链接接口

1、 将一条长链接转成短链接。 主要使用场景: 开发者用于生成二维码的原链接(商品、支付二维码等)太长导致扫码速度和成功率下降,将原长链接通过此接口转成短链接再生成二维码将大大提升扫码...
  • u014520797
  • u014520797
  • 2017年03月16日 11:00
  • 3838

(转)硬链接和软链接

软链接和硬链接 2010年9月20日 由 edsionte 留言 ? 硬链接类似与...
  • essencelite
  • essencelite
  • 2013年09月18日 21:13
  • 462
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:链接脚本文件是什么,怎样编写 [转]
举报原因:
原因补充:

(最多只允许输入30个字)