像接力赛一样看懂 Linux 启动流程

可以把 Linux 启动理解成一场接力赛:板子上电后,程序一个接一个跑起来,每一棒只负责自己的任务,跑完就把接力棒交给下一棒。

启动流程一览

Reset(上电/复位)
  ↓
BootROM(RK3576 芯片固化引导)
  ↓
前级 Loader / SPL(初始化 DDR)
  ↓
U-Boot(加载内核、准备启动参数)
  ↓
Kernel(Linux 内核启动)
  ↓
rootfs(挂载根文件系统)
  ↓
init / shell(进入用户空间,出现命令行)

每一棒在干什么?

阶段 像什么 它做什么
Reset 按下开机键 板子上电或复位,CPU 从固定位置开始执行代码
BootROM RK3576 芯片自带的“最小启动程序” 出厂固化在 RK3576 芯片里,负责选择从 eMMC、SD 卡等设备加载下一段程序
前级 Loader 先帮板子“醒过来”的小助手 通常叫 SPL 或 preloader,先初始化 DDR、串口等基础硬件,再把完整 U-Boot 加载到内存
U-Boot 板子的 BIOS + 启动管理器 初始化更多硬件,找到内核镜像和设备树,设置启动参数,然后启动内核
Kernel Linux 内核 初始化内存管理、驱动、文件系统,最后挂载根文件系统并启动第一个进程
rootfs 系统盘 / C 盘 提供 / 目录、命令、库、配置文件和应用,是用户空间的运行环境
init / shell 系统进入“可用状态” 内核启动 init 或 systemd,再拉起 shell,就能看到命令行并输入命令

用一句话串起来

Reset 让板子醒来,BootROM 找到启动设备,前级 Loader 初始化 DDR 并加载 U-Boot,U-Boot 找到内核并启动它,Kernel 初始化驱动并挂载 rootfs,最后 init 拉起 shell,系统进入可操作状态。

容易混淆的点

  • BootROM 不是 U-Boot:BootROM 是 RK3576 芯片里固化的,不能修改;U-Boot 是烧写在 eMMC 或 SD 卡上的引导程序。
  • 前级 Loader 不是完整 U-Boot:它很小,主要任务是让 DDR 可用,然后加载完整 U-Boot。
  • Kernel 启动不等于系统已经可用:内核起来后还要挂载 rootfs,启动 init,最后才会出现 shell。
  • rootfs 不是内核的一部分:内核负责驱动和系统管理,rootfs 负责提供用户能用的命令、服务和应用。