1. 为什么需要刷机?
Nvidia Jetson系列开发板(包括AGX Orin、Orin NX和Nano)出厂时通常预装基础系统镜像,但实际开发中我们经常需要:
- 升级到最新JetPack SDK版本
- 更换为特定分支的L4T(Linux for Tegra)系统
- 修复因误操作导致的系统崩溃
- 部署定制化的根文件系统
我经手过上百台Jetson设备的刷机工作,发现90%的刷机失败案例都源于准备工作不充分。下面这个完整的刷机方案,已经稳定运行在工业质检、自动驾驶和边缘计算等多个场景。
2. 准备工作与硬件连接
2.1 必要设备清单
- 主机电脑:建议使用Ubuntu 20.04/22.04(实测Windows刷机成功率低20%)
- USB Type-C数据线(必须支持数据传输)
- 跳线帽或杜邦线(用于强制恢复模式)
- 至少32GB的microSD卡(刷NX/Nano时备用)
- 直流电源(AGX Orin需20V/6A,NX需19V/3.42A)
重要提示:AGX Orin的40-pin扩展口与Nano不兼容,选购配件时需注意
2.2 三种强制进入恢复模式的方法
根据设备型号选择最适合的方式:
| 设备型号 | 方法1 | 方法2 | 方法3 |
|---|---|---|---|
| AGX Orin | 按住Force Recovery按钮开机 | 短接J_PIN1和GND | 通过UART发送命令 |
| Orin NX | 短接FC_REC引脚 | 使用jump-to-recovery工具 | - |
| Nano | 短接J48引脚 | 使用nvpmodel -f命令 | - |
实测AGX Orin最稳定的方式是方法1,而NX系列推荐使用官方jump-to-recovery工具。
3. 完整刷机流程详解
3.1 下载与验证官方镜像
首先到Nvidia开发者网站获取对应型号的JetPack镜像。以JetPack 5.1.2为例:
bash复制# 下载校验工具
sudo apt install xxd
wget https://developer.nvidia.com/downloads/embedded/l4t-version-35-1-release-cert
# 验证镜像完整性
sha256sum jetson_linux_r35.1.0_aarch64.tbz2
grep jetson_linux_r35.1.0_aarch64.tbz2 l4t-version-35-1-release-cert
3.2 主机环境配置
在Ubuntu主机上安装必要工具:
bash复制sudo apt update
sudo apt install -y qemu-user-static abootimg \
device-tree-compiler libxml2-utils
解压刷机包并安装依赖:
bash复制tar xf jetson_linux_r35.1.0_aarch64.tbz2
cd Linux_for_Tegra
sudo ./apply_binaries.sh
3.3 关键刷机参数解析
刷机命令flash.sh支持的重要参数:
bash复制./flash.sh [options] <target> <device_type>
# 常用组合示例:
# AGX Orin开发板全量刷机
./flash.sh -k kernel,app,xusb,dtb jetson-agx-orin-devkit mmcblk0p1
# Orin NX保留用户数据刷机
./flash.sh --no-flash-app jetson-orin-nx-devkit mmcblk0p1
参数说明:
-k:指定保留的分区(避免重复刷写)--no-flash-app:跳过APP分区(保留用户数据)mmcblk0p1:eMMC存储设备节点
3.4 实际刷机过程记录
- 设备进入恢复模式后连接主机
- 检查设备是否被识别:
bash复制lsusb | grep NVIDIA # 应显示"NVidia Corp. APX"类似设备 - 执行刷机(以AGX Orin为例):
bash复制sudo ./flash.sh jetson-agx-orin-devkit mmcblk0p1 - 观察进度输出,正常情况约15-20分钟完成
刷机过程中切勿断开电源或USB连接,特别是写入QSPI阶段
4. 刷机后必须的配置项
4.1 首次启动优化
bash复制# 扩展文件系统到全部存储空间
sudo /usr/lib/nvidia/resizefs/nvresizefs.sh
# 安装基础开发工具
sudo apt install -y build-essential cmake git
# 设置SWAP(建议内存的2倍)
sudo fallocate -l 16G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
4.2 关键性能调优
修改/etc/nvpmodel.conf配置电源模式:
ini复制# AGX Orin 50W模式
[power_mode_0]
name = 50W
type = 0
...
# Orin NX 20W模式
[power_mode_1]
name = 20W
type = 1
...
使用jetson_clocks脚本解锁最大性能:
bash复制sudo /usr/bin/jetson_clocks
5. 高频问题解决方案
5.1 刷机失败常见错误码
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| USB设备未识别 | 线材质量问题 | 更换Type-C线并重试 |
| Flashing app failed | 存储空间不足 | 检查分区表并重新格式化 |
| QSPI write error | 硬件故障 | 联系Nvidia技术支持 |
| Kernel panic | 镜像版本不匹配 | 下载正确版本的JetPack |
5.2 系统启动问题排查
如果刷机后无法启动,建议按以下顺序排查:
- 通过UART查看启动日志(波特率115200)
- 检查LED状态:
- AGX Orin:电源LED应常绿
- Orin NX:STAT灯应有规律闪烁
- 测量核心电压:
bash复制# 在UART终端执行 cat /sys/bus/i2c/drivers/ina3221/0-0040/iio:device0/in_voltage*
5.3 自定义镜像制作技巧
需要定制文件系统时,推荐使用chroot方法:
bash复制# 挂载目标文件系统
sudo mount /dev/mmcblk0p1 /mnt
sudo mount -o bind /dev /mnt/dev
sudo mount -o bind /proc /mnt/proc
# 进入chroot环境
sudo chroot /mnt
# 进行定制修改后打包
tar cjpf custom_rootfs.tbz2 *
6. 进阶技巧与维护建议
6.1 双系统配置方案
通过SD卡实现双系统启动:
- 将镜像刷写到SD卡:
bash复制
./flash.sh -S 32GiB jetson-orin-nx-devkit sdcard - 修改U-Boot启动顺序:
bash复制setenv boot_targets "mmc1 mmc0" saveenv
6.2 自动化刷机脚本示例
创建批量刷机脚本auto_flash.sh:
bash复制#!/bin/bash
SERIAL=$1
IMAGE=$2
{
echo "开始处理设备 $SERIAL"
tegraflash.py --serial $SERIAL --bl LNX.img --applet MB1.bin \
--chip 0x23 --cmd "write APP $IMAGE"
echo "$SERIAL 刷机完成"
} >> flash.log 2>&1
6.3 长期维护建议
- 每月检查Nvidia官网的CVE公告
- 使用apt-mark保留关键包版本:
bash复制sudo apt-mark hold nvidia-l4t-* - 定期备份QSPI内容:
bash复制sudo ./flash.sh -r -k APP,qspi jetson-agx-orin-devkit mmcblk0p1
我在机器人项目中总结的经验是:每次大版本升级前,先用备用设备测试所有关键功能。曾因直接升级导致整个车队需要返厂重刷,损失了三天工期。现在团队严格执行"测试-备份-升级"流程后,再没出现过大规模故障。