链接文件lds示例
链接lds文件组成部分:
SECTIONS
.text: /*代码段*/
.rodata: /*只读数据段*/
.data: /*可读可写的初始化数据段*/
.bss: /*未初始化数据段*/
ALIGN(4); /*对齐方式,四字节对齐*/
. /*当前位置*/
整个链接lds示例:
OUTPUT_ARCH(arm) //设置输出文件的体系架构。
ENTRY(_start) //将_start这个全局符号设置成入口地址。
SECTIONS //输出文件内容布局
{
. = 0x00000000; //指定地址0x00000000
. = ALIGN(4); //代码以4字节对齐
.text : //指定.text section段(位于0x00000000)
{
//添加第一个目标文件: cpu/arm920t/start.o里面的.text代码段
cpu/arm920t/start.o (.text)
//添加第二个目标文件: board/100ask24x0/boot_init.o里面的.text代码段
board/100ask24x0/boot_init.o (.text)
// *(.text) 表示添加剩下的全部文件的.text代码段
*(.text)
}
. = ALIGN(4);
.rodata : {
//指定.rodata section段(位于0x00000000+.text section),将所有的.rodata只读数据段合并成一个.rodata只读数据段
*(.rodata)
}
. = ALIGN(4);
.data : {
//指定读写数据段, *(data):添加所有文件的数据段
*(.data)
}
. = ALIGN(4);
.got : {
//指定got段,got段是uboot自定义的一个段
*(.got)
}
. = .;
//把__u_boot_cmd_start赋值为当前位置, 即起始位置
__u_boot_cmd_start = .;
// u_boot_cmd段,所有的u-boot命令相关的定义都放在这个位置
.u_boot_cmd : { *(.u_boot_cmd) }
// u_boot_cmd段结束位置
__u_boot_cmd_end = .;
. = ALIGN(4);
//把__bss_start赋值为当前位置,即bss段的开始位置
__bss_start = .;
//指定bss段,这里NOLOAD的意思是这段不需装载,仅在执行域中才会有这段
.bss : { *(.bss) }
//把_end赋值为当前位置,即bss段的结束位置
_end = .;
}