U-boot 启动流程分析 1

简介

接下来的几篇文章会简要介绍下uboot的启动流程,本文使用uboot 2021.01作为参考,cpu使用的risc-v架构,未来risc-v将变成一个不逊于arm的cpu框架。学习嵌入式linux,uboot也是一个绕不过去的知识点,这里抛砖引玉,做一下简要介绍,也算是自己的学习笔记。

U-boot和SPL

U-Boot 分为 uboot-spl 和 uboot 两个组成部分。SPL 是 Secondary Program Loader 的简称,第二阶段程序加载器。 对于嵌入式SOC(System On Chip)芯片来说,芯片内本身含有SRAM用于将闪存中的bootloader(uboot)加载到RAM来运行, 但由于片内RAM大小限制,加载不了完整的U-boot程序,所以需要在加载uboot之前加载一个精简版的SPL,SPL可用来初始化DDR等一些必须的外设,然后在把完整的Uboot加载到DDR里面运行。

概述启动流程

riscv目前uboot的启动代码位于arch/riscv/cpu/start.S内,链接脚本位于arch/riscv/cpu/u-boot.lds,可以查看源码发现程序从_start开始执行, 针对smp系统boot核心执行早期的初始化流程,大致流程为 board_init_f –> relocate_code –> board_init_r。 board_init_f定义在common/board_f.c,执行init_sequence_f数组中的函数,主要是初始化一些环境变量,对gd里面的变量赋值, board_init_r定义在common/board_r.c,执行init_sequence_f数组中的函数,主要是初始化一些驱动框架,初始化具体的硬件,到这里硬件都可以工作了,最后进入到run_main_loop –> main_loop,main_loop位于common/main.c。主要进行autoboot_command,cli_loop。 autoboot_command:倒计时结束后,获取默认的bootcmd,并执行boot。 cli_loop:倒计时被打断后,进入这里的控制台,用来接收输入的命令,并处理命令。

接下来的几篇文章会根据代码做一个详细的分析:
U-boot 启动流程分析 2 https://blog.csdn.net/Runner_Linux/article/details/129547048
U-boot 启动流程分析 3 https://blog.csdn.net/Runner_Linux/article/details/129552707
U-boot 启动流程分析 4 https://blog.csdn.net/Runner_Linux/article/details/129553081
U-boot 启动流程分析 5 https://blog.csdn.net/Runner_Linux/article/details/129553467

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值