arm-linux-ld -Ttext 0x00000000 crt0.o led_on_c.o -o led_on_c_elf
-o选项设置输出文件的名字为 led_on_c_elf;
“-Ttext 0x00000000”设置代码段的起始地址为0x00000000;
这条指令的作用就是将crt0.o和led_on_c.o连接成led_on_c_elf可执行文件,
此可执行文件的代码段起始地址为0x00000000。-T后面的地址在复杂程序时一般用lds脚本文件表示,lds脚本一般形式如下:
完整的连接脚本文件形式如下:
SECTIONS {
...
secname start BLOCK(align) (NOLOAD) : AT ( ldadr )
{ contents } >region :phdr =fill
...
}
并非每个选项都是必须的,仅介绍nand.lds用到的:
SECTIONS {
firtst 0x00000000 : { head.o init.o }
second 0x30000000 : AT(4096) { main.o }
}
1、secname:段名,对于nand.lds,段名为first和second
2、start:本段运行时的地址,如果没有使用AT(xxx),则本段存储的地址也是start
3、AT( ldadr ):定义本段存储(加载)的地址
4、{ contents }:决定哪些内容放在本段,可以是整个目标文件,也可以是目标文件中的某段(代码段、数据段等)nand.lds的含义是:head.o放在0x00000000地址开始处,init.o放在head.o
后面,它们的运行地址是0x00000000;main.o放在地址4096(0x1000)开始处,但
是它的运行地址在0x30000000,在运行前需要从4096处复制到0x30000000处。