3. 开发环境搭建与首次系统烧录

Jetson 开发板出厂时通常只带一个可启动的最小系统,真正进入开发前,必须先在 Ubuntu 主机上完成 SDK 环境准备,再通过刷机把完整的 JetPack 系统写入目标存储介质。这一节围绕“主机准备 → SDK Manager 安装 → JetPack 版本选择 → 进入刷机模式 → 烧录到 eMMC/NVMe/SD 卡 → 串口连接与首次启动验证”这条主线展开,重点讲清楚每一步的实际操作对象、关键参数和结果判断依据。

一、Ubuntu 主机环境准备

NVIDIA SDK Manager 官方只支持 Ubuntu 主机,推荐 Ubuntu 20.04 LTS 或 22.04 LTS,x86_64 架构,磁盘预留至少 60 GB(同时下载多个 JetPack 组件时建议 100 GB 以上)。主机需要能访问 NVIDIA 下载服务器,国内网络环境下建议提前配置好代理或使用镜像加速,否则下载 BSP、根文件系统和 CUDA 组件时容易中断。

安装前先更新系统并补齐依赖:

sudo apt update
sudo apt install -y build-essential cmake git python3 python3-pip \
  libusb-1.0-0-dev libssl-dev qemu-user-static

其中 qemu-user-static 用于在主机上处理 aarch64 根文件系统,libusb 是 SDK Manager 通过 USB 与 Jetson 恢复模式通信的基础。主机用户需要加入 dialout 组以便访问串口:

sudo usermod -aG dialout $USER

执行后需重新登录生效。可以用 ls /dev/ttyUSB* 或 ls /dev/ttyACM* 确认串口设备是否出现。

二、SDK Manager 安装与使用

SDK Manager 是 NVIDIA 提供的图形化刷机与组件管理工具,从官网下载 .deb 包后安装:

sudo apt install -y ./sdkmanager_2.x.x_amd64.deb
sdkmanager --version

启动后需要登录 NVIDIA Developer 账号。SDK Manager 的工作流程分为两步:STEP 01 选择目标硬件与 JetPack 版本,STEP 02 选择要安装的组件(Jetson Linux BSP、根文件系统、CUDA、cuDNN、TensorRT、DeepStream 等)。刷机时它会自动下载 BSP 并调用 flash.sh 完成烧录,同时把主机侧交叉编译工具链和 CUDA 主机组件装好。

如果主机无法联网或需要离线刷机,可以先用 SDK Manager 下载好组件,再在 ~/Downloads/nvidia/sdkm_downloads 目录中复用缓存,避免重复下载。

三、JetPack 版本选择

JetPack 版本与 Jetson 型号、L4T(Linux for Tegra)版本、CUDA 版本强绑定。选择时主要看三点:目标板型号是否被该 JetPack 支持、所需 CUDA/TensorRT 版本、以及是否需要长期支持。常见对应关系如下:

JetPackL4TCUDA典型适用
5.1.x35.x11.4Xavier / Orin 系列,稳定生产
6.036.x12.2Orin 系列,新特性尝鲜
4.6.x32.x10.2Nano / TX2 老平台

示例:若目标是 Orin NX 且需要 TensorRT 8.5 以上,选 JetPack 5.1.2 较稳妥;若要用 CUDA 12 的新算子,则选 JetPack 6.0。版本一旦确定,后续刷机、SDK 组件和示例代码都要保持一致,避免驱动与库版本错配。

四、进入刷机模式与烧录

Jetson 进入恢复模式(Recovery Mode)的方式因型号而异:Orin 系列通常先按住 Force Recovery 按钮,再短按 Reset,然后松开 Reset、保持 Recovery 约 2 秒后松开;Nano/TX2 则是按住 Recovery 后上电。主机执行 lsusb 应能看到 0955:7xxx NVIDIA Corp. 设备,这是判断是否成功进入恢复模式的关键依据。

烧录目标介质不同,操作路径也不同:

  • eMMC:直接由 SDK Manager 通过 USB 烧录,选择 “Jetson eMMC” 即可。
  • NVMe SSD:需先用 SDK Manager 把系统刷到 eMMC,再从 eMMC 启动后把根文件系统迁移到 NVMe,或使用 flash.sh 指定 -S 参数直接刷到 NVMe。
  • SD 卡:Nano、Orin Nano 等支持从 SD 卡启动的型号,可用 Etcher 把官方镜像写入 SD 卡,插卡后直接启动,无需 USB 刷机。

以 eMMC 刷机为例,SDK Manager 在 STEP 02 勾选 “Flash” 后会自动执行类似命令:

sudo ./flash.sh jetson-orin-nx-devkit mmcblk0p1

刷机过程中串口会持续输出日志,看到 Writing partition、Flashing bootloader 等字样说明正在写入;全部完成后板子会自动重启。

Jetson 首次系统烧录与启动验证链路 Ubuntu 主机 Ubuntu 20.04/22.04 SDK Manager 2.x USB 3.0 + 串口 USB Recovery Mode 按住 Recovery 短按 Reset lsusb 见 0955:7xxx flash.sh 烧录目标介质 eMMC NVMe SD 卡 JetPack 5.1.x / 6.0 首次启动验证 串口 115200 8N1 → 登录 → 检查系统 cat /etc/nv_tegra_release · nvidia-smi · lsblk 确认 L4T 版本、CUDA 可用、存储挂载正确 串口调试终端 USB-TTL: TX/RX/GND 115200 8N1 minicom / picocom 结果判断 成功:串口出现登录提示符,L4T 版本与所选 JetPack 一致,CUDA/TensorRT 可调用 失败:无 USB 设备 → 重进恢复模式;无串口输出 → 检查 TX/RX 交叉与波特率

五、串口调试终端连接

串口是 Jetson 首次启动时唯一可靠的观察窗口。接线时注意 USB-TTL 模块的 TX 接 Jetson 的 RX,RX 接 Jetson 的 TX,GND 共地,不要接 VCC。以 picocom 为例:

sudo picocom -b 115200 /dev/ttyUSB0

参数固定为 115200 波特率、8 数据位、无校验、1 停止位。上电后应能看到 U-Boot 和内核启动日志;如果全是乱码,多半是波特率不对或 TX/RX 接反;如果完全没有输出,先确认串口线是否被识别、GND 是否共地。

六、首次启动验证

系统启动到登录提示符后,用默认账号登录(JetPack 5.x 首次启动会引导创建用户)。随后执行几条关键检查命令:

cat /etc/nv_tegra_release
# 输出示例:R35 (release), REVISION: 4.1, GCID: ..., BOARD: t186ref

nvidia-smi
# 应显示 Jetson 型号、CUDA 版本、显存信息

lsblk
# 确认 eMMC / NVMe / SD 卡挂载点与容量

df -h
# 查看根文件系统剩余空间

判断标准很明确:/etc/nv_tegra_release 中的 L4T 版本要与所选 JetPack 对应(JetPack 5.1.2 对应 L4T 35.4.1);nvidia-smi 能正常输出说明 GPU 驱动和 CUDA 运行时已就绪;lsblk 能看到目标存储设备且根分区挂载正确,说明烧录介质选择无误。若 nvidia-smi 报错,通常是 CUDA 组件未随刷机一起安装,可在主机上重新用 SDK Manager 只勾选运行时组件补装。

刷机过程中不要断电或拔 USB 线,否则可能损坏 bootloader 导致板子无法启动。若已损坏,需重新进入恢复模式并完整刷写一次。

完成以上步骤后,Jetson 就具备了可用的 JetPack 系统、串口调试通道和基本开发组件,可以进入后续的交叉编译、外设适配与应用部署环节。