.lds为链接脚本
我们平时写的代码也会有链接(ld)过程;x86下面输入ld -verbose可以查看链接脚本
uboot生成镜像也是需要lds的,下面为lds部分内容:
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
. = 0x00000000;
. = ALIGN(4);
.text :
{
__text_start = .;
arch/arm/cpu/hi3559/start.o (.text)
drivers/ddr/ddr_training_impl.o (.text)
drivers/ddr/ddr_training_ctl.o (.text)
drivers/ddr/ddr_training_boot.o (.text)
drivers/ddr/ddr_training_custom.o (.text)
__init_end = .;
ASSERT(((__init_end - __text_start) < 0x16000), "init sections too big!");
*(.text)
}
. = ALIGN(4);
.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
. = ALIGN(4);
.data : { *(.data) }
. = ALIGN(4);
.got : { *(.got) }
__u_boot_cmd_start = .;
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .;
. = ALIGN(4);
__bss_start = .;
.bss : { *(.bss) }
_end = .;
}
几个你需要知道的知识点:
1、elf32-littlearm:elf格式 32位arm指令,小端(反正先这么记着,对我来说也没有用)
2、ENTRY(_start)入口为_start;
3、接下来是data段 text段之类的
4、注意这里的0x00000000并不是说_stat起始在0x0处,实际查看System.map可以看到一般都不是0.比如我这里是0x88400000,还有一个uboot是0x8d400000.这个数字是由/board/hiXXXX/config.mk里面的TEXT_BASE指定的;