uboot源码阅读(二)什么是江湖,链接文件u-boot.lds

本文深入解析了U-Boot内部结构,通过详细分析其数据组织方式,揭示了U-Boot作为嵌入式启动加载器的核心功能与运作机制。从文件串到输出格式,再到架构细节,全方位解读U-Boot的江湖秘密。

什么是江湖,有人这样回答我,江湖就是武林,我再询问,那武林又是什么,一股寒风吹来,有个冷冷的声音说到“武林就是江湖”。

这让我初入江湖的人很困惑,我想从别人那是得不到什么消息的,反而会对自己不利,还是少说为妙。还是让自己揭开这神秘的面纱吧。

 u-boot.lds,我们使用的u-boot里面是什么数据呢,就是由下面的这些文件串出来的。

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
        . = 0x00000000; /*开始位置*/

        . = ALIGN(4); /* 4字节对齐*/
        .text      :
        {
          cpu/s3c64xx/start.o   (.text)
          cpu/s3c64xx/s3c6410/cpu_init.o        (.text)
          cpu/s3c64xx/onenand_cp.o      (.text)
          cpu/s3c64xx/nand_cp.o (.text)
          board/samsung/mini6410/nand_6410.fo /*如其名nand驱动,不提供源码,我的nand型号是k9gag08u0e*/
          cpu/s3c64xx/movi.o (.text)
          *(.text)
          lib_arm/div0.o
        }

        . = ALIGN(4);
        .rodata : { *(.rodata) } /*只读*/

        . = ALIGN(4);
        .data : { *(.data) } /*读写*/

        . = ALIGN(4);
        .got : { *(.got) } /* uboot自定义,非标准*/

        __u_boot_cmd_start = .; /*记住命令开始的位置,自己添加的命令也会在这里面*/
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;

        . = ALIGN(4);
        .mmudata : { *(.mmudata) }

        . = ALIGN(4);
        __bss_start = .; /*bbs段的内容*/
        .bss : { *(.bss) }
        _end = .;
}

在这里我们清楚的知道了江湖的结构,那现在我们就一个个深入了解吧!

转载请注明出处:http://blog.youkuaiyun.com/ecbtnrt/article/details/6630064

### 解决 U-Boot 编译后 `u-boot.bin` 文件缺失或路径错误的方法 当遇到无法找到 `u-boot.bin` 或者其所在目录不正确的情况时,可以按照以下方法排查并解决问题。 #### 检查编译环境配置 确保开发环境中已安装所有必要的工具链和依赖项。对于特定版本的U-Boot源码包,如 u-boot-2014.04-tq210.zip 中提到的内容[^3],应当确认使用的交叉编译器与目标平台相匹配,并且环境变量设置无误。 #### 核实 Makefile 设置 查看项目中的顶层 Makefile以及板级支持包(BSP)对应的Makefile文件是否存在影响最终进制输出位置的相关定义。例如,在某些旧版U-Boot中可能需要编辑类似这样的路径: ```makefile [root@localhost u-boot-2009.08]# vi board/samsung/gq2440/Makefile ``` 这表明应该检查对应于所用硬件型号的具体Makefile是否有特殊定制化需求[^4]。 #### 审视链接脚本 了解链接过程是如何决定可执行映像的位置非常重要。通常情况下,U-Boot 使用两个主要的链接描述文件来控制 SPL (Secondary Program Loader) 和主引导加载程序的行为: - 对于整个 U-Boot 映像 (`u-boot.bin`) ,会应用位于 arch/arm/cpu/u-boot.lds链接脚本; - 而针对早期启动阶段的小型加载器(`u-boot-spl.bin`) 则采用arch/arm/cpu/u-boot-spl.lds 来指定内存布局和入口地址。 如果发现生成的目标文件不符合预期,则可能是由于这些链接指令不当造成的。 #### 查找实际生成物 即使官方文档指出应在根目录下寻找 `u-boot.bin`,但在实际情况里可能会因为不同的构建选项而有所变化。尝试搜索整个工作区以定位该文件的实际存储地点: ```bash find . -name "u-boot*.bin" ``` 此命令可以帮助快速锁定任何带有 `.bin` 后缀并与 U-Boot 相关的文件。 #### 处理固定长度镜像的需求 有时为了适应特定设备的要求,还需要创建具有固定大小头信息的版本——即所谓的 `u-boot_crc.bin`. 此类操作涉及额外处理步骤,比如计算校验值并将原始映像嵌入到新的容器内[^2]: ```shell cp tools/mk_uboot_crc . ./mk_uboot_crc crc32 ./u-boot_crc.bin > ./u-boot_crc.bin.crc rm -f ./mk_uboot_crc ``` 上述流程展示了如何利用辅助工具制作带 CRC 校验的数据块。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值