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 识别结果为准。
在刷机主机上确认:
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):
set -o pipefail
zstd -dc lzc-x3-jetpack-7.2.1.tar.zst | docker load镜像发布到仓库后,也可使用 docker pull catdogai/lzc-x3:jetpack-7.2.1 获取。导入或拉取后启动容器:
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 或在线安装刷机依赖。
在容器内检查:
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 执行:
sudo ./tools/kernel_flash/l4t_initrd_flash.sh \
--external-device nvme0n1p1 \
-c ../flash_l4t_t234_nvme.xml \
--erase-all jetson-agx-orin-devkit externalnvme0n1p1是 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 连接,等待工具报告成功及设备重启。需要同时保存终端输出时,可以用以下形式运行同一条命令:
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.log5. 首次启动与 LVM 初始化
以下命令在LC-X3 系统内执行。默认账户为 nvidia,密码为 nvidia;登录后请修改密码。可以用显示器登录,或通过设备的局域网地址 SSH。USB 网络就绪时,也可尝试 ssh nvidia@192.168.55.1。
先等待厂商 twInit.service 完成初始化,设备可能自动重启一次:
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 上执行:
sudo lzc-orin provision --dry-run
sudo lzc-orin provision --yes第一阶段准备 initramfs 和启动项,然后自动重启。第二阶段从只读 APP 进入临时 provision target,自动克隆 APP 到 ssd_vg/ssd_lv;成功后再次自动重启,直接进入可写 LVM runtime。第二阶段没有 SSH,无需再次登录手动启动克隆,可通过串口观察进度。
完成后确认:
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 和算力舱服务:
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 重试:
sudo lzc-orin maintenance --yes此命令会重新克隆 LV。普通 APP recovery 不会自动执行它。
恢复出厂也须先进入 LZC Orin APP recovery:
sudo lzc-orin reset --dry-run
sudo lzc-orin reset --yesreset 删除 LVM runtime 数据,保留 APP 恢复系统;所有 LVM 成员盘必须连接。完成后需重新运行 sudo lzc-orin all。
添加第二块空 NVMe 时,在 LVM runtime 中先核对其型号、序列号和盘名,再执行:
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 日志 |
设备侧可收集:
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