欢迎光临
我们一直在努力

RK3576 Linux 启动链路:BootROM、preloader、U-Boot、Kernel 全解析

RK3576 Linux 启动链路:BootROM、preloader、U-Boot、Kernel 全解析

本文把 RK3576 代入 Linux 启动流程,按 BootROM、preloader、U-Boot、Kernel 和 rootfs 五个阶段说明控制权如何转移,并整理常见故障的定位方法。

1. 启动链路总览

上电/复位

BootROM(芯片固化代码)

preloader / SPL(初始化 DDR 等基础硬件)

U-Boot(加载内核并准备启动参数)

Linux Kernel(初始化内核子系统)

rootfs(启动 init/systemd 和用户空间)

trust 组件是 RK 平台安全启动架构的重要组成部分,会贯穿相关启动阶段。固件打包方式可能把多个组件组合在一起,但调试时仍可以按职责划分。

2. BootROM:一级引导

BootROM 固化在芯片内部,用户无法修改。RK3576 上电或复位后首先运行 BootROM。

它主要负责:

  • 读取 SARADC_IN0_BOOT,根据 ADC 值选择启动顺序;
  • 初始化片内 SRAM 和基础外设;
  • 按选定顺序访问启动设备;
  • 将 preloader 下载到片内 SRAM;
  • 把控制权交给 preloader。

BootROM 通常不会输出用户可见日志,因此早期无串口打印不等于没有执行。

3. preloader / SPL:二级引导

preloader 也称 SPL(Second Program Loader),负责把系统从片内 SRAM 运行环境推进到可以运行完整 U-Boot 的状态。

主要工作:

  • 初始化时钟;
  • 初始化外部 DRAM,RK3576 常见为 LPDDR4;
  • 初始化串口;
  • 从启动设备读取 u-boot.img 到外部 DRAM;
  • 把控制权交给 U-Boot。
  • 从这个阶段开始,通常可以在串口看到启动打印,后续程序主要加载到 DDR 中运行。

    4. U-Boot:三级引导

    U-Boot 的目标是准备 Linux 并把控制权交给内核。

    主要工作包括:

    • 初始化串口并输出日志;
    • 从 eMMC、SD 等设备读取环境变量;
    • 获取 Kernel、设备树和 rootfs 的位置;
    • 设置 Linux 启动参数;
    • 准备硬件并把内核加载到外部 RAM;
    • 跳转执行内核。

    进入 U-Boot 后,重点检查启动介质是否识别、环境变量是否正确、内核和设备树是否在预期位置,以及 bootargs 是否指向正确的 rootfs。

    5. Linux Kernel 阶段

    Kernel 阶段完成平台相关初始化,并为用户空间准备运行环境:

    • 初始化串口并输出内核日志;
    • 初始化内存管理和各个内核子系统;
    • 检测内存大小和占用情况;
    • 创建页表,映射物理内存和 I/O 空间;
    • 加载编译进内核的驱动;
    • 创建第一个用户空间进程,通常是 init 或 systemd。

    看到 Kernel banner 只说明内核已经运行,不代表 rootfs 已经挂载成功。

    6. rootfs:根文件系统

    rootfs 是内核启动时挂载的第一个文件系统,提供:

    • 根目录 /;
    • init 或 systemd;
    • Shell、命令和共享库;
    • 用户空间服务、配置文件和应用程序。

    如果内核日志正常,却停在挂载 rootfs 附近,应检查存储驱动、分区、文件系统类型、root 设备参数以及文件系统内容。

    7. 按现象定位问题

    现象优先检查
    上电后完全无输出 电源、复位、启动脚、DDR、启动介质和串口
    BootROM 后无法继续 preloader 是否存在、启动介质是否可读
    preloader 阶段 DDR 初始化失败 DDR 焊接、供电、训练参数和板级信号
    U-Boot 找不到内核 启动介质、分区、环境变量、文件名和地址
    Kernel 无法挂载 rootfs 存储驱动、root 参数、文件系统和分区
    用户空间服务失败 rootfs 内容、init/systemd 配置和应用依赖

    在没有定制 U-Boot 的情况下,BootROM 和默认引导代码通常经过充分验证。启动早期完全无日志时,应优先排查 DDR、电源时序、eMMC 接触等硬件因素。

    8. 总结

    RK3576 启动链路可以概括为:BootROM 选择并加载 preloader;preloader 初始化 DDR 并加载 U-Boot;U-Boot 准备参数并启动 Kernel;Kernel 挂载 rootfs 后进入用户空间。

    排查时先根据最后一条日志确定阶段,再检查该阶段负责的软硬件,避免跨阶段盲目修改。

    赞(0)
    未经允许不得转载:171主机测评 » RK3576 Linux 启动链路:BootROM、preloader、U-Boot、Kernel 全解析
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址