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 启动内核

相关推荐
青绿蓝LCA低碳研究院8 小时前
FSLCI首次在印度举办会议,我们需要学习什么? · 青绿蓝
经验分享
qq_284274059 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
qq_2842740510 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
Titan202411 小时前
MySQL访问个人学习笔记
笔记·学习·mysql
sbjdhjd11 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
z7750885411 小时前
冷链仓储的数据断链怎么解?感知、平台与对接的技术拆解
经验分享
深圳老胡12 小时前
STM32CubeMX 生成 CMake 工程,用 VSCode 编译与调试的完整流程
笔记·stm32·单片机·代码规范
个 人 练 习 生12 小时前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生
坤坤子吖12 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
乐橙开放平台12 小时前
智慧连锁客流检测和离岗检测怎么对接
大数据·人工智能·笔记·物联网·自动化·音视频·智能家居