1.链接器脚本的作用
链接脚本的作用是描述输入文件中的各个段(数据段,代码段,堆,栈,bss)如何被映射到输出文件中,并控制输出文件的内存排布
2.链接器脚本的组成
一个可执行程序通常是由:代码段,数据段,bss段构成的。同样,在用于链接这个程序的链接器脚本中,就会反应出这几个段的信息。
3.编程实例
一个链接器脚本主要分为几个方面:
段,起始链接地址,对齐设置,变量的使用
3.1 段信息
主要为代码段,数据段,bss段
SECTIONS{ //SECTIONS 固定格式
.text: //代码段
{
*(.text) //所有文件的代码
}
.data: //数据段
{
*(.data) //所有文件的数据段
}
.bss: //
{
*(.bss) //
}
}
3.2设置链接地址
SECTIONS{ //SECTIONS 固定格式
.= 0x50008000; //. 代表当前位置,也就是起始位置
.text: //代码段
{
*(.text) //所有文件的代码
}
.data: //数据段
{
*(.data) //所有文件的数据段
}
.bss: //
{
*(.bss) //
}
}
3.3对齐设置
arm处理器在访问的时候,是采用4字节的方式访问的,所以在存取数据的时候字节用4字节对齐,可以提高效率
SECTIONS{ //SECTIONS 固定格式
. = 0x50008000; //. 代表当前位置,也就是起始位置
. = ALIGN(4); //当前地址做到4字节对齐
.text: //代码段
{
*(.text) //所有文件的代码
}
. = ALIGN(4); //数据段也要做到4字节对齐
.data: //数据段
{
*(.data) //所有文件的数据段
}
. = ALIGN(4); //bss端也要做到4字节对齐
.bss: //
{
*(.bss) //
}
}
3.4使用变量
SECTIONS{ //SECTIONS 固定格式
. = 0x50008000; //. 代表当前位置,也就是起始位置
. = ALIGN(4); //当前地址做到4字节对齐
.text: //代码段
{
*(.text) //所有文件的代码
}
. = ALIGN(4); //数据段也要做到4字节对齐
.data: //数据段
{
*(.data) //所有文件的数据段
}
. = ALIGN(4); //bss端也要做到4字节对齐
bss_start = .; //bss_start为自定义的变量,将当前地址赋给bss_start
.bss: //
{
*(.bss) //
}
bss_end = .; //假设.的地址为100 则bss_start为100 bss段总长度为200 则bss_end地址为300
}
3.5设置代码段的首文件
SECTIONS{ //SECTIONS 固定格式
. = 0x50008000; //. 代表当前位置,也就是起始位置
. = ALIGN(4); //当前地址做到4字节对齐
.text: //代码段
{
start.o(.text) //首文件,即start.s
*(.text) //所有文件的代码
}
. = ALIGN(4); //数据段也要做到4字节对齐
.data: //数据段
{
*(.data) //所有文件的数据段
}
. = ALIGN(4); //bss端也要做到4字节对齐
bss_start = .; //bss_start为自定义的变量,将当前地址赋给bss_start
.bss: //
{
*(.bss) //
}
bss_end = .; //假设.为100 则bss_start为100 bss段长度为200 则bss_end为300
}
菜鸟一枚,如有错误,欢迎指教。。。