1. 为什么你的Jetson Nano镜像烧录总失败?先搞懂这几件事

嘿,朋友们,我是老陈,在AI和边缘计算这块折腾了十多年了。今天咱们不聊那些高大上的模型训练,就聊点最基础也最让人头疼的——给Jetson Nano烧录Ubuntu 18.04系统镜像。我见过太多新手,兴致勃勃地买回这块开发板,结果第一步“装系统”就卡了好几天,热情直接被浇灭一半。网上的教程五花八门,有的步骤不全,有的环境没说清,跟着做就像开盲盒,成功全靠运气。

所以,我决定结合自己踩过的无数个坑,给你写一份超详细的避坑指南。咱们这次聚焦一个特别常见的场景:在Windows电脑上,通过虚拟机来给Jetson Nano烧录系统。为什么用虚拟机?因为很多朋友手边没有多余的显示器、键盘鼠标,用虚拟机是最经济、最方便的方案,但恰恰是虚拟机环境,坑也最多。别担心,我会把每一步的原理、可能遇到的问题以及我的“土办法”都告诉你,目标就一个:让你一次成功,把宝贵的精力留给后面更有趣的深度学习开发。

首先,你得明白Jetson Nano烧录和普通电脑装系统有啥不同。它不像用U盘给PC装Windows那么简单。Jetson Nano的烧录,本质上是通过USB线,让你的电脑(或虚拟机)识别到板子处于一种特殊的“恢复模式”,然后像给手机刷机一样,把完整的系统镜像“推送”到板子的eMMC存储或SD卡里。这个过程涉及到电脑主机、虚拟机软件、Ubuntu系统、Jetson Nano板子四者之间的协同,任何一个环节没对接好,就会报错。常见的“卡住”点包括:虚拟机没正确捕获USB设备、镜像文件下载不完整、U盘格式不对、或者漏装了几个关键的工具包。咱们接下来就一步步拆解,把这些地雷一个个排掉。

2. 战前准备:搞定镜像、工具和虚拟机

工欲善其事,必先利其器。准备工作做得好,烧录就成功了一半。这一部分咱们把需要的所有“弹药”备齐。

2.1 获取正确的系统镜像:官方源与备用方案

这是第一步,也是关键一步。镜像文件不对,后面所有操作都是白费劲。Jetson Nano的官方镜像可以在英伟达的开发者网站找到,但说实话,对于国内用户,从官网下载可能速度很慢,甚至中断。所以,我们通常有两条路:

  1. 官方渠道(推荐有耐心或需要最新版的用户):访问英伟达Jetson Nano的官方下载页面。你需要注册一个英伟达开发者账号,然后根据指引下载对应版本的“Jetson Nano Developer Kit SD Card Image”。这个镜像是包含了Ubuntu 18.04和所有必要驱动、CUDA、cuDNN等深度学习环境的完整包,大小在12GB左右。下载时务必核对文件校验码(如MD5或SHA256),确保下载过程没有出错。
  2. 可靠的第三方镜像源(适合追求效率的新手):很多国内的开发板代理商或技术社区会提供镜像的国内网盘备份。就像原始文章里提到的,从亚博智能这样的供应商页面获取百度网盘链接,下载速度会快很多。这里有个重要提醒:一定要从你购买开发板的供应商或信誉良好的大型技术社区获取镜像,避免镜像被篡改或内置恶意软件。下载后,同样建议核对一下文件大小是否与官方描述一致(通常是一个.img或.img.xz的压缩文件)。

以我自己的经验,第一次尝试时,我强烈建议使用供应商提供的、经过验证的镜像。先确保能成功烧录并启动,建立起信心。等整个流程跑通后,你再尝试从官方下载最新镜像也不迟。把下载好的.img.xz文件放在你电脑上一个容易找到的路径,比如D:\Jetson_Nano,记住这个位置。

2.2 制作启动U盘:别小看格式化

接下来,我们需要一个至少16GB容量的U盘,用来制作“烧录引导盘”。注意,这个U盘不是最终系统安装的位置(系统是直接灌进板子自带的eMMC或SD卡的),它只是一个“安装工具盘”。

在Windows下,我们通常使用balenaEtcher或Rufus这类工具来把.img镜像写入U盘。但在这之前,有一个至关重要的步骤:彻底清理U盘。很多烧录失败,就是因为U盘里存在隐藏分区或之前的格式不对。

我的操作流程是这样的:

  1. 将U盘插入Windows电脑。
  2. 右键点击“此电脑” -> “管理” -> “磁盘管理”。在这里找到你的U盘,看清楚盘符和容量,别选错了。
  3. 右键点击U盘对应的所有分区(可能是一个,也可能是多个),选择“删除卷”,直到整个U盘变成一个黑色的“未分配”空间。
  4. 现在打开balenaEtcher。这个工具界面简洁,不易出错。点击“Select image”,选择你下载好的.img或解压后的.img文件。然后“Select target”,选中你的U盘。最后点击“Flash!”。
  5. 等待写入完成,期间不要拔插U盘。完成后,Etcher会进行校验,确保写入无误。

这个过程看似简单,但“磁盘管理”里删除所有分区这一步很多人会忽略。如果U盘之前做过Windows启动盘,会残留一个EFI分区,不删除干净会导致后续虚拟机识别或板子引导出问题。所以,请务必确保U盘在写入前是完整的“未分配”状态。

2.3 搭建虚拟机环境:VMware与Ubuntu的配置要点

因为我们没有多余的显示设备,所以要在Windows上用虚拟机跑一个Ubuntu系统,在这个Ubuntu系统里运行烧录工具。这里我以VMware Workstation Player(个人免费版)为例。

  1. 安装VMware:去VMware官网下载Workstation Player,安装过程很简单,一路下一步即可。
  2. 准备Ubuntu 18.04桌面版镜像:你需要一个x86版本的Ubuntu 18.04 ISO文件。为什么是18.04?因为Jetson Nano官方镜像基于18.04,我们在x86电脑上用同版本系统做烧录,环境兼容性最好。你可以从Ubuntu官网或国内镜像站下载。
  3. 创建虚拟机:打开VMware,创建新虚拟机。选择“典型”配置,在安装来源处,指向你下载的Ubuntu 18.04 ISO文件。给虚拟机起个名字,比如“Jetson-Flasher”。设置用户名密码(记住它,后面要用)。指定虚拟机磁盘大小,建议至少分配40GB,因为烧录过程中需要缓存一些大型文件。最后点击完成,VMware就会开始自动安装Ubuntu。
  4. 安装VMware Tools(关键!):Ubuntu安装完成后,第一件事就是在VMware菜单栏点击“虚拟机” -> “安装VMware Tools”。这会在Ubuntu桌面弹出一个光盘图标。打开它,把里面的.tar.gz压缩包复制到桌面(或Downloads文件夹),右键解压。打开终端,进入解压后的目录(例如cd ~/Desktop/vmware-tools-distrib),然后执行sudo ./vmware-install.pl。安装过程中,所有提示都直接按回车选择默认选项即可。安装完成后重启虚拟机。这一步至关重要,它能极大改善虚拟机的性能,并且确保USB设备能稳定地从主机传递到虚拟机。

至此,你的“烧录工作台”——一个纯净的Ubuntu 18.04虚拟机就准备好了。接下来,我们要在这个虚拟系统里,安装英伟达官方的烧录工具。

3. 在虚拟机中安装并配置烧录工具

现在,我们进入了虚拟的Ubuntu系统。接下来的操作都在这个系统的终端(Terminal)里进行。别怕命令行,我会把每条命令是干什么的都解释清楚。

3.1 安装SDK Manager:英伟达的官方利器

英伟达为Jetson系列产品提供了统一的烧录和管理工具,叫做SDK Manager。它就像一个集成的控制中心,既能下载镜像、驱动和深度学习套件,也能执行烧录。

  1. 获取安装包:打开虚拟机里的浏览器,访问英伟达官网的SDK Manager下载页面。选择适用于Ubuntu 18.04的.deb安装包。如果你在虚拟机里下载慢,也可以在宿主机Windows上下好,然后通过VMware的共享文件夹或者直接拖拽文件的方式,把安装包传进虚拟机。
  2. 安装依赖和SDK Manager:打开终端,首先更新软件包列表并安装一些基础依赖:
    sudo apt update
    sudo apt upgrade -y
    sudo apt install -y libgconf-2-4 net-tools
    
    然后,进入你存放.deb文件的目录,执行安装(假设文件名叫sdkmanager_1.9.3-10899_amd64.deb):
    sudo apt install ./sdkmanager_1.9.3-10899_amd64.deb
    
    如果遇到依赖问题,可以尝试用sudo dpkg -i命令安装,再用sudo apt --fix-broken install修复依赖。
  3. 启动SDK Manager:安装完成后,你可以在应用菜单里找到“NVIDIA SDK Manager”,或者直接在终端输入sdkmanager启动它。第一次启动会要求你用英伟达开发者账号登录。如果你没有,需要去官网注册一个,这是使用官方工具的必要步骤。

3.2 关键一步:配置虚拟机USB连接

这是整个流程中最容易出错、也最需要理解的一环。我们的目标是:让虚拟机独占连接Jetson Nano的USB线,并且能正确识别处于恢复模式的板子。

  1. 连接前的板子状态:确保你的Jetson Nano没有插SD卡,没有连接电源。找到板子上的“FC REC”跳线帽(通常在40针GPIO排针旁边),用跳线帽短接这两个针脚。这个操作是让板子上电后直接进入“强制恢复模式”。
  2. 虚拟机USB设置:在VMware软件界面,确保你的Ubuntu虚拟机处于关机状态(不是休眠)。点击虚拟机的设置,找到“USB控制器”选项。确保“USB兼容性”选择了USB3.1(如果不行再试USB3.0或2.0),并且勾选上“显示所有USB输入设备”。这个设置是为了让虚拟机有权限接管所有插入的USB设备。
  3. 连接板子:用一根Micro-USB数据线(注意是数据线,不是只能充电的线),一端连接Jetson Nano的Micro-USB口(靠近HDMI口的那个),另一端连接你的Windows电脑主机。
  4. 上电并捕获设备:现在,给Jetson Nano接上电源(桶形电源或Micro-USB供电都可以)。此时,Windows可能会提示发现新设备“APX”之类的。不要管Windows的提示。迅速切换到VMware软件,在顶部菜单栏点击“虚拟机” -> “可移动设备”。你应该会看到一个名为“NVIDIA Corp.”或“APX”的设备。点击它,选择“连接(断开与主机的连接)”。如果连接成功,这个设备项前面会打上一个勾。
  5. 在虚拟机内验证:启动你的Ubuntu虚拟机。进入系统后,打开终端,输入命令lsusb。如果一切顺利,你会在输出列表中看到一行包含“NVIDIA Corp.”字样的设备。这证明虚拟机已经成功识别到了处于恢复模式的Jetson Nano。如果没看到,回到上一步,在虚拟机开机状态下,再次尝试从“可移动设备”菜单里连接。

这一步需要一点耐心和反复尝试。有时候需要拔插几次USB线,或者重启一下虚拟机。核心要点就是:让虚拟机在开机状态下,独占连接Jetson Nano的USB设备。

4. 执行烧录:详解SDK Manager每一步

好了,硬件连接搞定,工具也装好了,现在可以开始正式的烧录流程了。打开虚拟机里的SDK Manager,跟着我的步骤走。

4.1 登录与目标选择

首次使用SDK Manager,它会引导你登录英伟达账号。登录后,来到主界面。在“Target Hardware”下拉菜单中,选择“Jetson Nano”。在“Target Operating System”中,选择“JetPack 4.6”(这是对应Ubuntu 18.04的一个长期支持版本,具体版本号可能更新,选最新的稳定版即可)。下面的“Host Machine”保持默认,因为我们的烧录操作就是在当前这个Ubuntu虚拟机(Host)上进行的。

这里有个重要选择:在安装选项里,你会看到两个勾选框:“Jetson OS”和“Jetson SDK Components”。对于第一次烧录,我建议只勾选“Jetson OS”。这意味着我们只烧录最基本的操作系统和驱动。深度学习环境(CUDA, cuDNN, TensorRT等)可以等系统成功启动后,再通过SDK Manager或者apt命令单独安装。这样做的好处是,烧录过程更快,出错的概率更低。毕竟,我们的首要目标是让板子先“亮起来”。

4.2 下载与安装模式

点击“Continue”,进入下一步。这里SDK Manager会检查网络并列出将要下载的组件。因为我们只选了OS,所以这里主要就是一个系统镜像。如果网络通畅,它会开始自动下载。如果下载慢或失败,你可以手动中断,然后使用我们在2.1节准备好的、从网盘下载的镜像文件。

如何手动指定镜像?在SDK Manager进行到下载步骤时,留意界面,通常会有“Already downloaded”或“Use existing”的选项,让你指向本地已有的.img或.img.xz文件。选择你事先准备好的那个文件,SDK Manager就会跳过下载,直接使用它。

接下来是安装模式。SDK Manager会检测你连接的设备。由于我们之前已经通过USB连接了处于恢复模式的Jetson Nano,并且虚拟机成功捕获,这里它应该能自动识别到设备。你会看到类似“Jetson Nano [0000:00:00]”这样的设备显示出来。如果这里显示“No target found”,请回到3.2节,检查USB连接步骤。

4.3 烧录过程与常见错误处理

确认目标设备无误后,就可以点击“Install”或“Flash”开始烧录了。这个过程会持续20到40分钟,具体取决于你的U盘速度和电脑性能。屏幕上会有一个进度条,并显示当前正在进行的步骤,比如“Formatting...”、“Writing partition...”等。

在这个过程中,你可能会遇到几个典型的“坑”:

  • 坑一:烧录中途失败,报错“Writing sparse image...”或“Timeout”。这通常是因为USB连接不稳定。解决方法:检查USB线是否插紧,尝试更换一个电脑上的USB接口(最好是主板原生的USB3.0口)。在虚拟机设置里,将USB兼容性从USB3.1改为USB3.0或USB2.0试试(有时兼容性更好)。确保在烧录过程中,不要晃动电脑或USB线。
  • 坑二:进度到99%卡住很久。先别急,只要进度条还在动,没有弹出明确的错误框,就多等一会儿。有时最后的数据校验会比较慢。如果卡住超过10分钟,可以尝试轻按一下Jetson Nano上的“复位键”(RST),有时能唤醒进程。
  • 坑三:烧录成功,但板子无法启动。首先检查你是否在烧录前短接了“FC REC”跳线帽。烧录完成后,务必记得把这个跳线帽拔掉! 否则板子会一直尝试进入恢复模式,无法正常引导系统。拔掉跳线帽,断开电源再重新上电,应该就能看到系统启动的日志了(如果你接了显示器,会看到Ubuntu的桌面)。

烧录完成后,SDK Manager会提示成功。此时,先不要急着关掉SDK Manager或虚拟机。按照提示,断开Jetson Nano的USB连接(在VMware的可移动设备里断开),然后给板子完全断电(拔掉电源)。拔掉“FC REC”跳线帽,然后重新上电。这时,Jetson Nano应该会从刚刚烧录好的eMMC存储中启动了。

5. 首次启动与基础配置验证

当板子重新上电后,如果你连接了显示器,几分钟后应该能看到Ubuntu 18.04的登录界面。默认用户名是nvidia,密码也是nvidia。如果你没有显示器,也别慌,我们可以通过串口来查看启动状态和登录系统。

5.1 无显示器启动:串口调试大法

对于没有多余显示器的开发者,串口终端是你的“眼睛”。你需要一根USB转TTL串口线(通常CH340芯片的就行)。

  1. 硬件连接:将串口线的GND(黑色)接到Jetson Nano的GND针脚(例如PIN6),RX(白色)接到Nano的TX(PIN8),TX(绿色)接到Nano的RX(PIN10)。注意是交叉连接(RX接TX,TX接RX)。
  2. 软件准备:在Windows宿主机上,安装串口终端软件,比如Putty、MobaXterm或者SecureCRT。打开软件,选择正确的串口号(在Windows设备管理器的“端口”里查看),波特率设置为115200,数据流控制(Flow Control)选择None。
  3. 查看启动日志:给Jetson Nano上电,串口终端软件里就会开始滚动输出Linux内核的启动信息。这是一个非常健康的信号,说明系统正在启动。等待滚动停止,最后会出现nvidia@nvidia-desktop:~$这样的登录提示符。输入用户名nvidia和密码nvidia,你就成功登录到板子的系统了!

5.2 基础系统检查与网络配置

登录系统后,无论是通过桌面还是串口,我们都需要做几件基础的事情:

  1. 扩展文件系统:如果你烧录到SD卡,并且SD卡容量大于镜像大小(比如用64GB卡烧录了16GB的镜像),那么剩余空间是无法使用的。需要运行英伟达提供的脚本扩展根分区:
    sudo /usr/lib/nvidia/resizefs/nvresizefs.sh
    
    如果是烧录到eMMC,这步通常不需要。
  2. 更新软件源并升级:为了获得最新的软件包和安全更新,首先更换为国内镜像源以加速下载。编辑源列表文件:
    sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
    sudo sed -i 's/ports.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
    
    然后更新并升级系统:
    sudo apt update
    sudo apt upgrade -y
    
  3. 检查核心组件:运行几个命令,验证深度学习环境的核心是否已就位:
    • 查看CUDA版本:nvcc --version 或 cat /usr/local/cuda/version.txt
    • 查看cuDNN版本:cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
    • 查看TensorRT版本:dpkg -l | grep tensorrt 如果这些命令都有正确的版本输出,恭喜你,一个基础的Jetson Nano深度学习环境已经搭建成功了!

5.3 安装缺失的SDK组件(可选)

回想在4.1节,我们为了求稳,只烧录了操作系统。现在系统运行正常了,我们可以把完整的JetPack SDK组件补上。有两种方法:

  1. 再次使用SDK Manager(推荐):在Ubuntu虚拟机里,再次打开SDK Manager。这次,在“Target Hardware”和“Target Operating System”选择同样的配置,但只勾选“Jetson SDK Components”。连接方式选择“通过网络安装”(因为现在板子已经正常启动,有了IP地址)。你需要知道板子的IP地址(在板子上运行ifconfig查看),并确保虚拟机和板子在同一个局域网内。SDK Manager会通过网络,将CUDA、cuDNN、TensorRT、OpenCV等组件安装到板子上。
  2. 使用APT命令手动安装:如果你清楚自己需要哪些组件,也可以直接通过APT安装。例如,安装完整的CUDA工具包:sudo apt install cuda-toolkit-10-2(具体版本号根据你的JetPack版本而定)。但这种方式需要自己处理依赖,不如SDK Manager一键安装省心。

走到这一步,你的Jetson Nano已经从一个“砖头”变成了一个功能完整的边缘AI计算设备。你可以开始在上面运行Python,安装PyTorch或TensorFlow的Jetson版本,部署你的第一个深度学习模型了。回顾整个流程,最核心的其实就是虚拟机USB设备的稳定连接和烧录工具的正确使用。这两点把握住了,成功就是水到渠成的事情。希望这份结合了我多次实战经验的指南,能帮你扫清入门路上的第一个大障碍。如果在实际操作中遇到新的问题,不妨多看看板子启动时的串口日志,那里面往往藏着最直接的线索。

更多推荐