U‑Boot = Universal Bootloader,全称 Universal Boot Loader。
官方 Wiki 主页:https://www.denx.de/wiki/U-Boot/
官方主仓库:https://source.denx.de/u-boot/u-boot
主线维护主体:德国 DENX Software Engineering(DENX)
一、U-Boot的由来
U‑Boot 不是凭空写出来的,它是多个老 bootloader 项目的合并迭代产物,源头可以一路追溯:
- 最早始祖:8xxROM(针对摩托罗拉 MPC8xx PowerPC)
- 后续衍生:PPCBoot(PowerPCBoot,专门给 PowerPC 处理器,Wolfgang Denk 主导)
- 分支分叉:ARMBoot(针对 ARM 架构,独立分支)
2000 年左右:嵌入式市场越来越多不同架构 CPU(PowerPC、ARM、MIPS),大家发现 PPCBoot、ARMBoot 代码大量重复、分头维护很累。
2000 年底:PPCBoot + ARMBoot 合并,改名叫 U-Boot(Universal Bootloader) 名字里 Universal 的含义:通用,支持多种 CPU 架构、多种板子,不再绑定单一处理器。
一句话起源:U-Boot 是 PPCBoot 与 ARMBoot 的融合升级版,目标做跨架构统一 bootloader。

二、U-Boot能干些什么?
U-Boot 属于 Bootloader 的其中一种,不是 ROM、不是 ATF、不是 Linux 内核。
SOC 上电启动链: BOOTROM → ATF (BL1/BL2/BL31) → SPL (uboot spl) → U-Boot Proper (uboot.bin) → Linux kernel → rootfs → 应用
U-Boot 的核心职责:硬件初始化 + 引导内核 + 调试交互
1、硬件初始化(SPL + 主 U-Boot 分工)
① SPL(Secondary Program Loader,小 U-Boot):
- DDR 初始化、基础时钟、基础串口
- DDR 跑起来,才能加载主 uboot 到 DDR
② U-Boot Proper:
- 时钟、GPIO、I2C、SPI、NAND/eMMC、SD、GMAC 以太网、PHY、USB 等外设初始化
- DM 驱动模型管理所有外设
- 解析 DTS 设备树,获取硬件资源
注意:U-Boot 做硬件初始化,目的不是跑业务,是为了把环境准备好,给内核铺路。
2、加载并启动操作系统(最核心本职工作)
支持从非常多介质加载内核镜像: SD 卡、eMMC、NAND、SPI NOR Flash、网络 TFTP、USB、SATA。 动作:把 zImage / Image /uImage、设备树 dtb、initramfs 读到 DDR 指定地址,准备 bootargs 启动参数,最后调用 booti(ARM64)跳转到内核。
3、交互式命令行(u-boot shell)
这是 U-Boot 区别于很多极简 bootloader 最大特点: 串口控制台,提供大量命令: md/mm 内存读写、tftp网络下载、sf操作 spi flash、mmc操作 emmc、dm驱动调试、printenv/setenv/saveenv环境变量、bootm/booti启动内核。
产品发布后很多板子会关掉命令行,直接自动 boot
开发阶段全靠它调试 DDR、flash、网络。
4、附加能力
- 环境变量存储:保存 bootargs、启动地址、mac 地址等,存在 flash;
- 支持升级:固件升级、内核升级、rootfs 升级;
- 支持脚本:autoboot 脚本;
- 支持安全启动(配合 ATF、BL31,签名校验镜像);
- 支持多种 OS 引导:Linux 是主力,也可以引导 VxWorks、QNX、RTOS 等。
U-Boot 不做的事情
- 不跑业务应用;
- 没有完整进程调度、文件系统权限、内存管理(和 Linux 内核完全两码事);
- 不管理上层 APP;
- ARMv8 平台下,一般不处理 EL3 安全异常,EL3 交给 ATF BL31。

三、U-Boot发展史
U-Boot 版本规则:从很早开始改成 年份。月份 的版本号,例如
2021.01、2021.04、2021.07、2021.10,每年 4 个主线版本(1/4/7/10 月发布)。
1、2000:
U-Boot 诞生,合并 PPCBoot+ARMBoot;初期主打 PowerPC,ARM 支持逐步完善。
2、2000~2008:
快速扩张架构支持:MIPS、x86、Blackfin 等;版本号 0.x → 1.x。
u-boot-1.1.4:里程碑版本,稳定,大量工业老设备长期基于这个版本改。
3、2008 左右:
切换到 year.month 版本命名体系,放弃 1.x、2.x 编号。
4、2010 前后:
DM 驱动模型(Driver Model)开始提出、逐步合入主线
- 老 U-Boot 没有 DM:每个板子硬编码操作寄存器,驱动高度板级耦合,移植噩梦;
- DM 目标:像 Linux 设备树驱动一样,驱动和板级解耦,用 DTS 描述硬件;
- DM 是渐进合入,很长一段时间新旧驱动并存。
5、2014 之后:
ARM64(AArch64)主线支持成熟;SPL 架构成熟普及。 随着国产 SoC 兴起,SPL 变成标配:SPL 负责 DDR 初始化。
6、2021 系列
工业 / 安防 / AI SoC 最热门经典分支
① DM 驱动模型已经稳定成熟;CONFIG_DM_LINKER_LIST广泛使用;
② ARM64 支持完善、LPDDR4X、RGMII GMAC、eMMC、SPI NAND 支持很好;
③ 缺点:部分新特性(一些新的 DTS 绑定、新的安全框架、现代异步 probe)还没有;
④ 大量国产 SDK都基于 2021 做二次定制,原因:稳定、bug 少、社区资料多,又不会太新带来兼容性风险。
7、2022 ~ 现在主线(2022.01 → 2026.07)
DM 持续增强、异步 probe、OF_LIVE、更多安全启动、RISC-V 完善、新 DDR PHY 接口、更多现代总线;
但是新版本改动大,厂商 SDK 不愿意随便升级,怕引入回归 bug。
四、U-Boot 的优缺点总结
1、优点
- 跨架构:ARM32/ARM64/PowerPC/MIPS/RISC-V;
- 丰富命令行,开发调试无敌;
- 介质支持极广:SD/eMMC/NAND/SPI NOR/TFTP/USB;
- DM+DTS,现代驱动模型,移植比老版本方便;
- 社区巨大,问题、资料、样例极多;
- SPL 架构,解决 DDR 必须在 DDR 可用之前初始化的经典难题。
2、缺点
- GPLv2 协议,产品商用有合规负担;
- 历史代码多,很多老旧兼容逻辑,读源码门槛高;
- 早期 SPL 内存极小,写代码要非常小心;
- 厂商 fork 版本和主线差异大,主线补丁经常不能直接合入 SDK;
- 不是为高性能业务设计,只是引导固件。