我最近刚接触接触bootloader,找了一个源代码,现在吧ld脚本何注释贴出来,大家看看有没理解错。
OUTPUT_ARCH(arm) //输出在arm架构上
ENTRY(_start) //指定可执行文件的入口段
SECTIONS {
. = BOOTADDR; //从BOOTADDR处开始?BOOTADDR是何意?为何不从0x00开始?
__boot_start = .; //把_boot_start 赋值为当前地址计数器的值
.start ALIGN(4) : { //四字节对齐
*(.text.start)
}
//setup和start不是标准段,具体情况如何有那位大侠知道???????
.setup ALIGN(4) : {
setup_block = .; //setup_block赋值为当前位置, 即起始位置
*(.setup) //setup代码部分
setup_block_end = .; //setup_block_end赋值为当前位置, 即起始位置
}
.text ALIGN(4) : {
*(.text)
}
.rodata ALIGN(4) : {
*(.rodata)
}
.data ALIGN(4) : {
*(.data)
}
.got ALIGN(4) : { //这个段在一般的lds中好像也没看过,有谁知道?好像是U-boot中的?
*(.got)
}
__boot_end = .; //__boot_end赋值为当前位置, 即起始位置
.bss ALIGN(16) : {
bss_start = .;
*(.bss)
*(COMMON)
bss_end = .;
}
.comment ALIGN(16) : {
*(.comment)
}
stack_point = __boot_start + 0x00100000;
loader_size = __boot_end - __boot_start;
setup_size = setup_block_end - setup_block;
}