链接器脚本

SECTIONS {  

  . = 0x30008000;    //指定链接地址

  . = ALIGN(4);        //指定对齐方式4字节对齐

  .text :    //代码段

  {  

  led.o (.text)          //设置代码段首文件

  *(.text)               //表示所有文件的代码段

  }

    . = ALIGN(4);  

  .rodata : {*(.rodata)} 

  . = ALIGN(4);  

  .data : //数据段

  {

  *(.data) ////表示所有文件的数据段

  }    

  . = ALIGN(4);  

  bss_start = .;  //变量,bss_start表示当前地址

  .bss :     //bss段

  {

  *(.bss)   //表示所有文件的bss段

  *(COMMON)

  }  

  bss_end = .; //变量,bss_end表示当前地址

}

以上是led.lds文件的内容,通常链接器脚本以lds为后缀名

文件格式:

SECTIONS { 

}

----------------------------------

. = 0x30008000;

. = ALIGN(4);

.text :

上面这些内容要以table键开头(vi编辑器设置 :set tabstop=4)

SECTIONS { 

  . = 0x30008000;

  . = ALIGN(4);

  .text :

}

-----------------------------------------------

一个可执行文件通常由:代码段、数据段、bss段构成。

.text: //代码段

{

*(.text)   //所有文件的代码段

}

.data: //数据段

{

*(.data)  //所有文件的数据段

}

.bss: //bss段

{

*(.bss) //所有文件的bss段

}

-----------------------------------------

链接器脚本可以进行下面的设置:

1、起始链接地址

 . = 0x30008000;
 
 . = ALIGN(4);
 .text :
 {
 led.o (.text)
 *(.text)
 }

使用反汇编工具(其中led.bin是使用本链接器脚本生成的可执行文件)

arm-linux-objdump -D -S led.bin >dump

查看led.bin的起始地址

2、对齐

. = ALIGN(4); //设置为4字节对齐

3、定义变量

bss_end = .; //变量,bss_end表示当前地址

4、设置代码段的首文件

  . = 0x30008000;
 
 . = ALIGN(4);
 .text :
 {
 led.o (.text)  //led.o即为这个代码段的首文件
 *(.text)
 }

原文地址:https://www.cnblogs.com/zhangxuan/p/4679011.html