Bootloader 是设备上电后先于操作系统运行的启动程序,负责完成关键硬件初始化、选择启动介质、加载内核或下一级启动阶段,并把启动参数交给操作系统。

核心问题

设备刚上电时,DRAM、时钟、存储控制器、电源域和外设通常还没有完全可用。操作系统内核不能凭空开始运行,它需要一个更早期的程序把硬件带到可启动状态。

Bootloader 解决的是“从芯片复位到操作系统内核接管之间如何过渡”的问题。

核心机制

嵌入式启动链通常是多阶段的:

  1. Boot ROM:固化在 SoC 内部,选择启动介质并加载早期启动代码。
  2. SPL / TPL 等早期阶段:初始化 DDR、时钟和存储等最小硬件集合。
  3. 主 Bootloader:常见如 U-Boot,负责环境变量、启动菜单、网络启动、镜像校验和内核加载。
  4. Kernel handoff:加载 Linux kernel、initramfs 和 设备树,传递命令行参数。

在安全设备中,Bootloader 还可能参与安全启动,验证下一级镜像签名,防止未授权固件运行。

工程用途

Bootloader 在 设备 BSP 中承担启动和维护入口:

  • 板级 bring-up:最早看到串口日志、验证 DDR 和存储初始化。
  • 镜像加载:从 eMMC、NAND、NOR、SD、USB、网络或 A/B 分区加载系统。
  • 升级和恢复:支持 recovery、fastboot、TFTP、USB 烧录或 OTA 回滚。
  • 启动参数管理:传递 rootfs 路径、console、分区、内核参数和 DTB 地址。
  • 安全启动:验证 boot、kernel、dtb、rootfs 或固件签名。

边界与常见坑

  • Bootloader 不等于 BIOS:它们都参与启动,但嵌入式 bootloader 更贴近具体 SoC 和板级硬件。
  • Bootloader 能启动不代表内核配置正确:内核驱动、设备树和 rootfs 仍可能失败。
  • 环境变量会造成版本漂移:量产设备要明确 bootargs、分区表和镜像路径来源。
  • DDR 初始化错误可能表现为随机崩溃:不是所有 boot 问题都会稳定复现。
  • 安全启动链不能只验一段:如果只验证 bootloader,不验证 kernel、dtb 或 rootfs,仍可能被替换后续镜像。

相关术语