3、开发环境搭建:NVIDIA SDK Manager安装、JetPack刷机、交叉编译工具链配置、SSH远程调试
好,咱们正式开始动手了。这一章我带你把开发环境从头到尾搭一遍。说实话,环境搭建这事儿,看着琐碎,但一步错步步错。我在项目里见过太多人卡在刷机或者工具链上,一卡就是半天。咱们稳一点,把每一步都走扎实。
3.1 NVIDIA SDK Manager 安装
SDK Manager 是 NVIDIA 官方的一站式工具。刷系统、装库、配环境,全用它。说白了,它就是 Jetson 开发的「总开关」。
下载与安装
去 NVIDIA 官网下载 SDK Manager。注意,它只支持 Ubuntu 18.04 或 20.04 宿主机。我个人习惯用 Ubuntu 20.04,稳定一些。下载下来是个 .deb 包,安装命令很简单:
sudo apt update
sudo apt install ./sdkmanager_[version].deb
装完之后,终端里敲 sdkmanager 就能启动。第一次启动会让你登录 NVIDIA 开发者账号。嗯,这里要注意,账号得提前注册好,不然卡在登录界面很尴尬。
3.2 JetPack 刷机
JetPack 是什么?它包含了 L4T(Linux for Tegra)内核、CUDA、cuDNN、TensorRT 等全套软件栈。刷机,就是把这套东西烧录到 Jetson 设备上。
刷机流程
启动 SDK Manager,选择你的 Jetson 型号(比如 Xavier NX 或 Orin Nano)。然后勾选需要的组件。我个人建议,第一次刷机把「全部组件」都勾上,省得后面缺东西再补。
接下来,把 Jetson 设备用 USB 线连接到宿主机。按住设备上的 Force Recovery 按钮,再按一下 Reset 键,然后松开 Recovery 键。这时候设备就进入烧录模式了。
在 SDK Manager 里点击「Flash」,它会自动下载 JetPack 并开始烧录。整个过程大概 20-40 分钟,取决于你的网速和设备型号。
刷机后的验证
刷完机,设备会自动重启。用 HDMI 接上显示器,你会看到 Ubuntu 桌面。打开终端,检查一下关键组件:
nvcc --version # 查看 CUDA 版本
jtop # 查看系统状态(需要安装 jtop)
如果 nvcc 能正常输出版本号,说明 CUDA 装好了。jtop 是个好东西,我每次调试都开着它看 CPU/GPU 占用。
3.3 交叉编译工具链配置
为什么要交叉编译?因为 Jetson 设备本身性能有限,直接在板子上编译大型项目(比如 TensorRT 模型)会慢得让人抓狂。在宿主机上编译好,再把二进制文件传到板子上跑,效率高得多。
安装交叉编译工具链
SDK Manager 在刷机时,其实已经帮你装好了交叉编译工具链。路径一般在:
/usr/local/ JetPack_[version]/tools/
里面有个 gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu 文件夹,这就是交叉编译器。把它加到 PATH 里:
export PATH=/usr/local/JetPack_5.1.2/tools/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin:$PATH
验证一下:
aarch64-linux-gnu-gcc --version
能输出版本号,就说明工具链配好了。
strings 命令检查库的版本号。
CMake 交叉编译配置
我习惯用 CMake 管理项目。写一个 toolchain.cmake 文件:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
set(CMAKE_FIND_ROOT_PATH /usr/local/JetPack_5.1.2/tools)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
编译时这样用:
cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ..
make
生成的二进制文件就是 ARM64 架构的,直接拷到 Jetson 上就能跑。
3.4 SSH 远程调试
环境搭好了,总不能每次都插着显示器和键盘操作吧?SSH 远程调试才是正经干活的方式。
配置 Jetson 的 SSH 服务
Jetson 刷完机默认就开了 SSH。你只需要知道它的 IP 地址。在板子上执行:
ifconfig
找到 eth0 或 wlan0 的 IP。然后在宿主机上:
ssh nvidia@[Jetson_IP]
默认密码是 nvidia。第一次登录会让你改密码,改完就能用了。
免密登录配置
每次输密码太烦了。配置 SSH 密钥:
ssh-keygen -t rsa -b 4096
ssh-copy-id nvidia@[Jetson_IP]
之后登录就不用密码了。我每次新装系统第一件事就是配这个,省时间。
远程调试技巧
我常用的调试方式有两种:
- VS Code Remote-SSH: 在宿主机上装 VS Code 的 Remote-SSH 插件,直接连接到 Jetson。可以在板子上编辑代码、运行调试器,体验和本地开发一样。
- rsync 同步代码: 写个脚本,用 rsync 把编译好的二进制文件同步到板子上。比如:
rsync -avz --progress ./build/my_app nvidia@[Jetson_IP]:~/projects/
然后 SSH 过去运行:
ssh nvidia@[Jetson_IP] "~/projects/my_app"
deploy.sh 脚本,把编译、同步、运行三步合在一起。每次改完代码,跑一下脚本就能看到效果,效率翻倍。
性能监控
远程调试时,别忘了监控板子的状态。用 jtop 或者 tegrastats:
ssh nvidia@[Jetson_IP] "tegrastats"
这个命令会实时显示 CPU、GPU、内存、温度等信息。我调试模型推理时,一定会开着它,看看 GPU 占用率是不是跑满了。
小结
这一章的内容,说白了就是三件事:刷机、配工具链、连 SSH。每一步都有坑,但按我的经验,只要照着流程走,基本不会出大问题。环境搭好了,后面咱们才能真正开始写代码、调模型。
下一章,我会带你写第一个 CUDA 程序,在 Jetson 上跑起来。到时候你就知道,前面这些折腾都是值得的。