下载此文档

链接脚本.pdf


文档分类:IT计算机 | 页数:约8页 举报非法文档有奖
1/8
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/8 下载此文档
文档列表 文档介绍
连接脚本将我整整蒙了 1 天零一个上午,做了很多实验,看了人家不少例子代码
勉强能驾驭了,让 linker 按照我想要的来处理,做个笔记。

1,什么叫输入段,什么叫输出段
不知道怎么回事,我对 GCC 系列的输入和输出两个单词总是进入思维死角,很简单
就是 input section 和 output section,这里不是说翻译的问题,我觉得是一种
思考的方式的问题。
我的问题就是:既然叫输入端,那输入什么?同理,输出的是什么?不知道其他人
不会不理解这个问题,我自己的话是理解了不少时间了-v-

所谓的输出段,是指生成的文件,例如 elf 中的每个段
所谓的输入段,是指连接的时候提供 LD 的所有目标文件(OBJ)中的段。


2,lma 和 vma
lma = load memory address
vma = vitual memory address
如果有研究过 ADS 的估计有印象,那里有个 RO BASE 和 RW BASE 和 ZI BASE,也
就是说,lma 是装载地址,vma 是运行地址,想搞清楚这两个问题,可以阅读一下
《ARM 学****报告(杜云海)》作者写的很好,将这个问题分析的很透澈。lma 和 vma
只是 GCC 的叫法而已,其实原理是一样的。



3,两个基本架构
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
"elf32-littlearm")
OUTPUT_ARCH(arm)

一句话,照抄......因为我们没有修改的余地,都是系统默认的关键字。第一句
指示系统可以有生成两种格式,默认是 elf32-arm,端格式是 little endian



4,ENTRY(__ENTRY)
指定入口点,LD 的手册说,ENTRY POINT 就是程序第一条执行的指令,但是,说老
实话,我并不理解,因为这里跟我的理解矛盾了,首先,通常情况,系统需要一个
初始化的 文件来初始化硬件,也就是 bootloader 的第一阶段了。那么
很自然,入口点需要设置在这段代码的第一条指令中,那么正常运行的时候从第一
条指令开始运行。所以这里设置了__ENTRY 为入口点,这个在汇编代码中必须得先
声明一下为全局,才能用,否则系统找不到。例如:
.global __ENTRY

但是问题是,如果我用同样的办法,设置另外一个不是第一条指令的入口点,LD 并
没有报错,但是问题来了,生成的文件和刚才设置入口点为__ENTRY 的时候一模一
样,这就蒙了,到底这个入口点是怎么回事?
记得以前 ADS 的时候也碰到过 entry point 的问题,下载仿真的时候确实是自动跳转
到 entry point 中运行。
我想到的可能的原因,第一,生成 elf 文件并不是能直接用在嵌入式平台上面裸跑
的,因为我们并没有操作系统,我们不需要 elf 文件头的那些指示信息提供给操作
系统,指示系统怎么去加载文件,在嵌入式上面的完全没有那个必要,只需要将实
际的代码提取出来,直接运行就 OK,也就是 objcopy 的操作,所

链接脚本 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数8
  • 收藏数0 收藏
  • 顶次数0
  • 上传人744361651
  • 文件大小0 KB
  • 时间2014-12-19
最近更新