lds链接脚本的基本规则

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处。

猜你喜欢

转载自blog.csdn.net/bindalao_/article/details/80033691