Skip to content

LC-X3 刷机指南(Jetson AGX Orin / JetPack 7.2.1) ​

使用 catdogai/lzc-x3:jetpack-7.2.1 为 T912 v1.2 载板的 LC-X3 / Jetson AGX Orin 刷入 NVMe 系统。镜像包含 Jetson Linux R39.2.1 BSP、厂商适配、刷机依赖、定制 T234 分区 XML,以及预装的 lzc-jetson-orin-flash 0.2.6。启动容器后即可执行刷机命令。

JetPack 7.2.1 对应 Jetson Linux R39.2.1;版本说明见 NVIDIA JetPack 下载页,USB 刷机参数见 R39.2.1 Quick Start 和 Flashing Support。目标系统基于 Ubuntu 24.04。其他载板需要匹配的厂商 BSP。

数据会被擦除

本文完整刷机命令带有 --erase-all,工具会擦除设备存储。先备份系统、模型、容器和业务数据;首次刷机建议只安装目标 NVMe,拔掉其他数据盘。后续 provision、reset 和扩盘也会写入磁盘,请先核对盘名和用途。

1. 刷机前准备 ​

  • 一台原生 x86_64 Linux 主机,建议 Ubuntu 22.04,已安装 Docker 并有运行特权容器的权限。镜像架构为 linux/amd64,里面的设备 rootfs 为 ARM64。
  • 建议预留至少 80 GB 主机磁盘空间,用于镜像、容器可写层及生成的 32 GiB 系统镜像;生成过程中还会有临时文件。
  • LC-X3 已装好至少 128 GB 的目标 NVMe,并连接稳定电源。
  • 一根支持数据传输的 USB Type-C 线,连接主机与 LC-X3 的 Recovery 接口;尽量直接连接主机。
  • 显示器和键盘,或串口控制台,用于首次启动和 LVM 初始化排障。

容器依赖主机的 USB、网络和内核,以下流程适用于原生 Linux。首次操作只连接一台待刷设备。主机的 lsblk 显示主机磁盘,无法据此识别 Recovery 模式下 Jetson 内部的 NVMe。

2. 进入 Force Recovery 模式 ​

设备已上电时,按住 RECOVERY,短按并松开 RESET,再松开 RECOVERY。按键位于机身内部,必要时拆开底盖。设备关机时,可按住 RECOVERY 后按 POWER,再松开 RECOVERY。

设备还能进入 UEFI 时,也可在开机 NVIDIA 标志处按 Esc,查找 Device Manager → NVIDIA Configuration → Boot Configuration → Boot Into Recovery,启用后保存并重启。菜单随固件变化;最终以 USB 识别结果为准。

在刷机主机上确认:

bash
lsusb -d 0955:

AGX Orin 常见 Recovery USB ID 为 0955:7023,部分模块为 0955:7223,名称通常含 NVIDIA 或 APX。对应模块编号见 官方 Quick Start。如果没有识别到设备,先检查线缆、接口、供电和按键操作。

USB Force Recovery 与后文的 LZC Orin APP recovery 是两个不同环境;后者是 SSD 上的恢复系统。

3. 启动刷机容器 ​

取得配套离线包 lzc-x3-jetpack-7.2.1.tar.zst 后,在刷机主机导入镜像(需要 zstd):

bash
set -o pipefail
zstd -dc lzc-x3-jetpack-7.2.1.tar.zst | docker load

镜像发布到仓库后,也可使用 docker pull catdogai/lzc-x3:jetpack-7.2.1 获取。导入或拉取后启动容器:

bash
mkdir -p ~/lc-x3-flash/workspace
cd ~/lc-x3-flash

docker run -it --rm \
  --privileged \
  --network host \
  -v /dev/bus/usb:/dev/bus/usb \
  -v /dev:/dev \
  -v "${PWD}/workspace:/workspace" \
  catdogai/lzc-x3:jetpack-7.2.1 \
  bash

没有 Docker 权限时,在 Docker 命令前加 sudo。--privileged 和设备挂载让工具访问 Recovery USB 及重新枚举后的节点;--network host 用于 initrd 刷机通信。

容器默认进入 /Linux_for_Tegra。NVIDIA 二进制、厂商适配、默认用户和 Orin deb 已准备好,无需再次运行 apply_binaries.sh、twsetup/install.sh 或在线安装刷机依赖。

在容器内检查:

bash
cd /Linux_for_Tegra
lsusb -d 0955:
cat rootfs/etc/nv_tegra_release
ls -l ../flash_l4t_t234_nvme.xml ../lzc-jetson-orin-flash_arm64.deb
chroot rootfs dpkg-query -W lzc-jetson-orin-flash

应看到 R39.2、REVISION 2.1 和 Orin 包版本 0.2.6。原始 deb 保留在 /usr/local/share/jetson-orin-flash/,/lzc-jetson-orin-flash_arm64.deb 是指向它的固定链接。

保存日志

/workspace 映射到主机目录;/Linux_for_Tegra 位于容器可写层。--rm 会在退出后删除容器及其中生成的刷机产物,需保留的日志或文件应写到 /workspace。

4. 刷入 NVMe ​

以下命令在容器内 /Linux_for_Tegra 执行:

bash
sudo ./tools/kernel_flash/l4t_initrd_flash.sh \
  --external-device nvme0n1p1 \
  -c ../flash_l4t_t234_nvme.xml \
  --erase-all jetson-agx-orin-devkit external
  • nvme0n1p1 是 Jetson 端的目标分区,不是主机磁盘。
  • ../flash_l4t_t234_nvme.xml 指向镜像根目录的 LC-X3 定制 XML;它保留 R39.2.1 T234 启动分区,把 APP 固定为 32 GiB,并添加 DATA_PV(分区 ID 16),用于后续 LVM。
  • 镜像已把 jetson-agx-orin-devkit.conf 的 ROOTFSSIZE 设置为 32GiB,因此这条命令无需额外传 -S。自行使用原版 BSP 时,必须另外指定 -S 32GiB,并安装匹配的厂商适配和 deb。
  • NVIDIA 原版 XML 在 tools/kernel_flash/flash_l4t_t234_nvme.xml;它的分区用途不同,后续要使用 provision 时请保持上面的定制 XML 路径。

模板保留 EXT_NUM_SECTORS 占位符,BSP 默认按 57 GiB 的外部几何生成分区。DATA_PV 在 provision 时扩到 SSD 的实际末端;最少 128 GB 的要求是为了容纳 APP 的块级克隆。该布局为单 rootfs、未加密模式。

刷机时保持供电和 USB 连接,等待工具报告成功及设备重启。需要同时保存终端输出时,可以用以下形式运行同一条命令:

bash
set -o pipefail
sudo ./tools/kernel_flash/l4t_initrd_flash.sh \
  --external-device nvme0n1p1 \
  -c ../flash_l4t_t234_nvme.xml \
  --erase-all jetson-agx-orin-devkit external \
  2>&1 | tee /workspace/lc-x3-flash.log

5. 首次启动与 LVM 初始化 ​

以下命令在LC-X3 系统内执行。默认账户为 nvidia,密码为 nvidia;登录后请修改密码。可以用显示器登录,或通过设备的局域网地址 SSH。USB 网络就绪时,也可尝试 ssh nvidia@192.168.55.1。

先等待厂商 twInit.service 完成初始化,设备可能自动重启一次:

bash
systemctl status twInit.service --no-pager
ls /boot/twbsp
lsblk -o NAME,SIZE,FSTYPE,PARTLABEL,MOUNTPOINTS /dev/nvme0n1

应有约 32 GiB 的 APP(p1)和 DATA_PV(p16),/boot/twbsp 中应有厂商 DTB 与 tegra234-p3737-0000-twboard-config.dtbo。若 APP 几乎占满磁盘或缺少 DATA_PV,请重新检查刷机 XML;不要把当前根分区直接改为 LVM PV。

首次在可写 APP 上执行:

bash
sudo lzc-orin provision --dry-run
sudo lzc-orin provision --yes

第一阶段准备 initramfs 和启动项,然后自动重启。第二阶段从只读 APP 进入临时 provision target,自动克隆 APP 到 ssd_vg/ssd_lv;成功后再次自动重启,直接进入可写 LVM runtime。第二阶段没有 SSH,无需再次登录手动启动克隆,可通过串口观察进度。

完成后确认:

bash
sudo lzc-orin provision status
findmnt /
findmnt /factory
findmnt /boot
sudo lvs

/ 应为 /dev/mapper/ssd_vg-ssd_lv,APP 只读挂载到 /factory,其 /boot 只读绑定到运行系统。若仍从 eMMC 启动,在 UEFI 中选择 NVMe 启动项。

在 LVM runtime 中联网初始化 JetPack、Docker、Compose 和算力舱服务:

bash
sudo lzc-orin all

刷机镜像包含基础系统和初始化工具;JetPack 的运行软件及 Docker 由这一步安装到 LVM runtime。默认 Docker 数据目录为 /ssd/docker,用户加入 Docker 组后需重新登录。APP 的内核、DTB、initrd 所属包会被 hold;不要通过 runtime 单独升级只读 /boot。

6. 恢复、扩盘与故障排查 ​

自动克隆失败时不会自动重启。通过串口查看错误;需要普通恢复环境时重启,在 L4TLauncher 菜单中手选 LZC Orin APP recovery,再从只读 APP 重试:

bash
sudo lzc-orin maintenance --yes

此命令会重新克隆 LV。普通 APP recovery 不会自动执行它。

恢复出厂也须先进入 LZC Orin APP recovery:

bash
sudo lzc-orin reset --dry-run
sudo lzc-orin reset --yes

reset 删除 LVM runtime 数据,保留 APP 恢复系统;所有 LVM 成员盘必须连接。完成后需重新运行 sudo lzc-orin all。

添加第二块空 NVMe 时,在 LVM runtime 中先核对其型号、序列号和盘名,再执行:

bash
lsblk -d -o NAME,SIZE,MODEL,SERIAL
sudo lzc-orin expand-lvm --disk /dev/nvme1n1 --dry-run
sudo lzc-orin expand-lvm --disk /dev/nvme1n1

非空盘需要显式的 --force-wipe --yes,会删除该盘内容。扩容后根文件系统依赖所有成员盘,不能直接拔掉任意成员盘。

现象检查方法
主机看不到 Recovery USB检查数据线、Recovery 接口、供电和按键;主机与容器都执行 lsusb -d 0955:
XML 或刷机脚本不存在确认使用 catdogai/lzc-x3:jetpack-7.2.1,且当前目录为 /Linux_for_Tegra
生成镜像时空间不足检查主机 Docker 数据目录所在磁盘及容器可写层,预留临时镜像空间
第一次初始化失败检查 twInit.service 日志、/boot/twbsp、厂商 FDT/OVERLAYS 启动配置
provision 后无法 SSH临时 provision target 没有 SSH;通过串口查看进度和错误
重启回到 eMMC检查 UEFI 的 NVMe 启动顺序
LVM 根找不到确认所有 PV 成员连接,核对 initramfs 和 provision 日志

设备侧可收集:

bash
cat /proc/cmdline
findmnt /
sudo lzc-orin provision status
sudo journalctl -b -u twInit.service --no-pager
sudo journalctl -b -u lzc-orin-provision.service --no-pager