链接器脚本构成:段、起始链接地址、对齐、变量、代码段首文件
一个可执行程序通常由代码段,数据段,bss段构成。
其中数据段存放的是初始化后的前期变量;bss段存放的是没有初始化的前期变量
一个链接器脚本led.lds例子:OUTPUT_ARCH(arm) /*指定输出文件的平台体系是ARM*/
ENTRY(_start) /*指定可执行映像文件的起始段的段名是_start*/
SECTIONS {
. = 0x30008000; /*设置起始链接地址,改变这个值,会使编译中得到的汇编代码中首地址的值改变*/
. = ALIGN(4); /*对齐*/
.text :
{
start.o (.text) /*代码段首文件*/
*(.text) /*代表所有文件的代码段*/
}
. = ALIGN(4);
.data :
{
*(.data) /*代表所有文件的数据段*/
}
. = ALIGN(4);
bss_start = .; /*变量,表示将当前地址赋值给bss_start*/
.bss :
{
*(.bss) /*代表所有文件的bss段*/
}
bss_end = .; /*变量,表示将当前地址赋值给bss_end*/
}
数据对齐:0,4,8这些能整除4的地址是数据之间对齐的地址。存储数据时尽量做到数据之间的对齐,这有利于arm处理器的效率提高,这和arm处理器访问数据的方式有关。
设置代码段首文件:规定了程序运行时首先运行的代码