3. 开发环境搭建:系统烧录、Python环境配置与常见踩坑

说实话,环境搭建这一步,看着简单,其实最容易劝退人。我见过太多朋友,板子买回来兴冲冲的,结果卡在刷机或者装包上,一卡就是两三天。咱们这节课,我就把我在 Jetson 上折腾了无数遍的经验,一次性给你讲透。

3.1 系统烧录:JetPack 还是 Ubuntu?

先回答一个最基础的问题:用 JetPack 还是自己装 Ubuntu?

我的建议是:直接用 JetPack。

JetPack 是 NVIDIA 官方出的 SDK 管理器,里面不光有 Ubuntu 系统,还帮你把 CUDA、cuDNN、TensorRT 这些深度学习库都打包好了。你想想看,自己一个个装,版本匹配问题就够你喝一壶的。我在项目中就吃过这个亏——自己装 Ubuntu 然后手动配 CUDA,结果 TensorRT 死活不认,折腾了两天才发现是 CUDA 版本差了一个小版本号。

注意:JetPack 版本和 Jetson 硬件型号是绑定的。比如 Jetson Orin 系列,建议用 JetPack 5.x 以上。老一点的 Xavier NX,用 JetPack 4.6 比较稳。

烧录流程其实不复杂,我简单梳理一下:

  1. 在 PC 上安装 SDK Manager(Ubuntu 系统,虚拟机也行)
  2. 用 USB 线连接 Jetson 开发板,进入恢复模式
  3. SDK Manager 会自动识别硬件,选择你要安装的组件
  4. 等它跑完,大概 30-60 分钟,看网速

嗯,这里要注意:烧录过程中千万别拔线,也别让电脑休眠。我有个同事就是中途去吃饭,电脑自动锁屏了,结果烧录失败,板子变砖,还得重新来一遍。

3.2 Python 环境配置:为什么我选 Miniconda

系统装好了,接下来就是 Python 环境。你可能会问:Jetson 自带的 Python 不能用吗?

能用,但不推荐。因为咱们做 AI 分析,项目多了,依赖冲突是家常便饭。这个项目要 TensorRT 8.x,那个项目要 7.x,你怎么办?

所以我个人习惯用 Miniconda。 它比 Anaconda 轻量,但虚拟环境功能一点不少。

安装步骤很简单:

# 下载 Miniconda 安装脚本(注意选 aarch64 版本)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh

# 运行安装
bash Miniconda3-latest-Linux-aarch64.sh

# 安装完后,创建虚拟环境
conda create -n jetson_env python=3.8
conda activate jetson_env
小技巧:Jetson 是 ARM 架构,很多 Python 包没有预编译的 wheel 文件。建议用 conda install 而不是 pip,因为 conda 会帮你处理依赖。实在不行再用 pip。

我曾经在装 numpy 的时候踩过坑——pip install 直接报错,说找不到合适的版本。后来换成 conda install numpy,一秒搞定。说白了,conda 在 ARM 平台上的生态比 pip 成熟得多。

3.3 安装 OpenCV 与 TensorRT

这两个是咱们视频流分析的核心依赖。OpenCV 负责图像处理,TensorRT 负责模型加速。

OpenCV 安装

Jetson 上装 OpenCV,我推荐两种方式:

方式 优点 缺点
apt 安装 简单,一行命令 版本较老,不支持 GPU 加速
源码编译 可定制,支持 CUDA 编译时间长,约 1-2 小时

我个人建议:用 apt 安装做快速验证,用源码编译做生产环境。

apt 安装:

sudo apt update
sudo apt install python3-opencv

源码编译的话,命令比较多,我贴个核心步骤:

# 安装依赖
sudo apt install build-essential cmake git pkg-config
sudo apt install libjpeg-dev libtiff-dev libpng-dev

# 下载 OpenCV 源码
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

# 编译(记得开启 CUDA 支持)
cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D WITH_CUDA=ON \
      -D WITH_CUDNN=ON \
      ..
注意:源码编译时,内存不够容易 OOM。建议先关掉桌面环境,或者增加 swap 空间。我一般会加 4GB swap,稳得很。

TensorRT 安装

如果你用的是 JetPack,TensorRT 其实已经装好了。验证一下:

python3 -c "import tensorrt; print(tensorrt.__version__)"

如果没装,或者想装特定版本,可以去 NVIDIA 官网下载 deb 包。但我还是那句话:用 JetPack 最省心。

TensorRT 的 Python 接口安装:

# 进入虚拟环境
conda activate jetson_env

# 安装 TensorRT Python 包
pip install tensorrt

嗯,这里有个坑:pip 安装的 tensorrt 可能和系统里的 TensorRT 库版本不匹配。我建议直接用 JetPack 自带的 Python 包,路径一般在:

/usr/lib/python3.8/dist-packages/tensorrt

把它复制到你的 conda 环境里,或者直接软链接过去,省事。

3.4 常见踩坑记录

这部分是我最想跟你分享的。环境搭建的坑,我基本都踩过一遍。

坑1:USB 烧录时设备不识别

我曾经折腾了一下午,Jetson 插上电脑就是没反应。后来发现是 USB 线的问题——有些线只能充电,不能传数据。换了一根带数据功能的线,立马识别。

坑2:conda 创建环境超慢

Jetson 的网络一般,下载包很慢。我的解决办法是:先用 conda create --offline 创建空环境,然后手动装包。或者换个国内镜像源,速度能快不少。

坑3:OpenCV 编译报错 "CUDA not found"

这个我遇到过好几次。原因通常是 CUDA 路径没设置对。检查一下:

echo $CUDA_HOME
# 如果为空,手动设置
export CUDA_HOME=/usr/local/cuda
坑4:TensorRT 导入报错 "libnvinfer.so cannot open"

说白了就是动态库路径没加。运行前执行:

export LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH

最好把这行加到 ~/.bashrc 里,一劳永逸。

好了,环境搭建这部分就到这里。你跟着走一遍,应该不会出大问题。如果真遇到什么奇怪的报错,别慌——大概率是版本匹配问题,去 NVIDIA 开发者论坛搜一下,基本都有答案。

下一节咱们就开始写第一个视频流分析程序了,到时候 TensorRT 就派上用场了。