首页 >> 常识问答 >

问uboot 固件指什么 嵌入式引导程序详解

2026-11-13 19:49:21

答

核心结论 uboot 固件全称是 Universal Boot Loader 通用引导加载程序固件,它是嵌入式设备上电之后最先运行的底层软件,运行位置在 CPU 内核启动之后,操作系统内核启动之前,作用就是初始化 CPU 内存串口网卡存储控制器这些硬件,识别并加载 Linux 内核根文件系统,同时提供命令交互界面,负责系统启动引导,刷机升级,硬件调试,uboot 固件并不是操作系统本身,它属于独立的 bootloader 引导固件,广泛用在路由器开发板工控机机顶盒 ARM 板卡等嵌入式设备,一旦 uboot 固件损坏,设备上电之后就无法引导内核,会出现变砖现象,很多玩家刷机操作本质就是重新烧写对应的 uboot 固件。

基础原理与定位

嵌入式设备上电之后硬件复位,CPU 会按照芯片固化的 ROM 代码启动,ROM 代码功能非常有限,只做最基础校验,然后跳转到外部存储里面的 uboot 固件,uboot 固件接管系统控制权,完成板级硬件初始化。

uboot 是开源项目,源代码可以自行编译,针对不同 CPU 平台比如 ARM MIPS RISC-V,还有不同板子的 DDR 参数网口 flash 芯片,都需要单独编译适配,所以同一款 CPU,不同开发板对应的 uboot 固件不能随便混用,混用会因为 DDR 时序外设寄存器不匹配,直接启动失败。

uboot 固件支持两种启动模式,第一种是自动启动,上电等待几秒倒计时,倒计时结束自动加载内核,第二种是按键触发进入命令行模式,用户可以输入命令查看内存,读写 flash,tftp 下载内核,修改启动参数 bootcmd bootargs。

uboot 固件核心功能清单

1 硬件初始化 初始化 DDR 内存时钟 PLL 串口 UART SPI NOR flash NAND flash eMMC SD 卡以太网控制器

2 启动参数管理 保存 bootcmd bootargs,bootcmd 定义自动启动命令,bootargs 是传给 Linux 内核的启动参数,比如串口波特率根文件系统分区

3 多介质启动 支持从 SD 卡 eMMC NAND flash SPI flash TFTP 网络加载内核镜像

4 刷机升级功能 支持通过 tftp 串口 USB 网络下载新固件,写入存储芯片,是救砖的核心工具

5 命令交互调试 提供 printenv setenv saveenv mw cp erase ping tftpboot bootm 等常用命令

6 支持固件校验 部分版本 uboot 固件带签名校验,开启 secure boot 之后,未签名内核会拒绝加载

uboot 固件和相关文件对照表

名称和 uboot 固件关系说明
uboot.bin原始编译二进制 uboot 固件编译输出原始 bin 文件,部分平台需要再加头部
uboot.img带头部封装 uboot 固件带校验头,适合烧写到指定分区
uboot.spl二级引导前置程序SPL 是 uboot 固件的前置阶段,先跑 SPL 再进入完整 uboot
zImage vmlinuzLinux 内核由 uboot 固件负责加载,不属于 uboot 固件本体
rootfs 根文件系统操作系统文件系统uboot 固件只负责传递启动参数,不包含根文件系统

深度补充知识点

第一 SPL 二级引导,现在很多 ARM SoC 会采用 SPL 加完整 uboot 固件结构,SPL 体积很小,负责初始化 DDR,然后从存储介质读取完整 uboot 固件到内存再跳转执行,这样解决早期 ROM 代码不能初始化大容量 DDR 的问题,很多资料里面提到的 uboot 固件,有时候是包含 SPL 合并文件,有时候单独指完整 uboot 主体,需要看厂家发布包说明。

第二 编译 uboot 固件,需要安装交叉编译工具链,执行 make 配置板级 defconfig,然后 make 编译,编译完成得到二进制文件,不同芯片厂商会在原生 uboot 开源代码基础上增加板级补丁,原厂 uboot 固件一般都做过定制,比官方原生 uboot 固件对板卡外设支持更完善。

第三 烧写 uboot 固件方式,常见有 JTAG 烧写,串口 xmodem 下载,原厂刷机工具,SPI 编程器离线烧写,当设备完全变砖无法进入系统,就需要编程器直接把 uboot 固件写到 flash 芯片里面。

第四 安全机制,开启 Secure Boot 之后,uboot 固件本身也需要做签名,芯片 ROM 校验 uboot 固件签名,校验失败直接停止启动,这种设计防止恶意引导程序篡改设备。

【常见问题】

问题 1 uboot 固件损坏之后设备会是什么现象

回答 1 uboot 固件损坏之后,嵌入式设备上电无法完成硬件初始化,不能加载 Linux 内核,串口一般没有正常启动日志,设备相当于变砖,需要重新烧写正确版本的 uboot 固件才能恢复。

问题 2 不同板子的 uboot 固件可以互相替换吗

回答 2 不可以直接替换 uboot 固件,因为每块板子 DDR 芯片参数外设引脚时钟配置都不一样,跨板使用 uboot 固件会初始化失败,必须使用对应板卡专门编译适配的 uboot 固件。

问题 3 uboot 固件属于操作系统吗

回答 3 uboot 固件不属于操作系统,uboot 固件只是引导加载程序,作用是引导操作系统内核启动,本身没有完整文件系统多任务调度这些操作系统核心能力。

问题 4 编译出来的 uboot.bin 就是可以直接烧写的 uboot 固件吗

回答 4 大部分平台 uboot.bin 可以烧写,但是部分芯片要求 uboot 固件必须增加头部或者和 SPL 合并,需要对照原厂说明,不能默认 uboot.bin 就是最终可烧写 uboot 固件。

【免责申明】

本内容基于开源 uboot 通用技术原理整理,不同 SoC 厂商定制版本 uboot 固件存在差异,烧写修改 uboot 固件存在设备变砖风险,操作前请确认硬件平台与固件版本匹配,本文仅作为技术学习参考,不对操作造成硬件损坏数据丢失等损失承担责任。

 

相关阅读

最新文章