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系统基础配置
首次进入系统后,建议按顺序完成以下配置,避免后续踩坑:
- 更换软件源:默认源在国外,可换成国内镜像(如清华、中科大)加速apt。
- 更新系统:
sudo apt update && sudo apt full-upgrade。 - 设置电源模式:
sudo nvpmodel -m 0(最大性能),sudo jetson_clocks(锁定最高频率)。 - 扩展交换空间:Jetson内存有限,编译大模型时建议增加swap或zram。
- 安装常用工具:
sudo apt install python3-pip git cmake vim htop。
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路径。
五、远程开发: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
六、一份可执行的刷机与验证检查清单
| 阶段 | 检查项 | 命令/方法 | 通过标准 |
|---|---|---|---|
| 刷机前 | 进入Recovery模式 | lsusb | 出现0955:7xxx |
| 刷机后 | 系统启动 | 串口/HDMI | 进入Ubuntu桌面 |
| 基础配置 | 电源模式 | sudo nvpmodel -m 0 | 返回最大性能模式 |
| CUDA | 编译器 | nvcc --version | 输出版本号 |
| cuDNN | 库版本 | dpkg -l | grep cudnn | 版本与JetPack一致 |
| TensorRT | Python导入 | import tensorrt | 无报错 |
| 推理 | engine生成 | trtexec --onnx=... | 成功并打印耗时 |
| 远程 | SSH | ssh nvidia@IP | 免密登录成功 |
| 远程 | VNC | VNC Viewer连接 | 看到桌面 |
完成以上步骤后,Jetson就具备了完整的开发条件:系统稳定、加速库可用、远程通道畅通。后续的视频解码、模型部署、DeepStream管线搭建,都建立在这一环境之上。建议把这份检查清单保存下来,每次拿到新板子或重刷系统后逐项核对,能省去大量排查时间。