3. JetPack SDK与系统烧录部署

JetPack 是 NVIDIA 为 Jetson 系列边缘计算平台提供的官方软件开发套件。它并不是一个单独的软件,而是一组经过版本锁定、彼此验证过的组件集合,包含操作系统、驱动、CUDA 运行时、加速库、推理框架以及刷机与开发工具。理解 JetPack 的组成结构,是后续系统烧录、环境搭建和量产部署的前提。

JetPack 的版本组成与 L4T 的关系

JetPack 的版本号(如 JetPack 5.1.2、JetPack 6.0)对应一整套组件清单。其中最关键的是 L4T(Linux for Tegra),它是 Jetson 的板级支持包,包含基于 Ubuntu 的根文件系统、U-Boot 引导程序、内核、设备树以及 Tegra 专用驱动。L4T 版本决定了底层系统能力,例如 JetPack 5.x 对应 L4T 35.x(Ubuntu 20.04),JetPack 6.x 对应 L4T 36.x(Ubuntu 22.04)。

在 L4T 之上,JetPack 叠加了计算与推理组件:CUDA 提供 GPU 通用并行计算能力;cuDNN 是深度神经网络加速库,封装了卷积、池化、归一化等算子;TensorRT 负责把训练好的模型做图优化、层融合、精度校准(FP32/FP16/INT8),生成高效的推理引擎。此外还包括 VPI、DeepStream、Multimedia API 等。各组件版本必须与 L4T 匹配,混用会导致驱动不兼容或推理失败。

JetPack 组件栈与 L4T 依赖关系 Jetson 硬件平台(Orin / Xavier / Nano 等) L4T(Linux for Tegra) Ubuntu 根文件系统 · U-Boot · 内核 · 设备树 · Tegra 驱动 计算与多媒体中间件 CUDA Runtime · cuDNN · TensorRT · VPI · Multimedia API · DeepStream 应用与框架层 PyTorch / TensorFlow · 自研推理程序 · 容器化部署 开发与刷机工具 SDK Manager · flash.sh · l4t_initrd_flash.sh · 量产烧录工具 版本锁定 JetPack 6.0 L4T 36.3 CUDA 12.2 cuDNN 8.9 TensorRT 8.6 Ubuntu 22.04 逐层依赖

SDK Manager 刷机流程

对于开发阶段,最常用的刷机方式是使用 NVIDIA SDK Manager。它运行在 Ubuntu 主机上,通过 USB 连接 Jetson 的恢复模式(Recovery Mode)进行烧录。典型流程如下:

  1. 在主机安装 SDK Manager,登录 NVIDIA 开发者账号。
  2. 选择目标 Jetson 型号与 JetPack 版本,勾选需要安装的组件(Host Components 与 Target Components)。
  3. 将 Jetson 置于恢复模式:按住 Recovery 键,短按 Reset 键后松开,再松开 Recovery 键。用 lsusb 应能看到 NVIDIA 的 0955 设备。
  4. SDK Manager 自动下载并烧录 L4T 镜像,随后通过 SSH 或串口安装 CUDA、cuDNN、TensorRT 等组件。
  5. 刷机完成后,Jetson 首次启动进入 Ubuntu 初始化配置,设置用户名与密码。
恢复模式是刷机的关键前提。若 lsusb 看不到 NVIDIA 设备,通常是按键时序不对或 USB 线不支持数据传输,建议换用原装或带数据线的 USB-C 线缆。

系统镜像定制

量产场景下不能依赖 SDK Manager 逐台交互刷机,需要定制系统镜像。L4T 提供了 flash.sh 与 l4t_initrd_flash.sh 脚本,配合 apply_binaries.sh 将根文件系统与 BSP 合并。常见定制内容包括:预装应用与依赖库、修改网络与主机名配置、裁剪不需要的组件以缩小镜像、设置开机自启服务、配置静态 IP 或 4G 模块参数。

定制的基本思路是:先准备一个干净的根文件系统(rootfs),在其中完成所有配置与预装,然后通过 flash.sh 生成可烧录的镜像。例如,将自定义应用放入 /opt/myapp,并添加 systemd 服务实现开机自启,再执行:

sudo ./apply_binaries.sh
sudo ./flash.sh jetson-orin-nano-devkit internal

其中 jetson-orin-nano-devkit 是目标板配置名,internal 表示烧录到内部 eMMC 或 NVMe。若使用外部存储,需替换为对应参数。

量产烧录方法

量产烧录的核心是批量、可重复、可校验。常用方案有三种:

  • 批量 flash.sh 脚本:通过 USB Hub 连接多台设备,编写脚本循环调用 flash.sh,适合小批量。
  • NVMe 镜像克隆:先制作一台“金机”,将其系统盘完整克隆为镜像文件,再批量写入其他设备的 NVMe,适合大批量且硬件配置一致的场景。
  • OTA 与恢复分区:通过 OTA 包对已部署设备进行远程升级,配合 A/B 分区实现失败回滚,适合现场维护。

无论采用哪种方式,都应在烧录后执行校验:检查 L4T 版本、CUDA 是否可用、TensorRT 能否加载引擎、目标应用是否正常启动。可用以下命令快速确认:

cat /etc/nv_tegra_release
nvcc --version
python3 -c "import tensorrt; print(tensorrt.__version__)"
量产烧录前务必确认 JetPack 版本与硬件型号严格匹配。不同型号的 Jetson 模块(如 Orin NX 与 Orin Nano)设备树和引导配置不同,混用镜像会导致无法启动或外设失效。

版本选择与部署建议

选择 JetPack 版本时,应优先考虑生态兼容性而非一味追新。若项目依赖的推理框架或第三方库尚未支持最新 L4T,应回退到稳定版本。部署时建议将系统盘与数据盘分离,系统盘用于 L4T 与运行时,数据盘用于模型与日志,便于镜像克隆和故障恢复。对于需要长期运行的边缘设备,还应配置看门狗、日志轮转和远程升级通道,确保系统可维护。