公司动态

Jetson Nano 边缘计算入门:从系统烧录到AI应用部署全流程避坑指南

📅 2026/7/28 10:39:43
Jetson Nano 边缘计算入门:从系统烧录到AI应用部署全流程避坑指南
1. 项目缘起为什么从Jetson Nano开始如果你和我一样对边缘计算、机器人或者嵌入式AI开发感兴趣那么Jetson Nano这个名字你一定不陌生。作为英伟达推出的入门级AI边缘计算平台它凭借相对亲民的价格和强大的CUDA生态成为了无数开发者、学生和创客踏入这个领域的第一块“敲门砖”。我最初选择它也是看中了其官方宣传的“开箱即用”和丰富的社区资源心想有英伟达背书跑个YOLO、部署个TensorRT模型应该不会太难吧然而现实很快就给我上了一课。从拿到那块小巧的开发板到成功点亮第一个AI推理Demo中间经历的曲折远超我的预期。这绝不是一个简单的“插电即用”过程而是一场充满了版本冲突、驱动缺失、环境配置和性能调优的“硬核”探险。网上能找到的教程很多但要么是过时的要么是语焉不详的“一键脚本”真正能帮你从零开始、理清脉络、避开所有坑的完整记录却很少。因此我决定把这段“踩坑”历程系统地记录下来这不仅仅是我的个人笔记更希望能成为后来者的一张“避坑地图”。本系列的第一集我们将聚焦在最基础也最让人头疼的环节系统烧录、基础环境搭建与第一次开机配置。别小看这些步骤它们直接决定了你后续所有开发工作的稳定性和效率。2. 开箱与硬件准备别急着上电拿到Jetson Nano开发板这里以4GB版本为例后先别急着接通电源。硬件上的几个小细节如果忽略可能会导致无法开机或者性能严重受限。2.1 核心供电选择Micro USB还是DC Barrel JackJetson Nano有两个电源接口一个是常见的Micro USBJ48另一个是圆口的DC Barrel JackJ25。官方文档和许多教程会告诉你Micro USB5V/2A供电只能用于“低功耗模式”而DC Barrel Jack5V/4A才能解锁“10W模式”获得完整的CPU和GPU性能。注意这里的“模式”切换不是一个软件开关而是由物理跳线帽J48旁边的“J48 Power Select”跳线决定的。如果你使用Micro USB供电跳线帽必须连接在“USB”一侧的引脚上如果使用DC Barrel Jack供电跳线帽必须连接在“J48”一侧的引脚上。很多新手开机没反应或者系统极卡第一步就应该检查这个跳线帽的位置是否正确。我个人强烈建议永远使用DC Barrel Jack配合5V/4A以上的电源适配器并将跳线帽设置在“J48”位置。Micro USB供电仅适用于绝对轻量级的测试任何涉及摄像头、GPU运算的任务都可能因供电不足导致系统重启。2.2 散热与外壳必要的投资Jetson Nano在满载运行时发热量不小尤其是GPU部分。裸板运行几分钟后手摸上去就会感到烫手。长期高温会触发降频导致性能下降甚至影响硬件寿命。因此一个带有主动散热风扇的外壳是必需品而不是装饰品。市面上有很多第三方散热方案选择时注意风扇的供电接口通常是板上的“FAN”引脚和噪音控制即可。2.3 存储介质SD卡的速度至关重要Jetson Nano没有内置eMMC系统完全运行在SD卡上。这意味着SD卡的读写速度直接决定了系统启动、软件安装、模型加载等一切I/O操作的性能。绝对不要使用手边闲置的、低速的Class 4或Class 10 SD卡。请至少选择UHS-I U3 / V30及以上规格的Micro SD卡容量建议32GB或64GB。A1/A2级别的应用性能等级也对随机读写有帮助。一张高速卡和一张低速卡在实际使用中的体验差异是天壤之别。3. 系统烧录从镜像下载到第一次启动这是踩坑的“重灾区”每一步都可能遇到问题。3.1 官方镜像的选择与下载前往英伟达官方网站的Jetson Nano下载页面你会发现有多个版本的SDK Manager和系统镜像。对于新手我建议绕开复杂的SDK Manager它更适合批量烧录和多板卡管理直接使用预烧录的系统镜像。找到“Jetson Nano Developer Kit SD Card Image”的下载链接通常会对应特定的JetPack版本如JetPack 4.6, 4.6.1等。关键决策点JetPack版本。JetPack是英伟达为Jetson系列打包的软件开发套件包含了操作系统Ubuntu、CUDA、cuDNN、TensorRT、OpenCV等所有核心组件。版本并非越新越好。你需要考虑你的项目所依赖的深度学习框架如PyTorch, TensorFlow是否有针对特定JetPack版本的预编译轮子wheel。例如早期一些框架对JetPack 4.4/4.5支持较好而新框架可能需要JetPack 4.6。在开始前最好先调研一下你目标工具的版本兼容性矩阵。我本次记录基于JetPack 4.6.1这是一个相对稳定且生态支持较广的版本。3.2 烧录工具与操作下载到的通常是一个压缩包如jetson-nano-sd-card-image.zip解压后得到一个.img文件。在Windows下推荐使用BalenaEtcher它界面简洁自动校验不易出错。在macOS或Linux下除了Etcher也可以使用dd命令但需要格外小心设备名如/dev/sdb不要选错否则会清空你的硬盘。烧录过程大约需要10-30分钟取决于你的SD卡和读卡器速度。烧录完成后不要急着弹出SD卡。在Windows下系统可能会提示你格式化SD卡因为Etcher烧录后SD卡会被分成多个Windows无法识别的分区如Linux的ext4分区。务必点击“取消”千万不要格式化3.3 首次启动与基础配置将烧录好的SD卡插入Jetson Nano连接显示器通过HDMI或DP、键盘鼠标最后接通电源。第一次启动会进行系统初始化这个过程比较慢请耐心等待。首先进入的是系统配置界面OOBE。这里有几个关键步骤语言和时区按需选择。用户名、密码、计算机名建议设置一个简单易记的密码后续通过SSH操作会频繁用到。磁盘分区选择“使用整个磁盘”即可。组件安装这一步会安装CUDA, cuDNN, TensorRT, OpenCV等核心组件。务必确保网络连接稳定整个过程可能需要半小时到一小时如果中途断网会导致组件安装不全后患无穷。安装完成后系统会自动重启进入Ubuntu桌面环境。恭喜你已经成功跨过了第一道门槛。4. 初始系统优化与必做设置进入桌面后先别急着写代码。进行以下几项优化能极大提升后续的开发体验。4.1 更换软件源默认的Ubuntu软件源服务器在国外更新和安装软件速度极慢。我们需要将其替换为国内镜像源如阿里云、清华源等。# 备份原文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 编辑源文件将http://ports.ubuntu.com替换为镜像地址 sudo nano /etc/apt/sources.list将文件内所有http://ports.ubuntu.com/ubuntu-ports/替换为https://mirrors.aliyun.com/ubuntu-ports/或https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/。然后更新软件列表sudo apt update4.2 扩展交换空间SwapJetson Nano 4GB版本的内存对于AI应用来说相当紧张。当物理内存不足时系统会使用硬盘上的交换空间。默认的交换空间2GB可能不够我们可以将其扩大。# 关闭当前交换文件 sudo swapoff /swapfile # 调整交换文件大小这里设置为4GB (4096MB) sudo fallocate -l 4G /swapfile # 设置正确的权限 sudo chmod 600 /swapfile # 将其格式化为交换分区 sudo mkswap /swapfile # 启用新的交换文件 sudo swapon /swapfile为了让修改永久生效还需要编辑/etc/fstab文件确保其中关于swap的行指向正确的文件通常是/swapfile。4.3 设置高性能模式如前所述确保你的电源跳线帽设置在“J48”使用DC电源然后在系统中开启最大性能模式。# 安装管理工具如果尚未安装 sudo apt install -y jetson-io # 设置最大性能模式10W sudo nvpmodel -m 0 # 查看当前模式 sudo nvpmodel -q模式0是最大性能模式10W模式1是低功耗模式5W。同时可以设置风扇为持续转动确保散热sudo sh -c echo 255 /sys/devices/pwm-fan/target_pwm4.4 安装基础开发工具安装一些后续开发必备的工具包sudo apt update sudo apt install -y \ python3-pip \ python3-dev \ python3-venv \ git \ curl \ wget \ htop \ vim对于Python包管理强烈建议使用虚拟环境避免污染系统Python环境。可以使用venvpython3 -m venv ~/myenv source ~/myenv/bin/activate # 之后安装的python包都会在这个独立环境中5. 核心组件验证CUDA, cuDNN, TensorRT系统装好了优化也做了现在需要验证英伟达的核心组件是否安装正确。这是后续所有AI应用的基础。5.1 验证CUDACUDA是英伟达GPU计算的基石。在终端输入nvcc -V如果安装正确你会看到CUDA的版本信息如10.2。同时也可以使用nvidia-smi这个命令会显示一个监控界面列出GPU型号Jetson Nano、驱动版本、CUDA版本以及当前的GPU使用情况。看到这个界面基本说明GPU驱动和CUDA运行时是正常的。5.2 验证cuDNNcuDNN是深度神经网络加速库。验证它需要查看头文件和库文件。通常JetPack会将其安装在/usr/include和/usr/lib/aarch64-linux-gnu下。# 查找cuDNN头文件 find /usr/include -name cudnn*.h # 查找cuDNN库文件 find /usr/lib/aarch64-linux-gnu -name libcudnn*更直接的验证方法是使用Python如果你安装了nvidia-pyindex中的cudnn包或者在C程序中包含头文件进行编译测试。对于大多数Python开发者只要后续能成功导入tensorrt或运行依赖cuDNN的框架如PyTorch就说明其工作正常。5.3 验证TensorRTTensorRT是英伟达的高性能深度学习推理SDK是Jetson的灵魂。验证TensorRT最直接的方式是检查其Python包。python3 -c import tensorrt; print(tensorrt.__version__)如果成功输出版本号如7.1.3恭喜你TensorRT安装成功。你也可以运行一个官方的示例来验证cd /usr/src/tensorrt/samples/sampleMNIST sudo make cd ../../bin/ ./sample_mnist如果能看到成功运行并输出推理结果说明TensorRT的编译器和运行时环境都是完好的。6. 第一个AI应用跑通Jetson Inference示例理论学习再多不如实际跑一个Demo。英伟达官方维护的jetson-inference项目是一个极佳的起点它封装了图像识别、目标检测、语义分割等常见任务的推理流程并且自带预训练模型。6.1 克隆与编译项目# 安装编译依赖 sudo apt install -y \ cmake \ libpython3-dev \ python3-numpy # 克隆项目建议在home目录下操作 cd ~ git clone --recursive https://github.com/dusty-nv/jetson-inference cd jetson-inference # 创建并进入构建目录 mkdir build cd build # 配置CMake。这里使用默认设置会下载一些预训练模型需要网络 cmake ../ # 开始编译这个过程比较耗时约30-60分钟 make -j$(nproc) # 安装将库文件和Python包安装到系统 sudo make install sudo ldconfig编译过程中CMake会提示你下载模型。如果网络不畅可能会导致下载失败。你可以选择跳过按Enter后续再手动下载或者耐心重试。6.2 运行图像识别Demo编译安装完成后最简单的方式是使用项目提供的Python脚本。# 激活你的Python虚拟环境如果你使用了的话 source ~/myenv/bin/activate # 运行一个对图片进行ImageNet分类的例子 cd ~/jetson-inference/python/examples python3 imagenet.py --modelresnet18 /path/to/your/image.jpg /path/to/output.jpg例如你可以用系统自带的图片python3 imagenet.py --modelresnet18 /usr/share/backgrounds/gnome/adwaita-day.jpg output.jpg程序会加载ResNet-18模型对图片进行推理并在终端输出识别出的类别及其置信度同时生成一张带有标签的输出图片。如果这一步成功了说明你的整个AI软件栈从驱动、CUDA、cuDNN到TensorRT和Python绑定已经全部打通。6.3 尝试实时摄像头检测Jetson Nano的强大之处在于实时处理。连接一个USB摄像头或CSI摄像头运行目标检测Demo# 使用SSD-Mobilenet-v2模型进行实时检测 python3 detectnet.py --modelssd-mobilenet-v2 csi://0 # 使用CSI摄像头 # 或者 python3 detectnet.py --modelssd-mobilenet-v2 /dev/video0 # 使用USB摄像头如果摄像头连接正确你应该会看到一个实时窗口画面中的物体如人、汽车、狗等会被框出并标注。第一次运行会加载模型稍慢一些后续帧率会稳定下来。这是你与Jetson Nano AI能力的第一次“实时对话”。7. 常见问题排查与解决思路即便按照步骤操作你也可能会遇到一些问题。这里汇总一些典型“坑点”及其解决思路。7.1 开机无显示或卡在Logo界面检查供电确认使用5V/4A以上电源跳线帽位置正确DC供电对应“J48”。检查SD卡重新烧录镜像确保使用Etcher等可靠工具SD卡质量过关。检查显示器尝试不同的HDMI线或显示器接口。有些显示器可能需要特定的分辨率/刷新率支持。7.2sudo apt update或安装软件失败网络问题确保网络连接正常特别是如果使用了代理需要在/etc/apt/apt.conf.d/中配置代理。软件源问题检查/etc/apt/sources.list文件中的镜像源地址是否正确可以尝试换一个源如从阿里云换到清华源。空间不足使用df -h命令查看根目录空间确保有足够空间至少2-3GB空闲进行系统更新。7.3 运行AI Demo时报错“CUDA error”或“TensorRT error”组件版本不匹配这是最棘手的问题。确保你使用的深度学习框架PyTorch/TensorFlow版本与JetPack中的CUDA、cuDNN版本兼容。对于JetPack 4.6.1CUDA 10.2需要寻找对应版本的框架轮子。模型格式问题jetson-inference项目使用的模型是特定的TensorRT序列化引擎.engine文件或ONNX格式。确保你使用的模型路径和格式正确。首次运行时会自动转换需要网络下载相关文件。内存不足运行htop命令查看内存和交换空间使用情况。如果物理内存和交换空间都接近耗尽程序会崩溃。尝试增大交换空间见4.2节或者使用更轻量级的模型。7.4 摄像头无法识别CSI摄像头确认摄像头排线插入方向正确蓝色一面通常朝向板子外侧并插紧。使用命令ls /dev/video*查看设备节点。USB摄像头同样使用ls /dev/video*查看。尝试不同的USB接口。有些USB3.0摄像头在USB2.0接口上可能工作不正常。GStreamer管道问题jetson-inference使用GStreamer处理视频流。CSI摄像头通常使用csi://0USB摄像头使用/dev/video0。如果报GStreamer相关错误尝试安装或重新安装GStreamer插件sudo apt install gstreamer1.0-tools gstreamer1.0-plugins-good。7.5 系统运行缓慢风扇狂转检查运行模式使用sudo nvpmodel -q确认当前运行在模式0MAX-N。监控资源使用htop和nvidia-smi监控CPU、内存和GPU使用率找出占用资源的进程。散热问题触摸散热片是否过热。确保风扇正常工作并且外壳通风良好。可以考虑在/etc/rc.local中添加开机启动风扇全速的命令。走到这里你的Jetson Nano应该已经是一个可以稳定运行基础AI应用的开发平台了。这个过程看似繁琐但每一步的“坑”都有其背后的原因——电源管理、存储性能、系统依赖、组件兼容性。把这些基础打牢后续在部署自定义模型、进行多传感器融合、优化推理性能时才能避免更多复合型的问题。第一集的踩坑记录就到这里下一篇我们将深入另一个“深水区”在Jetson Nano上为特定版本的PyTorch或TensorFlow编译安装依赖以及将自定义的ONNX模型转换为TensorRT引擎并部署。那将是真正将Jetson Nano用于自己项目的开始坑只会更多但也更有趣。