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)
}