Jetson A603载板JetPack刷机实战:从恢复模式到系统定制
2026/8/2 14:49:39 网站建设 项目流程

1. 项目概述:为A603载板注入灵魂

最近在折腾一块英伟达 Jetson 系列的 A603 载板,核心目标很明确:把官方的 JetPack SDK 操作系统镜像完整、稳定地刷写进去。这听起来像是个简单的“烧录”动作,但对于嵌入式开发,尤其是基于 Jetson 平台的边缘计算设备来说,这绝对是项目从零到一最关键、也最容易踩坑的第一步。A603 载板作为承载 Jetson 核心模块(如 Orin NX、Orin Nano)的载体,其固件和操作系统的状态直接决定了后续所有算法部署、性能调优的成败。如果你手头也有一块崭新的或者需要恢复的 A603,那么这篇从实战中总结的刷机指南,或许能帮你省下大把的排查时间。

简单来说,这个过程就是通过一台 Linux 主机(我们称之为“刷机主机”),将包含 Bootloader、内核、设备树、根文件系统在内的完整 JetPack 镜像,通过 USB 或网络的方式,写入到 A603 载板上的 eMMC 存储中。这不仅仅是复制文件,更涉及到引导流程的修复、设备树的适配以及驱动程序的注入。对于刚接触 Jetson 生态的开发者,这个过程可能会被各种术语和报错困扰;而对于有经验的工程师,如何高效、批量地完成刷写,也是一项值得优化的技能。接下来,我将拆解整个流程,从准备工作到实操步骤,再到避坑指南,带你走通这条必经之路。

2. 核心需求与准备工作解析

2.1 为什么需要刷写 JetPack?

A603 载板出厂时,其 eMMC 存储可能是空白的,或者预装了某个旧版本、基础版本的系统。为了运行我们自己的应用程序,尤其是依赖 CUDA、TensorRT、DeepStream 等英伟达特定技术的项目,我们必须安装与之深度集成的 JetPack SDK。JetPack 并非一个通用的 Ubuntu 系统,它是英伟达为 Jetson 平台量身定制的软件开发套件,包含了针对其 GPU、AI 加速器(如 NVDLA、PVA)优化的驱动、库和工具链。直接安装通用 Linux 发行版,将无法发挥硬件全部性能,甚至无法启动。因此,刷写 JetPack 是让 A603 载板“活”起来,并具备强大 AI 边缘计算能力的唯一标准路径。

2.2 硬件与软件准备清单

在开始刷写前,请确保你已备齐以下“弹药”:

  1. 刷机主机:一台运行Ubuntu 20.04 或 22.04 LTS的 x86_64 电脑或虚拟机。这是英伟达官方工具链支持最完善的环境。强烈建议使用物理机,虚拟机有时在 USB 控制权传递上会遇到问题。
  2. A603 载板与核心模块:确保你的 Jetson 核心模块(例如 Jetson Orin NX 16GB)已正确安装到 A603 载板上。检查所有连接器是否扣紧,特别是核心模块与载板之间的连接。
  3. 电源:为 A603 载板准备符合规格的电源适配器(通常是 19V)。刷机过程中供电必须稳定。
  4. USB 数据线:一根Micro-USB 转 USB-A数据线,用于连接载板的Recovery USB 端口(通常标记为FC_RECREC)到刷机主机。这是进入强制恢复模式(Force Recovery Mode)的关键。
  5. 网络连接(可选但推荐):一根网线,连接 A603 载板的以太网口和你的局域网。这为后续通过网络刷写(更快)或安装额外组件提供了便利。
  6. 显示器与输入设备(可选):首次启动后配置系统时可能需要。也可以通过串口终端进行无头(Headless)设置。

注意:请务必确认 USB 线是数据线,而非仅能充电的电源线。很多刷机失败的第一步就源于此。

2.3 软件环境部署

在刷机主机上,我们需要安装英伟达提供的刷机工具。最核心的是sdkmanager,但更底层、更直接的工具是 NVIDIA Flash Tools。

步骤一:安装依赖包打开刷机主机的终端,执行以下命令更新并安装基础依赖:

sudo apt update sudo apt install -y python3 python3-pip python3-dev python3-setuptools \ qemu-user-static libxml2-utils simg2img img2simg \ libffi-dev libssl-dev libjpeg8-dev zlib1g-dev \ udev net-tools usbutils

步骤二:下载并安装 SDK Manager访问英伟达官方网站,下载对应你主机 Ubuntu 版本的 SDK Manager.deb安装包。通常命令安装如下:

sudo apt install ./sdkmanager_[version]_amd64.deb

安装后,可以在应用菜单中找到它。但请注意,对于单纯的刷机,我们可能不会全程使用其 GUI,其命令行工具sdkmanager和它背后调用的flash.sh脚本才是核心。

步骤三:获取 JetPack 镜像有两种方式:

  • 通过 SDK Manager 下载:运行 SDK Manager,登录英伟达开发者账号,选择对应的 Jetson 核心模块型号和 JetPack 目标版本,SDK Manager 会下载完整的镜像和组件。这种方式集成度高,但下载体积巨大(通常超过10GB)。
  • 直接下载 BSP 和根文件系统:对于需要定制或离线环境的开发者,可以从英伟达开发者网站单独下载 Board Support Package (BSP) 驱动包和 Sample Root Filesystem。这种方式更灵活,但需要手动组合。

为了流程的完整性,我们假设通过 SDK Manager 获取了全套资源。它会将下载的镜像存放在~/nvidia/nvidia_sdk/JetPack_[version]_[target]这样的目录下。

3. 刷写流程全解析与实操

3.1 进入恢复模式:与载板建立通信桥梁

这是整个刷机过程中最具“仪式感”也最关键的一步。A603 载板必须进入 Force Recovery Mode,主机才能识别为一个需要刷写的 USB 设备。

  1. 连接硬件

    • 确保 A603 载板断电
    • 使用 Micro-USB 数据线,连接载板的Recovery USB 口(非普通的 USB 口)到刷机主机。
    • 连接网线(可选,用于后续步骤)。
    • 暂时不要连接电源
  2. 触发恢复模式

    • 找到载板上的Force Recovery按钮(通常是一个小孔,标记为F_RECREC)和Power按钮。
    • 按住 Force Recovery 按钮不松开
    • 在按住 Force Recovery 按钮的同时,按下并松开 Power 按钮给载板上电。
    • 继续按住 Force Recovery 按钮大约2秒钟,然后松开。
    • 此时,载板上的主要指示灯可能呈现特定的状态(例如,电源灯常亮,其他灯熄灭或特定闪烁),表明它已进入恢复模式,而非正常启动。
  3. 主机端验证: 在刷机主机上打开终端,输入lsusb命令。如果操作成功,你应该在输出列表中看到一条包含NVIDIA Corp.APXrecovery mode字样的设备信息,例如:

    Bus 003 Device 007: ID 0955:7f21 NVIDIA Corp. APX

    这个0955:7f21就是 Jetson 设备在恢复模式下的 USB 厂商/产品 ID。看到这个,恭喜你,最难的一关已经过了。

实操心得:如果lsusb没有显示 APX 设备,请按顺序检查:USB线是否插在恢复口、线缆是否完好、是否严格按照“先按住F_REC再上电”的顺序操作。有时需要多试一两次。也可以尝试在主板上完全断电(拔掉电源适配器)等待10秒后再重试。

3.2 使用 Flash.sh 脚本进行刷写

在 SDK Manager 下载的目录中,或在你解压的 BSP 包里,找到Linux_for_Tegra/目录。所有刷机操作都在这个目录下进行。

  1. 切换到刷机目录并准备环境

    cd ~/nvidia/nvidia_sdk/JetPack_[version]_[target]/Linux_for_Tegra/

    如果是第一次使用该 BSP 包,可能需要安装一些依赖并应用二进制补丁:

    sudo ./apply_binaries.sh

    这个脚本会将核心模块特定的驱动、设备树二进制文件等部署到根文件系统镜像中。

  2. 执行刷写命令: 最基本的刷写命令是针对整个设备的:

    sudo ./flash.sh jetson-orin-nx-devkit mmcblk0p1

    这里需要根据你的核心模块型号和载板类型替换jetson-orin-nx-devkit。对于 A603 载板,它可能对应一个特定的配置,如jetson-orin-nx-a603。最准确的方法是查阅 A603 载板的官方文档或Linux_for_Tegra/bootloader/目录下的板级配置文件(.conf文件)。 命令最后的mmcblk0p1指定了将系统刷写到 eMMC 存储的第一个分区。

  3. 理解刷写过程: 执行flash.sh后,脚本会做一系列工作:

    • 检查主机是否识别到恢复模式下的设备。
    • 将引导加载程序(如cbootUEFI)、内核镜像、设备树二进制文件通过 USB 发送到载板。
    • 将准备好的根文件系统镜像(rootfs)也传输过去。
    • 在载板端,这些数据被写入 eMMC 的相应分区。 整个过程会在终端有详细的滚动日志,通常需要5到15分钟,取决于镜像大小和 USB 速度。当看到*** Flashing completed successfully ***或类似的成功提示时,即可进入下一步。

3.3 首次启动与初始配置

刷写成功后,先给 A603 载板完全断电(拔掉电源线)。

  1. 断开恢复模式连接:拔掉连接 Recovery 口的 USB 数据线。

  2. 正常上电启动:只连接电源适配器,按下 Power 按钮。此时,系统应该从刚刚刷写好的 eMMC 启动。

  3. 进行系统配置

    • 如果有显示器:你将看到标准的 Ubuntu 首次启动设置界面,包括语言、时区、用户名、密码、主机名等。按提示完成即可。
    • 无头(Headless)配置:这是更常见的工业场景。你需要通过串口登录。连接载板的调试串口(通常是 UART,标有DEBUGCONSOLE)到主机的 USB 转串口适配器,使用终端工具(如minicom,picocom,screen)以正确的波特率(通常是 115200)连接。上电后,串口终端会输出内核启动日志,并在首次启动时引导你完成同样的用户名、密码等配置。

    完成配置后,你将获得一个可登录的 JetPack 系统桌面或命令行界面。

4. 高级配置与定制化刷写

4.1 定制根文件系统

直接使用 SDK Manager 下载的根文件系统是通用版本。在实际项目中,我们往往需要预装自己的软件、库,修改配置文件,甚至精简系统。

  1. 解压与挂载Linux_for_Tegra/目录下的根文件系统通常是一个压缩的rootfs.tar.gz文件。我们可以将其解压到一个目录进行修改:

    sudo rm -rf ./rootfs # 清理旧目录 sudo tar -xpzf ./rootfs/targetnvidia-ubuntu-ubuntu-2204-jetson-[version].tar.gz -C ./

    现在./rootfs目录就是你的根文件系统。

  2. 使用 chroot 进行修改: 为了能在主机环境中“模拟”运行目标系统的环境来安装软件(如apt),需要使用chroot

    cd Linux_for_Tegra sudo chroot ./rootfs

    执行后,你的命令行提示符会变化,此时的操作就在目标根文件系统内了。你可以:

    • apt update && apt install [your-packages]
    • 编辑/etc/下的配置文件。
    • 添加你自己的用户、SSH 密钥等。 操作完成后,输入exit退出 chroot 环境。
  3. 重新打包并刷写: 修改完成后,需要重新打包并集成到刷机流程中:

    sudo ./apply_binaries.sh # 重新应用二进制文件到修改后的rootfs sudo ./flash.sh [board] mmcblk0p1 # 再次刷写,脚本会自动使用修改后的rootfs

4.2 网络刷写(更快更稳定)

对于批量部署或 USB 刷写不稳定的情况,网络刷写(使用flash.sh-N选项)是更好的选择。它要求载板和主机在同一个局域网段。

  1. 主机端准备:首先,主机需要有一个固定的 IP,并允许 TFTP 和 NFS 服务。
  2. 配置刷写命令:在flash.sh命令中指定主机的 IP 地址。
    sudo ./flash.sh -N [host_ip] [board] mmcblk0p1
    例如:sudo ./flash.sh -N 192.168.1.100 jetson-orin-nx-a603 mmcblk0p1
  3. 载板端操作:让载板进入恢复模式(步骤同前)。此时,flash.sh脚本会通过 TFTP 将引导加载程序等小文件传给载板,然后通过 NFS 挂载根文件系统镜像进行写入,速度远超 USB 2.0。

4.3 分区管理与备份

了解 Jetson 的设备分区表对于高级运维至关重要。刷写后,你可以通过进入恢复模式并使用flash.sh的查询命令来查看分区信息,或者直接在运行的系统里使用lsblksudo parted /dev/mmcblk0 print查看。

备份整个系统:你可以将运行中的设备完整备份成一个镜像文件,用于克隆或恢复。这通常需要在恢复模式下,使用nvflashdd命令结合flash.sh的参数来实现,是一个反向操作的过程。例如,可以生成一个可用于刷写的rootfs备份。

5. 常见问题排查与实战技巧

刷机过程很少一帆风顺,以下是我在实践中遇到的一些典型问题及解决方案。

5.1 恢复模式识别失败

  • 现象lsusb看不到NVIDIA Corp. APX设备。
  • 排查
    1. 检查硬件连接:确认 USB 线连接的是Recovery 口,且线缆良好。尝试更换 USB 端口或线缆。
    2. 检查操作顺序:务必严格遵守“断电 -> 按住 F_REC -> 上电 -> 保持2秒 -> 松开 F_REC”的顺序。可以尝试在按住 F_REC 上电后,多等几秒再松开。
    3. 检查主机 USB 权限:运行lsusb时是否需要sudo?可以尝试将当前用户加入plugdev组,或创建/etc/udev/rules.d/下的规则文件。
    4. 载板状态:有些载板在已有系统的情况下,进入恢复模式的时机窗口很短。可以尝试在完全断电(拔电源)后,先按住 F_REC,再插入电源,然后按 Power 键。

5.2 刷写过程卡住或报错

  • 现象flash.sh脚本运行后卡在某个步骤(如sending),或报错USB device not foundCommand failed
  • 排查
    1. 供电不足:确保使用官方推荐或足功率的电源适配器。刷写过程,尤其是写入 eMMC 时功耗较大。
    2. USB 干扰:拔掉不必要的 USB 设备。尝试使用主机后置的 USB 端口(通常直接连接南桥,更稳定)。
    3. BSP 版本不匹配:确认你使用的Linux_for_Tegra目录下的 BSP 和驱动,与你的 Jetson 核心模块型号及 JetPack 目标版本完全匹配。不匹配的 BSP 是刷机失败的常见原因。
    4. 查看详细日志flash.sh脚本支持更详细的日志输出,可以尝试添加-v--verbose参数来获取更多信息。

5.3 系统刷写成功但无法启动

  • 现象:刷写过程显示成功,但上电后无显示,串口无输出,或卡在启动 LOGO。
  • 排查
    1. 引导顺序:确认载板没有设置从其他设备(如 NVMe SSD)启动。检查载板跳线或 BIOS/UEFI 设置。
    2. 设备树错误:这是最可能的原因之一。flash.sh使用的设备树二进制文件(.dtb)必须与你的载板硬件(如传感器接口、显示接口)完全匹配。确认你使用的board参数是否正确对应 A603 载板。仔细查阅载板手册,看是否有特殊的刷写配置。
    3. 文件系统损坏:虽然刷写成功,但写入过程中可能因断电等原因导致数据错误。可以尝试重新刷写一次。
    4. 核心模块未插好:极端情况下,重新插拔一下 Jetson 核心模块,确保连接器接触良好。

5.4 网络刷写特定问题

  • 现象:网络刷写时,载板无法通过 TFTP 获取文件。
  • 排查
    1. 防火墙:关闭主机防火墙或放行 TFTP (69/UDP) 和 NFS 相关端口。
    2. IP 地址:确认-N参数指定的主机 IP 正确,且与载板在同一子网。载板在恢复模式下会通过 DHCP 获取 IP,确保网络中有 DHCP 服务器。
    3. 服务配置:确认主机上的tftpd-hpanfs-kernel-server已正确安装、配置并运行,且目录权限设置正确。

最后分享一个提升效率的小技巧:对于需要频繁刷写测试的场景,可以在flash.sh完成后,不立即重启载板,而是通过-r参数让脚本在刷写结束后自动执行一些初始化或验证命令。另外,将常用的刷写命令、环境变量设置写成脚本,可以极大减少重复劳动和输入错误。刷写 A603 这类载板,耐心和细致的文档阅读往往比技术本身更重要,尤其是在面对硬件版本迭代和软件版本更新时,务必以官方发布的最新文档为准。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询