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

相关推荐
是枚小菜鸡儿吖1 小时前
把视频教程变成可复习的笔记:Docker 部署 BiliNote,自动转写与总结
笔记·docker·容器
运维全栈笔记1 小时前
Vue + Spring Boot 前后端分离项目部署笔记(若依 RuoYi-Vue 3.9.2)
运维·服务器·vue.js·spring boot·笔记·开源·开源软件
OpenDataLab8 小时前
厦门大学“先进封装电子电镀配方研发智能体”入选上海 AI 实验室“与书生共创”十大成果,并接入 Sciverse 科学智能数据基座
经验分享
xian_wwq8 小时前
【学习笔记】-深度认知系列-第1讲-AI不是魔法——三句话讲清楚人工智能到底是什么
笔记·学习·深度认知
M78佐菲8 小时前
c语言学习笔记:排序与查找方法整理
linux·c语言·笔记·学习·算法
摇滚侠9 小时前
《SpringBoot 3:入门与应用实战》第 5 章 使用 Spring Boot 阅读笔记 9
java·spring boot·笔记
浪兎兎10 小时前
Docker 容器技术笔记
笔记·docker·容器
LuminousCPP10 小时前
数据结构‑二叉树(二):二叉堆从零实现|Heap结构设计 + 建堆优化 + 堆排序深度解析
c语言·数据结构·笔记·二叉树
噜~噜~噜~11 小时前
操作系统笔记-2.2.6 多处理机调度
笔记·操作系统
kyrie_sakura11 小时前
python学习笔记3 -- 流程控制语句结构
笔记·python·学习