u-BOOT启动流程

1、u-boot入口:入口即第一行程序,程序的链接是由链接脚本决定的,编译uboot之后,可以在根目录下生成u-boot.lds文件
编译后的uboot文件
打开lds文件可以看到代码当前入口点: :_start,_start后面就是中断向量表,通过查看map地址可以得知start地址为 0Xc0100000,即整个 uboot的起始地址就是 0Xc0100000
在这里插入图片描述
2、u-boot启动过程中主要用到的一些函数:

board_init_f:初始化一系列外设,比如串口、定时器,或者打印一些消息等。
relocate_code:用于代码拷贝
relocate_vectors:重定位向量表
board_init_f:初始化外设的后续工作
run_main_loop:uboot启动以后会进入 N(N=1.2.3…)秒倒计时,如果在 N秒倒计时结束之前按下回车键,那么就会进入 uboot的命令模式,如果倒计时结束以后都没有按下回车键,那么就会自动启动Linux内核,这个功能就是由这个函数实现的
cli_loop:uboot的命令行处理函数,我们在 uboot中输入各种命令,进行各种操作就是有 cli_loop来处理的

3、bootm启动linux内核用到的函数:

全局变量 images会在 bootm命令的执行中频繁使用到,相当于 Linux内核启动的“灵魂”。
在这里插入图片描述
bootm命令的执行函数为 do_bootm:行,主要作用是解析 bootm的命令参数和检查有没有子命令

do_bootm_states:来执行不同的 BOOT 阶段,这里要执行的 BOOT阶段有:
BOOTM_STATE_START,BOOTM_STATE_FINDOS、 BOOTM_STATE_FINDOTHER、
BOOTM_STATE_LOADOS、 BOOTM_STATE_RAMDISK、 BOOTM_STATE_OS_PREP、
BOOTM_STATE_OS_FAKE_GO和 BOOTM_STATE_OS_GO。
bootm_os_get_boot_func:来查找对应系统的启动函数,查找方法很简单,就是读取数组中指定元素。
do_bootm_linux:Linux系统对应的启动函数
kernel_entry:,看名字“内核 _进入”,说明此函数是进入 Linux内核的,此函数有三个参数 zero arch params,第一个参数 zero要 为 0;第二个参数为机器 ID;第三个参数 ATAGS或者设备树 (DTB)首地 址, ATAGS是传统的方法,用于
传递一些命令行信息啥的,如果使用设备树的话就要传递设备树 (DTB)。
调用 kernel_entry函数进入 Linux内核,此行将一去不复返, uboot的使命也就完成了

流程图:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值