4. 启动与固件验收

启动与固件验收是Jetson工业项目交付中最容易被“能开机就行”掩盖的一环。工业现场对启动的要求不是“点亮屏幕”,而是可重复、可追溯、可批量复制:同一批次设备必须从相同的引导路径进入相同的系统状态,固件版本必须与BSP、JetPack、量产镜像三者一致,任何一次断电重启、看门狗复位或OTA升级后都不能出现引导漂移。本节围绕启动链路验证、UEFI/引导加载程序配置核对、固件版本一致性比对和量产烧录验收四个动作展开,给出可执行的检查方法与判据。

一、先建立启动链路的“信号流”认知

Jetson(以Orin NX/Nano、Xavier NX为例)的启动不是单一Bootloader,而是一条多级链:上电后由BootROM读取QSPI-NOR中的BPMP-FW、MB1、MB2,再加载UEFI固件,UEFI根据引导项加载内核与设备树,最后交给systemd进入用户态。验收时要沿着这条链逐级确认“谁加载了谁、版本是什么、失败时停在哪一级”。

Jetson 启动链路与固件验收观测点 BootROM 芯片内固化 读QSPI-NOR BPMP-FW / MB1 电源与时钟初始化 版本可读 MB2 / UEFI 引导项与DTB选择 配置核对重点 Kernel + DTB 内核版本/设备树 与BSP匹配 systemd 用户态 服务拉起/应用自启 最终验收状态 观测点1:串口日志 115200 8N1,抓取从BootROM到UEFI的完整打印,确认无“Failed to load”或重试 观测点2:UEFI菜单 Boot order、BootManager、DTB路径、Secure Boot状态 观测点3:系统内版本 /etc/nv_tegra_release、uname -r、dtc反编译DTB比对 观测点4:量产烧录 flash.sh日志、烧录后首次启动自检、批次一致性抽样 典型失败定位 卡在MB1→QSPI固件损坏或供电不足;卡在UEFI→引导项/DTB错误;进内核后panic→内核与DTB不匹配;用户态失败→服务依赖或rootfs损坏

二、启动流程验证:从串口日志到用户态

验收第一步是接串口。Jetson调试串口默认115200-8N1,用USB-TTL接GND/TXD/RXD,上电抓取完整日志。合格日志应满足:BootROM打印芯片型号与QSPI读取成功;MB1/MB2无重试;UEFI在预期时间内进入引导项;内核解压后无“Unable to handle kernel NULL pointer”;systemd到达multi-user.target。若日志停在“Waiting for bootloader”或反复出现“Retrying”,优先怀疑QSPI固件损坏或供电纹波过大,而不是先改软件。

进入系统后,用以下命令固化证据:

cat /etc/nv_tegra_release
# 输出示例:R35 (release), REVISION: 4.1, GCID: 34567890, BOARD: t186ref
uname -r
# 输出示例:5.10.120-tegra
sudo dmesg | grep -i "tegra\|dtb\|firmware"
# 关注:DTB加载路径、BPMP固件版本、任何firmware load failed

判据是:/etc/nv_tegra_release中的L4T版本必须与项目BSP基线一致;uname -r内核版本必须与BSP发布说明匹配;dmesg中不得出现固件加载失败。三者任一不符,启动验收不通过。

三、UEFI/引导加载程序配置检查

Orin系列使用UEFI替代早期U-Boot,配置集中在QSPI的UEFI变量与/boot/extlinux/extlinux.conf。验收时要核对四类配置:

  • 引导顺序:UEFI BootOrder中量产设备应固定为eMMC/NVMe首选,禁止残留USB或网络引导项,防止现场插入U盘后引导漂移。
  • 内核与DTB路径:extlinux.conf中LINUX与FDT指向的镜像和DTB必须与BSP一致,且DTB需与载板匹配(如Orin NX 16GB + 定制载板需使用对应pinmux与设备树)。
  • Secure Boot与签名:工业项目若启用Secure Boot,需确认PK/KEK/db已正确烧录,且内核与DTB已签名;未签名镜像会导致启动中断。
  • 启动参数:APPEND中的root=、console=、以及项目自定义参数(如isolcpus、hugepages)必须与实时性/性能验收要求一致。

检查方法:在UEFI菜单中查看Boot Manager与Device Manager,记录BootOrder;在系统中执行sudo cat /boot/extlinux/extlinux.conf并保存为验收附件。若使用OTA,还需确认A/B分区槽位状态与nvbootctrl输出一致。

四、固件版本一致性核对

“固件版本一致”不是只看一个版本号,而是四层对齐:芯片内BootROM与QSPI固件、UEFI固件、L4T/JetPack、量产镜像。建议建立一张版本对照表,逐台或抽样填写。示例字段如下:

核对项获取方式示例值判据
L4T版本/etc/nv_tegra_releaseR35.4.1等于BSP基线
内核版本uname -r5.10.120-tegra与BSP发布一致
UEFI版本UEFI菜单或串口日志35.4.1-gcid-xxxx与L4T匹配
QSPI固件flash.sh日志/串口BPMP-FW 35.4.1无版本回退
DTBdtc -I dtb -O dtstegra234-p3767-0000与载板匹配

若发现UEFI版本高于L4T,通常意味着QSPI被单独升级过,需回退或同步升级L4T;若DTB与载板不匹配,表现为部分外设(如CAN、网口)不工作,而非完全无法启动,容易被误判为硬件故障。

五、量产烧录验收

量产烧录使用NVIDIA SDK Manager或flash.sh配合量产包。验收要点是“烧录日志可追溯、首启自检可自动、批次抽样可复现”。典型流程:

  1. 将设备置于Recovery模式(按住Recovery键上电),lsusb应看到NVIDIA Corp.设备。
  2. 执行烧录命令,例如:sudo ./flash.sh jetson-orin-nx-16gb mmcblk0p1,保存完整日志。
  3. 烧录完成后首次启动,运行自检脚本,检查L4T版本、内核、DTB、网络、存储、看门狗是否正常。
  4. 按批次抽样(如每50台抽3台)执行冷启动10次,确认无引导失败、无版本漂移。
建议把“首启自检脚本”作为量产镜像的一部分,开机自动运行并输出JSON报告,包含L4T版本、内核版本、DTB哈希、启动耗时、失败计数。这样验收时只需收集报告,而不是逐台手工敲命令。
常见坑:烧录后未清除UEFI变量,导致设备仍从旧引导项启动;或量产镜像中残留开发阶段的extlinux.conf,指向不存在的DTB。验收时必须核对“烧录后首次启动”的日志,而不是开发板上验证过的配置。

最后,把启动与固件验收的结论写成可签署的记录:每台设备的序列号、L4T版本、内核版本、UEFI版本、DTB标识、烧录日志哈希、首启自检结果、冷启动次数与失败次数。只有这些字段齐全且一致,才能判定该批次通过启动与固件验收,进入下一阶段的功能与可靠性测试。