type
Post
date
Sep 10, 2025
slug
uboot_boot_process_analysis
category
🥳嵌入式Linux开发
icon
password
参考资料
关于本项目 — [野火]嵌入式Linux镜像构建与部署——基于LubanCat-i.MX6ULL开发板 文档
关于本项目 — [野火]嵌入式Linux镜像构建与部署——基于LubanCat-i.MX6ULL开发板 文档
EBF6ULL Pro/Mini开发板是野火电子基于NXP i.MX 6ULL系列处理器设计的一款低功耗单板电脑, 工业级主频最高可达 792MHz, 提供完整的SDK驱动开发包、核心板封装库,底板应用参考设计原理图, 可帮助客户大大缩减产品的开发时间,加快产品上市。 配套的系统支持Debian、Ubuntu系统,支持python、Qt等组件。
u-boot完全分析与移植_哔哩哔哩_bilibili
u-boot完全分析与移植_哔哩哔哩_bilibili
u-boot完全分析与移植共计33条视频,包括:000_百问网所有课程_链接与学习路线、01_什么人什么时候学习u-boot_教程介绍、02.1_U-boot的功能等,UP主更多精彩视频,请关注UP账号。
基于百问网的IMX6ULL或STM32MP157开发板,完全分析u-boot,并且移植一个新版本的u-boot
m2m-telecomU-boot initialization sequence - NetSoM
U-boot initialization sequence - NetSoM
u-boot initialization procedure graph through walk step by step. Two main stages of init procedure separated with relocation procedure.
Linux系统中u-boot启动流程分析(详解)-阿里云开发者社区

Linux系统中u-boot启动流程分析(详解)-阿里云开发者社区
Linux系统中u-boot启动流程分析(详解)
概念辨析:阶段划分 vs. SPL / Proper
两套术语的维度不同
第一阶段 / 第二阶段 描述的是 U-Boot 内部代码执行流程:
- 第一阶段:汇编代码(
start.S)。在无 C 运行时的裸环境中执行,完成 CPU 模式切换、关闭 MMU/Cache、初始化栈,最终将自身重定位(relocate)到 DDR,跳入 C 环境。
- 第二阶段:C 代码(
board_init_f→board_init_r)。完成外设初始化、环境变量加载、命令行交互、引导内核等完整功能。
SPL / U-Boot Proper 描述的是构建产物与加载关系:
- SPL(Secondary Program Loader):独立编译的极简镜像,运行于片上 SRAM(OCRAM),尺寸严格受限(通常 ≤ 64 KB)。职责单一:初始化 DDR,将 U-Boot Proper 加载进内存,然后跳转。"Secondary"意指它是 Boot ROM(Primary Loader)之后的第二级加载器。
- U-Boot Proper:完整功能的 U-Boot 镜像,运行于 DDR,无尺寸约束。"Proper"为英语"正式的、本体的"之意,相对于 SPL 这一前置辅助加载器,它才是"真正的 U-Boot"。
命名约定来源
SPL — Secondary Program Loader
- Boot ROM 是固化在芯片内部的第一级加载器,行业通称 Primary Program Loader。
- SPL 由 Boot ROM 加载,是第二级,故称 Secondary。
- 该术语来自嵌入式行业惯例,U-Boot 社区沿用之,并非 U-Boot 独创。
- 源码中通过
CONFIG_SPL开关控制是否编译 SPL,对应产物文件名为u-boot-spl.bin。
Proper — 本体
- 英语中 "proper" 有"本体的、正式的"含义(如 "the city proper" 指城区本身,不含郊区)。
- 相对于 SPL 这一前置辅助镜像,完整的 U-Boot 才是"真正的 U-Boot 本体",社区约定称之为 U-Boot Proper。
- 这是非正式但约定俗成的术语,源于社区讨论习惯,官方文档中有时也以 "u-boot.bin" / "u-boot proper" 区分于 "u-boot-spl.bin"。
两者不是严格对应关系
常见误区:将"第一阶段 = SPL、第二阶段 = Proper"。这是教学性简化,并非源码定义。
实际关系:SPL 内部自身也分第一阶段(汇编初始化)和第二阶段(C 功能),U-Boot Proper 同理。两套划分是正交的:
第一阶段(汇编) | 第二阶段(C) | |
无 SPL 场景 | U-Boot Proper 的 start.S | U-Boot Proper 的 C 初始化 |
有 SPL 场景 | SPL 自身的汇编初始化 | SPL 的 C 代码 → 跳转 Proper → Proper 自身也经历两阶段 |
正文
本文的叙述约定
本文采用教学性阶段划分,以整个启动链路为视角:
- 第一阶段:U-Boot 汇编入口至完成 DDR 初始化与重定位
- 第二阶段:DDR 中 C 环境的完整初始化流程
- 加载内核阶段:读取内核镜像、传递设备树、移交控制权
iMX6ULL 野火板卡默认不启用 SPL(Boot ROM 通过 DCD 直接初始化 DDR 并加载 U-Boot Proper),因此本文中"第一阶段"即对应 U-Boot Proper 内部的汇编阶段,而非独立的 SPL 镜像。详见子页面:
iMX6ULL是否使用SPL?IMX6ULL 完整内存映射布局表Boot ROM 启动阶段(上电到 U-Boot _start)Uboot 启动第一阶段Uboot 启动第二阶段Uboot 加载内核阶段
拓展
总结图
database







- Author:felixfixit
- URL:http://www.felixmicrospace.top/article/uboot_boot_process_analysis
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!







