U-Boot启动流程

1 BootRoom阶段

  1. 上电复位,CPU从Boot Room的固定地址读取指令开始执行;
  2. 初始化时钟、引脚、片上SRAM;
  3. 读取启动引脚,判断启动介质(SD/eMMC/SPI/NAND);
  4. 从启动介质中读取SPL(Secondary Program Loader)到片上SRAM
  5. 跳转到SPL入口

2 SPL阶段

  1. 再次初始化时钟,PLL,电源
  2. 初始化DDR
  3. 读取完成的U-Boot并加载到DDR;
  4. 跳转到DDR中的U-Boot入口

3 U-Boot阶段

3.1 汇编阶段

  1. 设置异常向量表
  2. 设置 CPU 模式SVC(超级管理员模式)
  3. 关中断、关 MMU、关 Cache
  4. 设置栈指针 SP
  5. 清零 BSS 段
  6. 调用 C 语言入口函数 board_init_f

3.2 board_init_f

  1. 初始化基础硬件:时钟、串口、DDR
  2. 初始化全局数据结构体 gd_t
  3. 准备重定位地址
  4. 跳转到 board_init_r

3.3 board_init_r

  1. 初始化各种外设:GPIO、I2C、SPI、MMC/eMMC/SD、Ethernet、USB、NAND、Flash 等
  2. 初始化命令系统
  3. 初始化环境变量
  4. 显示控制台提示符
  5. 进入 主循环:等待命令 或 自动启动内核

3.4 启动内核前准备

  1. 读取设备树 dtb
  2. 读取Linux内核镜像
  3. 设置启动参数 bootargs
  4. 调用 bootm/booti 启动内核

3.5 启动内核

相关推荐
LinXunFeng2 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
SM177152118386 天前
NSK紧凑型FA系列丝杠技术详解
经验分享·规格说明书
闪闪发亮的小星星6 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq6 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
fofantasy6 天前
NSK SFT3210-2.5 滚珠丝杠技术详解
经验分享·规格说明书
BomanGe106 天前
NSK USS1205N1D0321 紧凑型精密滚珠丝杠技术详解
经验分享·规格说明书
阿米亚波7 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
AIHR数智引擎7 天前
KPI物理失效:AI原生组织的效能重构与技能度量
人工智能·经验分享·职场和发展·重构·ai-native·aihr
自传.7 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding
.千余7 天前
【C++】模板进阶全解:非类型参数|全特化|偏特化|分离编译完全指南
开发语言·c++·笔记·学习·其他