u-boot链接脚本(u-boot.lds)分析
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm) //elf 32位ARM指令,小端
ENTRY(_start) //可执行文件的起始代码段为_start
SECTIONS
{
. = 0x00000000;
. = ALIGN(4);
.text :
{
__image_copy_start = .;
CPUDIR/start.o (.text)
*(.text)
} //代码段
. = ALIGN(4);
.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } //只读数据段
. = ALIGN(4);
.data : {
*(.data)
} //数据段
. = ALIGN(4);
. = .;
__u_boot_cmd_start = .; //把__u_boot_cmd_start赋值为当前位置
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .;
. = ALIGN(4);
__image_copy_end = .; //在start.S中copy_loop中会用到。计算拷贝长度:__image_copy_end - _start
.rel.dyn : { //需要在 链接选项增加 -pie ,表示链接生成 位置无关可执行程序,这样的话,就可以生成 .rel.dyn段
__rel_dyn_start = .;
*(.rel*)
__rel_dyn_end = .;
}
.dynsym : { //.dynsym动态符号表,这个表只保存了与动态链接相关的符号 这是一个与重定位有关的段
__dynsym_start = .;
*(.dynsym)
}
_end = .;
/*
* Deprecated: this MMU section is used by pxa at present but
* should not be used by new boards/CPUs.
*/
. = ALIGN(4096);
.mmutable : {
*(.mmutable)
}
.bss __rel_dyn_start (OVERLAY) : {
__bss_start = .;
*(.bss)
. = ALIGN(4);
__bss_end__ = .;
}
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
/DISCARD/ : { *(.interp*) }
/DISCARD/ : { *(.gnu*) }
}

浙公网安备 33010602011771号