2. Jetson开发环境与系统烧录

拿到一块Jetson模组或整机(如Jetson Orin Nano、Orin NX、AGX Orin),第一件事不是写代码,而是把“地基”打好:装对系统、装全SDK、验证加速库可用、打通远程通道。这一节围绕JetPack SDK的组成、SDK Manager刷机流程、Ubuntu基础配置、CUDA/cuDNN/TensorRT验证,以及SSH/VNC远程开发配置展开,目标是让开发板从“裸机”变成一台可远程编码、可跑GPU推理的Linux工作站。

一、JetPack SDK由什么组成

JetPack不是单一软件,而是NVIDIA为Jetson打包的一整套软件栈,可以理解为“BSP + 加速库 + 开发工具”的组合。以JetPack 6.x(对应L4T 36.x)为例,其核心组成如下:

  • Jetson Linux(L4T):底层BSP,包含U-Boot引导、Linux内核、设备树、根文件系统(基于Ubuntu 22.04)。它决定硬件能否被正确识别。
  • CUDA Toolkit:GPU并行计算基础,提供nvcc编译器、运行时库和cuBLAS/cuFFT等数学库。
  • cuDNN:深度神经网络加速库,为卷积、池化、归一化等算子提供高度优化实现。
  • TensorRT:推理优化与运行时,把训练好的模型(ONNX等)编译成针对本机GPU的engine,显著降低延迟。
  • 多媒体API:包括V4L2、GStreamer插件(nvarguscamerasrc、nvv4l2decoder等)、硬件编解码(NVDEC/NVENC),是视频分析的关键。
  • 开发工具:Nsight Systems/Compute、CUDA-GDB、DeepStream SDK、Jetson Platform Services等。

理解这套分层很重要:L4T决定“能不能跑”,CUDA/cuDNN/TensorRT决定“跑得快不快”,多媒体API决定“视频进得来、出得去”。

二、用SDK Manager刷机

刷机有两种主流方式:一是用NVIDIA SDK Manager(图形化,适合首次刷机),二是用flash.sh脚本(命令行,适合批量或定制)。这里以SDK Manager为例。

准备工作:一台运行Ubuntu 20.04/22.04的x86主机(虚拟机需开启USB直通)、一根USB Type-C数据线、Jetson进入Force Recovery模式(按住RECOVERY键再上电,或短接REC后复位)。主机执行lsusb,若看到0955:7xxx NVIDIA Corp.即表示进入成功。

# 在x86主机上安装SDK Manager
sudo apt install ./sdkmanager_2.x.x_amd64.deb
sdkmanager

# 选择模组型号(如Jetson Orin Nano 8GB)
# 勾选 JetPack 6.x,选择 "Flash" 目标
# 输入Jetson的Ubuntu用户名/密码
# 开始刷机,约20~40分钟

SDK Manager会先下载约10~20GB的镜像与包,然后写入QSPI/存储,再通过SSH把CUDA、cuDNN、TensorRT等组件安装到Jetson上。刷机完成后Jetson自动重启,进入Ubuntu首次配置向导。若中途失败,常见原因是USB线质量差、主机USB口供电不足或未真正进入Recovery模式。

三、Ubuntu系统基础配置

首次进入系统后,建议按顺序完成以下配置,避免后续踩坑:

  1. 更换软件源:默认源在国外,可换成国内镜像(如清华、中科大)加速apt。
  2. 更新系统:sudo apt update && sudo apt full-upgrade。
  3. 设置电源模式:sudo nvpmodel -m 0(最大性能),sudo jetson_clocks(锁定最高频率)。
  4. 扩展交换空间:Jetson内存有限,编译大模型时建议增加swap或zram。
  5. 安装常用工具:sudo apt install python3-pip git cmake vim htop。
若使用NVMe SSD,建议把根文件系统迁移到SSD,可显著提升编译和模型加载速度。可用sudo ./tools/copy-rootfs-to-nvme.sh(部分版本提供)或手动分区迁移。

四、CUDA/cuDNN/TensorRT环境验证

刷机后这些库通常已装好,但必须验证版本与可用性。Jetson上的CUDA路径一般在/usr/local/cuda,需把其加入环境变量:

echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

nvcc --version          # 查看CUDA编译器版本
cat /usr/local/cuda/version.json
dpkg -l | grep cudnn    # 查看cuDNN版本
dpkg -l | grep tensorrt # 查看TensorRT版本

更可靠的验证是跑一个真实推理。下面用TensorRT自带样例或Python接口检查:

python3 -c "import tensorrt as trt; print(trt.__version__)"
python3 -c "import cuda; print('pycuda ok')"  # 若装了pycuda

# 运行TensorRT样例(若已安装samples)
/usr/src/tensorrt/bin/trtexec --onnx=model.onnx --saveEngine=model.engine

判断标准:nvcc --version能输出版本号;trt.__version__与JetPack文档一致;trtexec能成功生成engine并打印推理耗时。若报“libcudnn.so not found”,多为LD_LIBRARY_PATH未包含cuDNN路径。

JetPack 软件栈与验证链路 应用层 DeepStream / 视频分析应用 / Python推理脚本 推理与加速层 TensorRT · cuDNN · CUDA Toolkit · 多媒体API(NVDEC/NVENC) 系统层 Jetson Linux (L4T) · U-Boot · Linux内核 · 设备树 · Ubuntu 22.04 硬件层 Jetson模组 (Orin系列) · GPU · CPU · NVMe / eMMC 环境验证顺序 nvcc --version CUDA可用 dpkg -l | grep cudnn cuDNN版本 import tensorrt TensorRT可用 trtexec 生成engine 端到端推理验证

五、远程开发:SSH与VNC配置

Jetson通常放在机器人或摄像头旁,不可能一直接显示器。远程开发是常态,SSH用于命令行与文件传输,VNC用于图形界面。

SSH配置:Ubuntu默认已装openssh-server。确认服务运行:

sudo systemctl status ssh
sudo systemctl enable ssh
ip addr show          # 查看Jetson的IP,如192.168.1.50
# 在主机上:
ssh nvidia@192.168.1.50

建议配置免密登录:主机执行ssh-keygen -t rsa,再用ssh-copy-id nvidia@192.168.1.50把公钥推送到Jetson。之后可直接ssh jetson(在~/.ssh/config中配置别名)。

VNC配置:Jetson自带vino或可安装tigervnc。以vino为例:

sudo apt install vino
# 在Jetson图形界面:Settings → Sharing → Screen Sharing 开启
# 或命令行设置密码:
gsettings set org.gnome.Vino vnc-password $(echo -n "yourpass" | base64)
# 主机用VNC Viewer连接 192.168.1.50:5900
VNC在Jetson上会占用GPU资源,做高帧率视频推理时建议关闭VNC,改用SSH + 无头模式运行。若必须用图形界面,可考虑x11vnc并限制分辨率。

六、一份可执行的刷机与验证检查清单

阶段检查项命令/方法通过标准
刷机前进入Recovery模式lsusb出现0955:7xxx
刷机后系统启动串口/HDMI进入Ubuntu桌面
基础配置电源模式sudo nvpmodel -m 0返回最大性能模式
CUDA编译器nvcc --version输出版本号
cuDNN库版本dpkg -l | grep cudnn版本与JetPack一致
TensorRTPython导入import tensorrt无报错
推理engine生成trtexec --onnx=...成功并打印耗时
远程SSHssh nvidia@IP免密登录成功
远程VNCVNC Viewer连接看到桌面

完成以上步骤后,Jetson就具备了完整的开发条件:系统稳定、加速库可用、远程通道畅通。后续的视频解码、模型部署、DeepStream管线搭建,都建立在这一环境之上。建议把这份检查清单保存下来,每次拿到新板子或重刷系统后逐项核对,能省去大量排查时间。