2. Jetson硬件平台与启动链解析

Jetson 的启动过程不是“上电即运行 Linux”这么简单。它是一条由硬件固化代码逐级接力、最终把控制权交给操作系统的多阶段链路。理解这条链路,是生产测试与烧录验证的基础:只有知道每一级由谁加载、存放在哪里、失败时表现如何,才能在量产线上快速判断一块模组是“没烧进去”“烧错了”还是“硬件本身有问题”。

一、先分清三个层次:模组、载板与启动固件

Jetson 产品由两部分组成:模组(Module)和载板(Carrier Board)。模组上集成了 SoC、LPDDR 内存、eMMC/UFS 或 QSPI 存储、电源管理芯片(PMIC)以及部分时钟与调试接口;载板则提供 USB、以太网、MIPI CSI、PCIe、显示、风扇、按键等外设接口。同一颗模组可以插到不同载板上,因此启动链中“哪些设备可用”既取决于模组型号,也取决于载板设计。

以常见型号为例:Jetson Nano 使用 4GB LPDDR4 与 microSD 启动;Jetson Xavier NX 使用 8GB/16GB LPDDR4x 与 16GB eMMC;Jetson Orin Nano 与 Orin NX 使用 LPDDR5,容量从 4GB 到 16GB 不等,并支持 NVMe 启动。不同型号的 BootROM 版本、MB1 配置、UEFI 设备树都不同,烧录时使用的 BSP 包必须与模组型号严格匹配,否则会出现“烧录成功但无法启动”的现象。

二、启动链的六个阶段

Jetson 的启动顺序可以概括为:BootROM → MB1 → MB2 → UEFI → 内核 → 根文件系统。下面逐级说明。

BootROM 是固化在 SoC 内部只读存储器中的第一段代码,上电复位后由硬件直接执行。它负责初始化最基本的时钟、电源和存储控制器,然后从预定义的启动介质中读取下一级引导程序。BootROM 会按顺序尝试启动设备,例如先 eMMC、再 QSPI、再 SD 卡或 USB 恢复模式。如果所有介质都没有有效引导数据,SoC 会进入恢复模式(Recovery Mode),等待主机通过 USB 灌入数据。生产测试中,lsusb 能看到 NVIDIA 的 0955:7xxx 设备,就说明模组已进入恢复模式,这是烧录的前提。

MB1(Micro Boot 1)是 BootROM 加载的第一段可更新引导代码,通常存放在 QSPI 或 eMMC 的引导分区中。它承担更完整的 DRAM 初始化、安全启动校验和存储驱动加载。MB1 会读取板级配置(如 EEPROM 中的板卡 ID、内存型号),据此选择正确的内存参数。如果载板 EEPROM 内容错误或缺失,MB1 可能无法正确初始化 DRAM,表现为串口无输出或反复重启。

MB2 由 MB1 加载,进一步初始化外设、加载 UEFI 固件。MB2 阶段会处理启动设备选择、A/B 分区切换、安全策略等。在 Orin 系列中,MB2 还负责加载 UEFI 的 PE 镜像。

UEFI 是符合 UEFI 规范的固件层,负责枚举 PCIe、USB、网络等设备,加载设备树(DTB),并最终从启动分区中读取内核镜像。UEFI 阶段可以通过串口进入菜单,查看启动项、修改启动顺序。生产验证时,如果 UEFI 能正常显示启动菜单,说明 BootROM、MB1、MB2 均已通过。

内核由 UEFI 加载 Image 或 kernel 镜像到内存并跳转执行。内核会解析 DTB,挂载驱动,初始化根文件系统所需的存储控制器。此时串口会输出大量 dmesg 日志,是判断启动卡在哪一级的关键依据。

根文件系统是启动链的最后一环。内核通过 root= 参数找到根分区,执行 /sbin/init,启动 systemd 或 init 脚本,最终进入登录界面或应用服务。如果根文件系统损坏或分区表错误,内核会报 VFS: Unable to mount root fs,此时需要重新烧录或修复分区。

Jetson 启动链:从 BootROM 到根文件系统 BootROM SoC 固化只读 MB1 DRAM 初始化 MB2 外设/启动选择 UEFI 设备枚举/DTB 内核 Image + DTB 根文件系统 init / systemd SoC 内部 ROM 不可修改 QSPI / eMMC 引导分区 QSPI / eMMC A/B 分区 QSPI / eMMC UEFI 固件 常见失败点与判断依据 BootROM 阶段:无 USB 设备、串口无输出 → 检查供电、恢复模式按键、USB 线缆 MB1 阶段:串口停在 "MB1" 或反复重启 → 检查 EEPROM 板卡 ID、内存型号匹配 MB2/UEFI 阶段:无法进入启动菜单 → 检查 QSPI 固件版本、A/B 分区状态 内核阶段:卡在 "Starting kernel..." → 检查 DTB 是否匹配载板、内核镜像是否完整 根文件系统:报 "VFS: Unable to mount root fs" → 检查 root= 参数、分区表、文件系统完整性

三、生产测试中如何逐级验证

在量产线上,我们通常按“先恢复模式、再串口、后系统”的顺序验证。第一步,模组上电后短接恢复按键或拉低 RECOVERY 引脚,主机执行 lsusb,若出现 0955:7xxx 设备,说明 BootROM 已正常运行并进入恢复模式。第二步,使用 flash.sh 或 l4t_initrd_flash.sh 烧录 BSP,烧录过程中串口会依次打印 MB1、MB2、UEFI 的版本信息。第三步,烧录完成后重启,观察串口是否进入 UEFI 菜单、是否加载内核、是否挂载根文件系统。

一个典型的串口日志片段如下:

[0000.000] BootROM v1.0
[0000.120] MB1: DRAM init OK, 8GB LPDDR5
[0000.350] MB2: loading UEFI from QSPI
[0001.200] UEFI: Jetson Orin NX, DTB loaded
[0002.500] Kernel: Linux version 5.10.104-tegra
[0003.800] VFS: Mounted root (ext4) on device 0:1
[0004.100] systemd: Reached target Multi-User System

如果日志停在 MB1 之后没有 MB2,优先怀疑 QSPI 中的 MB2 镜像损坏或 A/B 分区切换失败;如果停在 UEFI 之后没有内核日志,检查 /boot/extlinux/extlinux.conf 中的 LINUX 和 FDT 路径是否正确;如果内核已启动但根文件系统挂载失败,则检查 root= 参数与分区 UUID 是否一致。

四、烧录验证的关键检查点

烧录验证不是“烧完能开机”就结束。生产测试至少应覆盖以下检查点:

  • 模组型号匹配:BSP 包中的 board_spec 必须与模组 SKU 一致,例如 Orin NX 16GB 与 8GB 的 DTB 不同。
  • BootROM 可进入恢复模式:确认 USB 枚举正常,排除供电或按键问题。
  • MB1/MB2 版本正确:串口日志中的版本号应与 BSP 发布说明一致。
  • UEFI 启动项正确:确认启动顺序指向 eMMC/NVMe 的正确分区。
  • 内核与 DTB 匹配:载板变更后必须同步更新 DTB,否则外设可能无法识别。
  • 根文件系统完整:检查 /etc/nv_tegra_release 版本号,确认与烧录 BSP 一致。
生产测试建议保留串口日志作为追溯依据。每块模组烧录后,将串口输出保存为 SN_日期.log,一旦后续出现启动异常,可以快速定位是烧录问题还是使用过程中的损坏。
不要跳过恢复模式验证直接烧录。如果 BootROM 阶段就失败,后续所有烧录操作都不会成功,强行烧录只会浪费时间并可能掩盖硬件故障。

理解启动链的层级关系后,就能把“无法启动”这个模糊现象拆解为具体阶段:是 BootROM 没跑起来,还是 MB1 读不到配置,还是 UEFI 找不到内核,还是根文件系统挂载失败。每一级都有对应的串口特征和验证手段,这正是生产测试中快速排障的核心能力。