一款比较常用的bootloader:uboot代码介绍

一口Linux
关注

核心内容解释:

27 OUTPUT_ARCH(arm)       :    该镜像运行在arm架构的硬件上
28 ENTRY(_start)          :    程序的入口是 _start
29 SECTIONS
30 {
31  . = 0x00000000;      :   程序的链接地址,不是运行地址【uboot一定是位置无关码】
34     .text :
35     {
36         __image_copy_start = .;    : 宏对应整个程序编译好后首地址,自搬移代码的初始位置
37         CPUDIR/start.o (.text*)    : 第一个目标文件CPUDIR/start.o中的代码段
38         *(.text*)                  : 剩下的目标文件的代码段
39     }
60     __image_copy_end = .;          : 自搬移代码的结束为止

BSS全局未初始化变量、全局初始化为0的变量所在的段:

84     .bss __rel_dyn_start (OVERLAY) : {
85         __bss_start = .;
88         __bss_end__ = .;
89     }
2. uboot启动代码流程概要

代码只分析到uboot命令行,函数main_loop()位置。

3. 启动代码详细分析

_start入口位于以下文件:

u-boot-2013.01/arch/arm/cpu/armv7/start.S
第一阶段:

第二阶段

第二阶段代码从_main开始:

以上代码详细解释,请结合B站视频同步学习。

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存