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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值