2、开发环境搭建:Jetson Nano与树莓派的系统烧录、初始配置、SSH远程连接、Python与CUDA环境验证
边缘计算AI开发与传统服务器端开发最大的差异在于:目标硬件资源受限、架构异构(ARM CPU + GPU/NPU)、部署环境多样。无论是NVIDIA Jetson Nano还是树莓派4B,其开发流程都遵循“系统烧录 → 初始配置 → 远程访问 → 运行环境验证”的固定路径。本章将围绕这两款主流边缘设备,从零开始搭建一套可复用的AI开发环境,重点解决SD卡烧录、系统初始化、SSH安全连接、Python虚拟环境以及CUDA/OpenCV等核心组件的验证问题。通过本章学习,你将获得一个经过验证的、可直接运行深度学习推理任务的开发基座。
上图展示了本章的核心路径:Jetson Nano与树莓派虽然硬件架构不同,但环境搭建的逻辑高度一致。Jetson Nano拥有完整的CUDA GPU生态,适合运行PyTorch/TensorFlow等深度学习框架;树莓派则依赖CPU与VideoCore GPU(通常仅用于图形输出),更适合轻量级推理或作为传感器数据采集节点。下面我们将分模块详细展开。
2.1 系统烧录:从镜像到可启动SD卡
核心原理
系统烧录的本质是将操作系统镜像文件(.img)逐字节写入SD卡,并确保引导分区(boot)与根文件系统(rootfs)正确布局。Jetson Nano使用NVIDIA提供的JetPack SDK镜像,其内部已包含Linux内核、CUDA、cuDNN、TensorRT等预编译组件;树莓派则使用官方Raspberry Pi OS或Ubuntu Server镜像,内核与用户空间分离,GPU驱动以固件形式加载。
操作流程
- 准备工具:16GB以上SD卡(推荐32GB Class 10/A2)、读卡器、balenaEtcher(跨平台烧录工具)或dd命令(Linux/macOS)。
- 下载镜像:Jetson Nano选择“Jetson Nano Developer Kit SD Card Image”版本(JetPack 4.6.1);树莓派选择“Raspberry Pi OS with desktop”或“Ubuntu Server 22.04 LTS (64-bit)”。
- 烧录操作:打开balenaEtcher → 选择镜像 → 选择SD卡 → 点击Flash。烧录完成后,系统会自动弹出/卸载分区。
- 验证烧录:重新插入SD卡,检查分区是否包含boot(FAT32)和rootfs(ext4)两个分区。
案例拆解:烧录失败排查
某学员使用64GB SD卡烧录Jetson Nano镜像后,上电无显示。排查过程:① 检查电源适配器(需5V/4A DC圆口供电,Micro USB供电不足);② 重新烧录并校验SHA256哈希值;③ 发现SD卡为假冒扩容卡(实际容量仅8GB),更换正品SanDisk Extreme Pro后正常启动。此案例说明,烧录环节的硬件质量与电源稳定性是首要排查点。
| 对比项 | Jetson Nano | 树莓派4B |
|---|---|---|
| 推荐镜像 | JetPack 4.6.1 | Raspberry Pi OS (64-bit) / Ubuntu Server 22.04 |
| 最小SD卡容量 | 16GB(建议32GB) | 8GB(建议16GB) |
| 默认用户名 | nvidia / nvidia(首次启动强制修改) | pi / raspberry(或安装时设置) |
| GPU驱动 | 预装CUDA 10.2 | 无CUDA,仅VideoCore IV |
| 烧录工具 | balenaEtcher / dd | Raspberry Pi Imager / balenaEtcher |
2.2 初始配置:系统激活与基础优化
核心原理
初始配置的目标是让系统进入“可用且安全”的状态。Jetson Nano首次启动会进入Ubuntu初始化向导(设置语言、用户名、密码、WiFi);树莓派则通过raspi-config工具完成扩展文件系统、开启SSH、设置GPU内存等操作。关键优化点包括:电源模式切换(Jetson Nano支持5W/10W模式,影响CPU频率与GPU性能)、文件系统扩展(利用SD卡全部空间)、交换分区调整(缓解内存不足)。
操作流程
- Jetson Nano:连接HDMI显示器与USB键鼠 → 上电 → 完成Ubuntu初始化 → 打开终端执行
sudo apt update && sudo apt upgrade→ 使用nvpmodel -m 0切换到10W模式(性能优先)。 - 树莓派:烧录镜像后,在SD卡boot分区创建空文件
ssh(开启SSH)和wpa_supplicant.conf(配置WiFi)→ 上电 → 通过SSH连接后运行sudo raspi-config→ 选择“Advanced Options”扩展文件系统 → 设置GPU内存为128MB(用于OpenCV硬件加速)。
常见误区
误区一:跳过系统更新直接安装Python包,导致依赖冲突。误区二:Jetson Nano使用apt install python3-pip后,pip默认安装到系统环境,污染全局Python。正确做法是使用虚拟环境(见2.4节)。误区三:树莓派未扩展文件系统,导致根分区空间不足(仅剩几百MB),安装大型库时失败。
2.3 SSH远程连接:无头模式开发
核心原理
SSH(Secure Shell)通过加密通道提供远程命令行访问。边缘设备通常部署在无显示器环境,SSH成为最核心的开发入口。Jetson Nano与树莓派默认安装OpenSSH Server,但树莓派需手动开启(创建ssh文件或raspi-config)。为提高安全性,推荐使用密钥认证替代密码登录。
操作流程
- 获取IP地址:在路由器管理界面查看设备IP,或使用
nmap -sn 192.168.1.0/24扫描局域网。 - 首次连接:
ssh nvidia@192.168.1.100(Jetson)或ssh pi@192.168.1.101(树莓派),输入密码。 - 配置密钥认证:在本地电脑生成密钥
ssh-keygen -t ed25519→ 复制公钥ssh-copy-id nvidia@192.168.1.100→ 之后免密登录。 - 固定IP:编辑
/etc/dhcpcd.conf(树莓派)或通过Netplan(Jetson)设置静态IP,避免DHCP分配变化。
systemctl status ssh);③ 检查防火墙(sudo ufw status);④ 若使用WiFi,确认信号强度(iwconfig)。最终发现是路由器AP隔离功能阻止了设备间通信,关闭后解决。
| 配置项 | Jetson Nano | 树莓派 |
|---|---|---|
| SSH服务 | 默认开启 | 需手动开启 |
| 默认端口 | 22 | 22 |
| 密钥算法 | RSA/Ed25519 | RSA/Ed25519 |
| 图形化远程 | VNC(需安装vino) | VNC(raspi-config开启) |
2.4 Python与CUDA环境验证
核心原理
Python是边缘AI开发的主要语言。Jetson Nano预装Python 3.6.9,且JetPack已集成CUDA 10.2、cuDNN 8.2、TensorRT 8.2,但需手动配置环境变量。树莓派则需自行安装Python 3.9+及OpenCV等库。验证CUDA环境的核心是确认nvcc编译器可用、GPU设备能被PyTorch识别、以及矩阵运算能调用GPU加速。
操作流程
- Python虚拟环境:
python3 -m venv ~/venv/ai→source ~/venv/ai/bin/activate→pip install --upgrade pip。 - Jetson CUDA验证:
nvcc -V查看版本 →cd /usr/local/cuda/samples/1_Utilities/deviceQuery && sudo make && ./deviceQuery查看GPU信息。 - PyTorch GPU测试:
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))",输出True和“NVIDIA Tegra X1”即成功。 - 树莓派加速验证:安装OpenCV
pip install opencv-python→ 测试python -c "import cv2; print(cv2.getBuildInformation())"查看是否启用NEON/VFPV3优化。
pip install torch==1.10.0),不可直接使用PyPI官方包。树莓派安装TensorFlow需选择tensorflow-cpu或使用tflite-runtime。
案例拆解:PyTorch GPU验证失败
某项目在Jetson Nano上运行 torch.cuda.is_available() 返回False。分析:① 检查 nvcc -V 正常,说明CUDA工具链存在;② 检查PyTorch版本,发现误装了x86_64架构的wheel包;③ 卸载后重新安装 torch-1.10.0-cp36-cp36m-linux_aarch64.whl,问题解决。此案例强调:ARM64架构必须匹配对应wheel包,且Python版本(cp36)需严格对应。
| 验证项 | 命令 | 预期结果 |
|---|---|---|
| CUDA编译器 | nvcc -V | Cuda compilation tools, release 10.2 |
| GPU设备 | ./deviceQuery | Detected 1 CUDA Capable device(s) |
| PyTorch GPU | torch.cuda.is_available() | True |
| OpenCV版本 | cv2.__version__ | 4.5.5(Jetson) / 4.6.0(树莓派) |
总结复盘
环境搭建的核心教训是:先验证硬件,再配置软件;先跑通最小示例,再扩展功能。Jetson Nano的CUDA环境虽然预装,但环境变量(export PATH=/usr/local/cuda/bin:$PATH)和库路径(export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH)需写入~/.bashrc。树莓派虽然没有CUDA,但通过优化编译参数(-O3 -march=armv8-a+simd)可提升CPU推理性能。建议读者在完成本章后,创建一个“环境验证脚本”(check_env.sh),将上述验证命令整合,便于后续快速诊断。