- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
arm-linux-ld命令
我们对每个c 或者汇编文件进行单独编译,但是不去连接,生成很多.o 的文件,这些.o文
件首先是分散的,我们首先要考虑的如何组合起来;其次,这些.o文件存在相互调用的关系;
再者,我们最后生成的bin 文件是要在硬件中 运行的,每一部分放在什么地址都要有仔细
的说明。我觉得在写makefile 的时候,最为重要的就是ld 的理解,下面说说我的经验:
首先,要确定我们的程序用没有用到标准的c库,或者一些系统的库文件,这些一般是在操
作系统之上开发要注意的问题,这里并不多说,熟悉在 Linux 编程的人,基本上都会用ld
命令;这里,我们从头开始,直接进行汇编语言的连接。
我们写一个汇编程序,控制GPIO,从而控制外接的LED,代码如下;
.text
.global _start
_start:
LDR R0,=0@GPBCON 寄存器
MOV R1,#0
strR1,[R0]
LDR R0,=0
MOV R1,#0
STRR1,[R0]
MAIN_LOOP:
B MAIN_LOOP
代码很简单,就是一个对io 口进行设置然后写数据。我们看它是如何编译的,注意我们这
里使用的不是 arm-linux-gcc 而是 arm-elf- gcc,二者之间没有什么比较大的区别,
arm-linux-gcc可能包含更多的库文件,在命令行的编译上面是没有区别。我们来看是如何编
译的:
arm-elf-gcc-g-c-oled_On.o led_On.s 首先纯编译不连接
arm-elf-ld -Ttext0-gled_On.o-oled_on_elf
用Ttext 指明我们程序存储的地方,这里生成的是elf 文件,还不是我们真正的bin,
但是可以借助一些工具可以进行调试。然后:
arm-elf-objcopy-O binary -Sled_on_elfled_on.bin
生成bin 文件。
-T选项是ld 命令中比较重要的一个选项,可以用它直接指明代码的代码段、数据段、博士
生、
段,对于复杂的连接,可以专门写一个脚本来告诉编译器如何连接。
-Ttext addr
-Tdata addr
-Tbss addr
arm-elf-ld -Ttext0-gled_On.o-o led_on_elf ,运行地址为0由于没
有指明数据段和bss,他们会默认的依次放在后面。相同的代码 不同的Ttext,你可以对比
一下他们之间会变的差异,ld 会自动调整跳转的地址。
第二个概念:section,section 可以理解成一块,例如像c 里面的一个子函数,就是一个section,
链接器ld 把object文件中 的每个section 都作为一个整体,为其分配运行的地址(memory
layout),这个过程就是重定位(relocation);最后把所有目标文件合并为一个目标文件。
链接通过一个linker script来控制,这个脚本描述了输入文件的sections 到输出文件的映射,
以及输出文件的memory layout。
因此,linker 总会使用一个linker script,如果不特别指定,则使用默认的script;可以使用‘-T’
命令行选项来指定一个linker script。
*映像文件的输入段与输出段
linker 把多个输入文件合并为一个输出文件。输出文件和输入文件都是目标文件(object file),
输出文件通常被称为可执行文件(executable)。
每个目标文件都有一系列section,输入文件的section 称为input section,输出文件的section
则称为output section。
一 个section 可以是loadable 的,即输出文件运行时需要将这样的section 加载到memory(类
似于RORW段);也可以是 allocatable 的,这样的section 没有任何内容,某些时候用0对
相应的 memory 区域进行初始化(类似于 ZI 段);如果一个 section 既非loadable 也非
allocatable,则它通常包含的是调试信息。
每个 loadable 或 allocatable 的 output section 都有两个地址,一是 VMA(vi
您可能关注的文档
- PH计原理与注意事项.ppt
- PhotoshopV.12【PS CS5】安装和汉化教程-By(石子剪刀布).doc
- SAP 系统质量管理QM模块调研报告-检验模块需求.ppt
- Proteus虚拟仿真工具.ppt
- RT-PCR和real time PCR 原理与步骤.ppt
- 浅谈VC如何实现Mapgis属性输入.pdf
- WQ型排污泵型号与参数.doc
- snoop使用.doc
- MBR工艺在农村污水处理中应用.ppt
- XPS原理.ppt
- 高中历史必修第1册 中外历史纲要(上) 阶段检测四 (第七、八单元).doc
- 高中历史必修第1册 中外历史纲要(上) 阶段检测五 (第九、十单元).doc
- 高中历史必修第2册 中外历史纲要(下)课时作业02 古代世界的帝国与文明的交流.doc
- 高中历史必修第2册 中外历史纲要(下) 第6课课后提能训练.doc
- 北师大版高考英语一轮总复习 高考题型组合练 选择性必修第3册精品课件 UNIT 9 HUMAN BIOLOGY.ppt
- 人教A版高考总复习一轮数学精品课件 第7章 平面向量、复数 第1节平面向量的概念及线性运算.ppt
- 高中历史必修第1册 中外历史纲要(上) 阶段检测二 (第三、四单元).doc
- 北师大版高考英语一轮总复习 高考题型组合练 选择性必修第3册精品课件 UNIT 8 LITERATURE.ppt
- 北师大版高考英语一轮总复习 选择性必修第2册精品课件 UNIT 4 HUMOUR.ppt
- 北师大版高考英语一轮总复习 选择性必修第2册精品课件 UNIT 5 EDUCATION.ppt
文档评论(0)