Uboot启动流程(一)——u-boot.lds

.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指定的;

猜你喜欢

转载自blog.csdn.net/demondhxq/article/details/79195742