Jetson Nano从零配置指南:避坑、优化与AI环境搭建

1. 为什么你的Jetson Nano需要一次“干净”的配置?

如果你刚拿到一块Jetson Nano开发板,或者因为之前的系统被各种实验搞得一团糟,准备从头再来,那么“从零开始”这四个字,可能比你想象的要复杂一点。这不是简单的“烧录镜像、开机、完事”。Jetson Nano作为一款边缘AI计算设备,其软件栈深度绑定于NVIDIA的JetPack SDK,从系统内核、驱动到CUDA、cuDNN、TensorRT等AI计算库,是一个高度定制化的生态。一个“干净”且“正确”的基础配置,是后续所有开发、部署工作稳定性的基石。

我见过太多新手,包括几年前的我自己,在第一步就踩坑:烧录了不匹配的镜像导致无法启动;系统源没换,apt update慢如蜗牛还经常失败;Python环境混乱,pip和apt安装的包冲突;甚至因为没做基础优化,连摄像头都打不开。这些问题都会在后续开发中集中爆发,让你在调试模型性能时,还要分心去解决本该在第一天就搞定的事情。

所以,这篇内容的目的,就是充当你的“装机清单”和“避坑指南”。我会带你走一遍从物理组装、系统烧录,到基础环境配置、性能优化的完整流程。这不是官方文档的复述,而是结合了我多次重装、为团队部署多台设备后,总结出的最稳妥、最高效的路径。我们目标明确:搭建一个稳定、高效、随时可以投入生产的Jetson Nano基础系统。

2. 启程前的核心准备:镜像、工具与硬件确认

在动手之前,有三样东西必须准备好,这能避免你做到一半才发现缺东少西的尴尬。

2.1 镜像选择:JetPack版本是灵魂

Jetson Nano的系统镜像不是普通的Ubuntu,而是NVIDIA官方基于Ubuntu 18.04或20.04定制的,并打包了对应版本的JetPack。JetPack是一个SDK,包含了操作系统、CUDA、cuDNN、TensorRT、VisionWorks等一堆东西。

  • 如何选择?访问NVIDIA官方Jetson下载中心。对于Jetson Nano,主流且稳定的版本是JetPack 4.6(基于Ubuntu 18.04)和更新的JetPack 5.x系列(基于Ubuntu 20.04)。我的建议是:除非你的项目依赖明确要求JetPack 5.x的特性(如对更新的CUDA、TensorRT版本有硬性需求),否则优先选择JetPack 4.6.1。原因很简单:4.6版本经过长时间考验,社区资料、解决方案最丰富,兼容性最好。很多经典的AI模型和项目教程都是基于这个环境写的,踩坑的概率最低。
  • 下载什么?你会下载到一个扩展名为.img的系统镜像文件,大小在6GB左右。请确保下载完整,并核对MD5或SHA256校验值。

2.2 烧录工具:SD卡是唯一推荐

Jetson Nano的官方系统载体是Micro SD卡。虽然有人尝试用USB SSD启动以获得更好性能,但对于“从零开始”和绝大多数应用场景,一张高速的SD卡是最简单可靠的选择。

  • SD卡选型:这是影响系统流畅度的关键硬件之一。最低要求Class 10,强烈推荐UHS-I U3 / V30及以上规格的卡,容量建议32GB起步,64GB或128GB更从容。品牌上,SanDisk Extreme或Samsung EVO Plus系列是经过验证的可靠选择。一张慢速卡会让系统操作、软件安装、编译过程变得极其痛苦。
  • 烧录软件:在Windows/Mac/Linux上,都使用balenaEtcher。它免费、开源、操作极其简单(选择镜像、选择SD卡驱动器、点击烧录),且能自动校验,比老牌的dd命令或Win32DiskImager对新手更友好。务必以管理员/root权限运行。

2.3 硬件连接与首次上电

烧录好SD卡后,将其插入Jetson Nano的卡槽。接下来是硬件连接:

  1. 供电:Jetson Nano有两种供电模式,通过一个跳帽(J48)选择。
    • Micro-USB供电(5V 2A):仅适用于轻负载,比如只跑命令行。一旦启动图形界面或运行AI程序,很可能因供电不足导致系统不稳定、重启。不推荐作为主力供电方式。
    • 桶形接口供电(5V 4A):这是标准且推荐的方式。你需要一个5V/4A的DC电源适配器,接口规格是5.5mm x 2.1mm。供电不足是Jetson Nano最常见的问题之一,务必使用足额功率的电源。
  2. 跳帽设置:确保J48跳帽连接在引脚2和3上(即选择桶形供电模式)。如果你使用载板(如官方开发者套件载板),这个跳帽通常已经接好。
  3. 外设连接:首次启动建议连接HDMI显示器、USB键盘和鼠标。网络连接可以通过板载的千兆以太网口,或者配置Wi-Fi(如果需要,需准备兼容的USB无线网卡,如官方推荐的ASUS USB-AC53 Nano)。
  4. 上电:连接好所有外设后,最后插入电源。你会看到绿色电源指示灯亮起,系统开始启动。

注意:首次启动会进行文件系统扩展,这个过程需要几分钟,屏幕上会有提示,请耐心等待,不要断电。

3. 首次启动后的系统初始化与基础设置

当你第一次看到Ubuntu的登录界面时(JetPack 4.6是Ubuntu 18.04的GNOME桌面),恭喜你,最基础的一步成功了。但接下来的设置才是让这台设备“好用”的关键。

3.1 完成系统向导与用户创建

按照屏幕提示,完成语言、时区、键盘布局的设置,并创建一个非root的普通用户(例如jetson)。记住你设置的用户名和密码。

3.2 至关重要的第一步:更换系统软件源

默认的软件源服务器在国外,apt updateapt install的速度会非常慢,甚至经常超时失败。更换为国内镜像源是必须操作。

  1. 备份原始源列表:
    sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
  2. 编辑源列表文件。这里以清华大学源为例(适用于Ubuntu 18.04):
    sudo nano /etc/apt/sources.list
  3. 将文件内容全部删除,替换为以下内容:
    deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
    • bionic对应 Ubuntu 18.04 的代号。
    • 注意URL中是ubuntu-ports,这是为ARM架构准备的源,普通PC的ubuntu源不适用。
  4. 保存并退出(在nano中按Ctrl+X, 然后按Y, 最后按Enter)。
  5. 同样,也需要更新CUDA的源(如果存在)。通常JetPack镜像的CUDA源也需要替换。查找并编辑/etc/apt/sources.list.d目录下与nvidiacuda相关的.list文件,将其中的developer.download.nvidia.com替换为国内镜像,例如中科大的镜像:mirrors.ustc.edu.cn/...。具体镜像地址请查阅对应镜像站的帮助页面。
  6. 更新软件包列表:
    sudo apt update
    如果速度飞快,没有报错,说明换源成功。

3.3 系统更新与基础工具安装

在换源成功后,进行一次完整的系统升级,并安装一些后续开发必备的工具。

# 更新软件包列表(刚才已做,可再做一次) sudo apt update # 升级所有已安装的包到最新版本(这是一个较长的过程) sudo apt full-upgrade -y # 安装一些基础工具 sudo apt install -y curl wget git vim htop net-tools screen tree # curl/wget: 网络下载工具 # git: 版本控制,必备 # vim: 文本编辑器(可根据喜好换nano) # htop: 交互式进程查看器,比top更好用 # net-tools: 包含ifconfig等网络工具 # screen: 会话管理,防止远程连接断开导致任务终止 # tree: 以树状图列出目录内容

完成升级后,可以重启一下系统:sudo reboot

4. 核心开发环境配置:Python、虚拟环境与包管理

Jetson Nano的系统中预装了Python 2.7和Python 3.6(JetPack 4.6)。我们的所有工作都应该基于Python 3。直接使用系统的python3pip3安装包,很容易导致依赖冲突,甚至破坏系统关键组件。因此,使用虚拟环境是绝对最佳实践

4.1 安装并配置Python虚拟环境工具

我们使用venv模块,它是Python 3.3+自带的,轻量且无需额外安装(但需要安装对应的包)。

# 确保python3-venv包已安装 sudo apt install -y python3-pip python3-venv

4.2 创建并激活专属的虚拟环境

我习惯在用户主目录下创建一个venvs文件夹来集中管理所有虚拟环境。

# 创建存放虚拟环境的目录 mkdir -p ~/venvs # 为你的AI项目创建一个虚拟环境,例如叫 `nano` python3 -m venv ~/venvs/nano

激活虚拟环境是使用它的关键一步。激活后,你的终端提示符通常会发生变化,前面会显示环境名(如(nano))。

# 激活虚拟环境 source ~/venvs/nano/bin/activate

激活后,你输入的pythonpip命令将指向虚拟环境内的版本,与系统全局环境完全隔离。

为了方便,可以将激活命令写入~/.bashrc文件,这样每次打开终端自动激活(但有时你可能需要切换环境,所以这一步可选)。

echo “source ~/venvs/nano/bin/activate” >> ~/.bashrc # 然后执行 source ~/.bashrc 立即生效,或者新开一个终端

4.3 配置pip国内镜像源

在虚拟环境中,pip安装包同样需要换源以加速。

# 确保已激活虚拟环境 # 创建pip配置目录和文件 mkdir -p ~/.pip nano ~/.pip/pip.conf

pip.conf文件中输入以下内容(以阿里云镜像为例):

[global] index-url = https://mirrors.aliyun.com/pypi/simple/ trusted-host = mirrors.aliyun.com

保存退出。现在在虚拟环境内使用pip install,速度会快很多。

4.4 安装基础的Python科学计算与AI包

在虚拟环境中,安装一些最基础的包。注意:numpy,scipy这类涉及数值计算的包,在ARM架构上从源码编译非常耗时(可能几个小时)。幸运的是,有社区维护的预编译轮子(wheels)。

  1. 首先升级pip和setuptools:

    pip install --upgrade pip setuptools
  2. 安装预编译的NumPy等包:搜索 “jetson nano python wheels” 可以找到例如jetson-stats社区提供的资源。一个常用的来源是Qengineering的GitHub页面,他们为Jetson系列提供了很多预编译包。你可以直接下载对应的.whl文件然后用pip安装。

    • 更简单的方法是,先尝试安装一个轻量级的OpenCV(如果不需要全部功能),它通常会带一个兼容的numpy。
    # 安装一个基础版本的OpenCV(不包含GUI和高阶模块,但核心功能在) sudo apt install -y python3-opencv # 检查是否安装了numpy python -c “import numpy; print(numpy.__version__)”

    如果系统apt安装的opencv带来了numpy,那么虚拟环境里可能已经可用。为了环境纯净,我们更希望所有包都在虚拟环境内。一个折中方案是,先利用系统包,后续如果遇到版本问题,再寻找预编译轮子。

  3. 安装AI框架:TensorFlow和PyTorch都有为Jetson Nano(ARM64架构)预编译的版本。切勿直接使用pip install tensorflowpip install torch,这会导致从源码编译,几乎必然失败。

    • TensorFlow:NVIDIA官方在JetPack中提供了TensorFlow。通常可以通过apt安装:
      sudo apt install -y libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran sudo apt install -y python3-pip sudo pip3 install -U pip testresources setuptools # 以下是JetPack 4.6对应的TensorFlow 1.x版本,如需2.x请查阅NVIDIA官方文档 sudo pip3 install -U numpy==1.19.4 future==0.18.2 mock==3.0.5 h5py==2.10.0 keras_preprocessing==1.1.2 keras_applications==1.0.8 enum34 futures==3.1.1 protobuf pybind11 sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v46 ‘tensorflow<2’
      请注意,官方提供的通常是TensorFlow 1.x。对于TensorFlow 2.x,你需要找到对应JetPack版本的预编译轮子,或者使用NVIDIA提供的TensorFlow容器。
    • PyTorch:PyTorch为Jetson提供了官方预编译版本。访问PyTorch for Jetson的官方GitHub页面,找到与你JetPack版本(如torch-1.10.0-cp36-cp36m-linux_aarch64.whl对应JetPack 4.6, Python 3.6)匹配的wheel文件,下载后用pip安装。
      # 示例命令,具体文件名和URL请查阅最新官方文档 wget https://nvidia.box.com/shared/static/xxx...xxx/torch-1.10.0-cp36-cp36m-linux_aarch64.whl pip install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
      安装完torch后,通常需要单独安装torchvision,同样需要找对应版本的预编译轮子。

这个过程可能是整个配置中最繁琐的一环,需要耐心和仔细核对版本。核心原则:绝不从源码编译,只安装针对Jetson ARM64架构的预编译包。

5. 性能优化与系统调优实战

Jetson Nano的算力和内存有限,默认设置可能无法发挥其最佳性能,甚至影响稳定性。以下几项调优是“必选项”。

5.1 交换空间(Swap)扩展

Nano只有4GB内存(或2GB版本),运行稍大的模型就容易内存不足(OOM)。增加交换空间相当于在SD卡上划出一部分作为虚拟内存。

  1. 查看现有交换空间:free -h
  2. 禁用现有交换文件(如果有):sudo swapoff /swapfile
  3. 删除旧文件(如果有):sudo rm /swapfile
  4. 创建新的交换文件(建议4GB-8GB):
    # 创建8GB的交换文件(count=8192, 单位是MB块) sudo dd if=/dev/zero of=/swapfile bs=1M count=8192 # 设置正确的权限 sudo chmod 600 /swapfile # 将其格式化为交换文件 sudo mkswap /swapfile # 启用交换文件 sudo swapon /swapfile
  5. 让系统启动时自动挂载交换文件:
    sudo sh -c ‘echo “/swapfile swap swap defaults 0 0” >> /etc/fstab’
  6. 再次使用free -h确认交换空间已生效。

注意:交换文件在SD卡上,频繁读写会影响SD卡寿命和系统响应速度。这是用寿命换容量的权衡。对于长期高负载任务,建议优化模型或考虑使用带eMMC的版本。

5.2 电源模式设置:最大化CPU性能

Jetson Nano有两种电源模式(通过nvpmodel工具管理):

  • 模式0 (MAX-N):4个CPU核心全部以最大频率(1.43 GHz)运行,功耗约10W。这是性能模式。
  • 模式1 (5W):仅2个CPU核心在线,频率受限,功耗约5W。这是省电模式。

对于开发和学习,强烈建议设置为模式0,以获得完整的计算能力。

# 查看当前模式 sudo nvpmodel -q # 切换到最大性能模式(模式0) sudo nvpmodel -m 0 # 同时,需要设置风扇策略(如果是有源散热风扇)为“主动”冷却,以应对更高的发热 sudo jetson_clocks

jetson_clocks脚本会锁定CPU和GPU到最高频率,并设置主动冷却。你可以将其加入开机启动脚本。

5.3 禁用图形界面以释放资源(可选但推荐)

如果你主要通过SSH远程访问Nano,或者运行无界面的AI服务,那么禁用桌面图形环境(GUI)可以节省出可观的内存和CPU资源给计算任务。

# 禁用图形界面,切换到多用户文本模式 sudo systemctl set-default multi-user.target # 如果想重新启用图形界面 # sudo systemctl set-default graphical.target

执行禁用命令后,重启生效。重启后你将进入命令行登录界面。这对于部署在角落做推理服务的Nano非常有用。

5.4 安装系统监控工具:jetson-stats

这是一个社区开发的非常棒的工具包,叫jetson-stats,它提供了jtop这个神器。

# 安装 sudo -H pip install jetson-stats # 重启后,或运行 sudo systemctl restart jetson_stats.service

安装后,在终端输入jtop,你会得到一个类似htop但专为Jetson设计的监控界面,可以实时查看CPU/GPU/内存使用率、频率、温度、功耗,以及所有JetPack组件的版本信息。这是调试和性能分析的必备工具。

6. 外设与IO配置:让Nano“看得见,连得上”

基础系统跑起来了,现在让它能连接摄像头和网络。

6.1 CSI摄像头配置

Jetson Nano有专门的CSI接口连接树莓派式摄像头(如Raspberry Pi Camera Module V2)。使用前需要启用。

  1. 硬件连接:确保摄像头排线金手指面向散热器方向插入CSI接口,并锁紧卡扣。
  2. 启用摄像头支持:
    # 检查摄像头是否被识别(在连接摄像头并开机后执行) ls /dev/video* # 你应该能看到 /dev/video0 等设备
  3. 测试摄像头:使用nvgstcapture工具进行快速测试。
    # 预览摄像头画面(按 ‘q’ 退出) nvgstcapture-1.0 --orientation=2 # 拍摄一张照片 nvgstcapture-1.0 --orientation=2 --automate --capture-auto
    如果能看到预览画面,说明摄像头驱动工作正常。对于更复杂的应用,你可以使用OpenCV的GStreamer后端或jetson-utils库来捕获CSI摄像头数据。

6.2 USB摄像头测试

USB摄像头即插即用的情况较多。使用v4l2-ctl工具检查。

# 列出所有视频设备 v4l2-ctl --list-devices # 查看某个设备(如video1)的详细信息 v4l2-ctl -d /dev/video1 --all

在Python中,可以使用OpenCV的cv2.VideoCapture(0)cv2.VideoCapture(1)来尝试打开不同的设备索引。

6.3 配置Wi-Fi(如果需要)

如果你使用的是官方推荐的ASUS USB-AC53 Nano等兼容网卡,通常驱动已内置。通过图形界面(如果GUI启用)连接Wi-Fi是最简单的。在命令行下,可以使用nmclinmtui工具。

# 启动文本用户界面的网络管理器 sudo nmtui

在界面中选择“Activate a connection”,找到你的Wi-Fi SSID,输入密码连接即可。

7. 验证与收尾:运行你的第一个AI示例

配置的最后,让我们用一个简单的例子验证整个环境是否工作正常。我们使用一个轻量级的、无需训练直接推理的示例。

7.1 使用TensorRT运行一个预训练模型

NVIDIA在JetPack中提供了许多示例。我们找一个图像分类的例子。

# 进入示例目录(路径可能因JetPack版本略有不同) cd /usr/src/tensorrt/samples/sampleMNIST # 编译示例(这需要一些时间) sudo make # 运行示例(这个例子是手写数字识别,需要下载数据集,会自动进行) cd ../../bin/ ./sample_mnist

如果编译和运行成功,你会看到一系列日志,最后显示分类结果和推理时间。这表明你的CUDA、TensorRT环境基本正常。

7.2 一个简单的OpenCV摄像头测试脚本

在虚拟环境中,确保安装了opencv-python-headless(无GUI的OpenCV,更轻量)。

pip install opencv-python-headless

创建一个Python脚本test_camera.py

import cv2 import sys # 尝试打开摄像头,0通常是CSI或第一个USB摄像头 cap = cv2.VideoCapture(0) if not cap.isOpened(): print(“无法打开摄像头”) sys.exit() print(“摄像头已打开,按 ‘q’ 键退出预览”) while True: ret, frame = cap.read() if not ret: print(“无法获取帧”) break # 在窗口中显示图像 cv2.imshow(‘Camera Test’, frame) # 按下 ‘q’ 键退出循环 if cv2.waitKey(1) & 0xFF == ord(‘q’): break # 释放摄像头并关闭所有窗口 cap.release() cv2.destroyAllWindows() print(“测试完成”)

运行这个脚本:python test_camera.py。如果能看到摄像头画面,说明你的摄像头和Python OpenCV环境工作正常。

走到这一步,你的Jetson Nano已经从一个裸板,变成了一个具备完整AI开发能力、经过基础优化的稳定平台。这个过程里最深的体会是,在嵌入式AI开发中,“配环境”本身就是一项核心技能。它要求你对硬件特性、系统依赖、软件版本有清晰的认知。很多问题(比如包装不上、性能差)的根源,往往都能追溯到最初配置时某个被忽略的细节。把这份“装机清单”保存好,下次重装时,你会感谢现在耐心走完全程的自己。接下来,你就可以放心地在这个坚实的基础上,去构建和部署你的AI应用了。