第二章:开发环境搭建——让 Jetson 真正跑起来
说实话,很多初学者在 AI 芯片开发上栽跟头,不是算法不会写,而是环境没搭好。我见过太多人花了两三天装驱动、配工具链,最后连个 Hello World 都跑不起来。嗯,这一章我们就来把这关过了。
我个人习惯把环境搭建分成四步:装 JetPack、配交叉编译链、设 SSH、跑验证程序。每一步都不难,但顺序错了就容易出问题。你想想看,底层驱动没装好,上层工具链再折腾也是白费力气。
2.1 安装 JetPack SDK
JetPack 是什么?说白了就是 NVIDIA 为 Jetson 系列芯片准备的一整套开发工具包。它包含了操作系统镜像、CUDA、cuDNN、TensorRT 等核心组件。我刚开始接触 Jetson 时,以为只要装个 Ubuntu 就能用,结果发现 GPU 加速根本跑不起来——因为没装 JetPack 里的专用驱动。
安装方式有两种:
- SDK Manager 方式(推荐):在 x86 主机上运行,图形化界面,自动下载和烧录
- 手动刷机方式:下载镜像后用命令行烧录到 SD 卡或 eMMC
我个人推荐用 SDK Manager,省心。步骤如下:
- 在 x86 主机上下载并安装 NVIDIA SDK Manager
- 用 USB 线连接 Jetson 设备到主机(注意要用数据线,不是充电线)
- 将 Jetson 置于强制恢复模式:按住 RECOVERY 键,再按一下 RESET,保持 RECOVERY 键 2 秒后松开
- 在 SDK Manager 中选择对应的 Jetson 型号和 JetPack 版本
- 勾选需要安装的组件(建议全选,省得后面补装)
- 点击安装,等待约 30-60 分钟
安装完成后,用 jtop 命令检查一下:
# 安装 jtop(如果没装的话)
sudo pip3 install jetson-stats
# 运行 jtop
jtop
你会看到 JetPack 版本、CUDA 版本、CPU/GPU 占用率等信息。如果能看到这些,说明 JetPack 装好了。
2.2 配置交叉编译工具链
为什么要交叉编译?因为 Jetson 的 ARM 架构性能有限,直接在它上面编译大型项目(比如 TensorRT 的 demo)会慢得让人崩溃。我试过在 Jetson Nano 上编译 OpenCV,整整等了三个小时。所以,我们通常在 x86 主机上编译,然后把二进制文件传到 Jetson 上运行。
交叉编译工具链的配置步骤如下:
- 在 x86 主机上下载 L4T 交叉编译工具链(与你的 JetPack 版本对应)
- 解压到
/opt目录下 - 设置环境变量
# 解压工具链
sudo tar -xvf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz -C /opt
# 设置环境变量(建议写入 ~/.bashrc)
export CROSS_COMPILE=/opt/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export LD=${CROSS_COMPILE}ld
export AR=${CROSS_COMPILE}ar
# 验证
aarch64-linux-gnu-gcc --version
如果能看到版本信息,说明工具链配置成功。这里有个小技巧:我习惯把环境变量写在 ~/.bashrc 里,这样每次打开终端就不用重新设置了。
-DCMAKE_TOOLCHAIN_FILE 指定。
2.3 设置 SSH 远程开发
SSH 是远程开发的标配。你想想看,每次都要插显示器和键盘去操作 Jetson,多麻烦。我一般把 Jetson 放在机柜里,通过 SSH 远程连接,既方便又整洁。
设置步骤:
- 确保 Jetson 和主机在同一个局域网内
- 在 Jetson 上开启 SSH 服务
- 获取 Jetson 的 IP 地址
- 从主机 SSH 连接
# 在 Jetson 上开启 SSH
sudo systemctl enable ssh
sudo systemctl start ssh
# 查看 IP 地址
ifconfig
# 或者
ip addr show
# 在主机上连接(假设 Jetson IP 是 192.168.1.100)
ssh nvidia@192.168.1.100
默认密码是 nvidia。第一次连接会提示确认指纹,输入 yes 即可。
passwd 命令修改密码,或者配置 SSH 密钥登录。
配置 SSH 密钥登录(更安全,也更方便):
# 在主机上生成密钥(如果还没有)
ssh-keygen -t rsa -b 4096
# 将公钥复制到 Jetson
ssh-copy-id nvidia@192.168.1.100
# 现在可以直接登录,不需要密码了
ssh nvidia@192.168.1.100
2.4 验证环境:运行 Hello World 程序
环境搭好了,总得跑个程序验证一下。我习惯用 CUDA 的 Hello World,因为它能同时验证编译工具链和 GPU 驱动是否正常。
在 Jetson 上创建一个测试文件:
// hello.cu
#include <stdio.h>
__global__ void hello_kernel() {
printf("Hello from GPU block %d, thread %d\n", blockIdx.x, threadIdx.x);
}
int main() {
printf("Hello from CPU\n");
// 启动 GPU kernel
hello_kernel<<<2, 4>>>();
// 等待 GPU 执行完成
cudaDeviceSynchronize();
return 0;
}
编译并运行:
# 编译
nvcc -o hello hello.cu
# 运行
./hello
如果输出类似下面的内容,说明环境完全正常:
Hello from CPU
Hello from GPU block 0, thread 0
Hello from GPU block 0, thread 1
Hello from GPU block 0, thread 2
Hello from GPU block 0, thread 3
Hello from GPU block 1, thread 0
Hello from GPU block 1, thread 1
Hello from GPU block 1, thread 2
Hello from GPU block 1, thread 3
注意看,GPU 的线程是并行执行的,所以输出顺序可能不一样。这是正常现象。
- JetPack 安装成功(jtop 能看到版本信息)
- 交叉编译工具链配置成功(aarch64-linux-gnu-gcc 能运行)
- SSH 远程连接正常(能通过 SSH 登录 Jetson)
- CUDA 程序能编译并运行(Hello World 输出正确)
知识体系总览
下面这张图概括了本章的核心内容,你可以把它当作一个检查清单:
环境搭建这件事,说白了就是一次性的体力活。但别小看它,基础打好了,后面的大模型部署才能顺风顺水。我个人建议你把每一步都走一遍,不要偷懒。尤其是交叉编译工具链,很多人觉得麻烦就跳过了,结果后面编译大型项目时叫苦不迭。
好了,环境搭好了,接下来就可以真正开始搞大模型部署了。
公众号:蓝海资料掘金营,微信deep3321