TL;DR(摘要)
本文记录一次完整的 NVIDIA Jetson AGX Thor 开发板系统烧录与调试实录,分成两条路线:
- 第一阶段(失败) :尝试在 Windows 宿主机上用 WSL2 +
usbipd-win穿透 USB、配合 SDK Manager 跨系统刷机,一路踩遍 UEFI 网络启动、开发者账号授权、UsbDk驱动冲突,最后卡在"设备显示已 Attached,SDK Manager 却死活找不到板子"的玄学问题上。- 第二阶段(救砖) :果断放弃 Windows 跨系统刷机链路,改用 U 盘本地引导重装。结果这条路也没一帆风顺------
balenaEtcher打开 ISO 直接崩溃、官方安装脚本因板型字符串不匹配报Unsupported board!把安装器干崩。最终通过现场bind mount伪造设备树 + 重启 Subiquity 服务,零重启救砖成功。
核心结论:不要和复杂的中间层驱动死磕;当工具链成本高于开发成本时,果断换路。
目录
-
预备知识:Jetson Thor 常见远程连接方式
-
第一阶段:WSL2 + SDK Manager 刷机链路(及其崩溃)
- 坑一:卡在
Start HTTP boot over IPv4无法开机 - 坑二:SDK Manager 提示
User is not authorized - 坑三:Windows WSL2 下的 USB 穿透拉锯战(
usbipd-win&UsbDk) - 坑四:终极幽灵 ------ 设备已
Attached,SDK Manager 依然找不到板子
- 坑一:卡在
-
及时止损:放弃 Windows 链路,转向 U 盘重装
-
第二阶段:U 盘重装实操与现场救砖
- 坑一:
balenaEtcher打开 ISO 报错requestMetadata is not a function - 坑二:U 盘引导报
Unsupported board!,安装程序崩溃(生成unknown.crash) - 坑三:安装后期大量刷屏
subiquity/Meta/status_GET:
- 坑一:
-
总结与给同行的建议
1. 预备知识:Jetson Thor 常见的远程连接方式
在正式刷机前,连接 Jetson Thor 主要有以下几种途径:
- USB-C 虚拟网卡直连(最推荐) :用 Type-C 线连接电脑与 Jetson(常规 USB-C 口),默认 IP 为
192.168.55.1,通过ssh username@192.168.55.1即可免网线登录。 - 局域网 SSH / VS Code Remote :开发板接入路由器后,通过局域网 IP 进行 SSH,结合 VS Code
Remote - SSH插件体验最佳。 - 串口控制台(Serial Console) :连接 Debug 专用 USB-C 口,波特率设为
115200,用于网络彻底中断或 Bootloader 阶段排查。 - 桌面图形(NoMachine / VNC) :推荐 NoMachine ARMv8 版本,硬件渲染性能优于传统 VNC。
2. 第一阶段:WSL2 + SDK Manager 刷机链路(及其崩溃)
为了在 Windows 宿主机上运行基于 Linux 的 SDK Manager,需要把 USB 端口从 Windows 穿透给 WSL2 虚拟机。这条路线以下面四个坑告终。
2.1 坑一:卡在 Start HTTP boot over IPv4 无法开机
开机测试时,屏幕停留在 Start HTTP boot over IPv4 或 Start PXE over IPv4 并不断超时。
原因分析 :这是 UEFI 固件的备用引导机制。当 Jetson 无法在本地 SSD(NVMe)或 eMMC 中找到有效的引导分区(GRUB/EFI)时,就会尝试通过网线进行 PXE/HTTP 网络启动。
解决尝试:
- 开机狂按
ESC进入 UEFI BIOS。 - 在 Boot Options 中将
NVMe移动到第一启动项。 - 若 UEFI 中压根找不到
NVMe,需要重新插拔硬件,或确认 SSD 是否需要重新烧录系统。
2.2 坑二:SDK Manager 登录报错 User is not authorized
准备使用 SDK Manager 烧录时,客户端弹窗提示:User is not authorized on NVIDIA developer server。
原因分析 :普通 NVIDIA 账号(如 GeForce / Game Ready 账号)未签署 NVIDIA Developer Program 开发者协议,或者浏览器跳转时 Token 传回失败。
解决办法:
- 前往 NVIDIA Developer 官网 登录并补全个人/组织信息,勾选同意开发者协议。
- 使用浏览器的无痕模式(Incognito)重新走 OAuth2 认证流程。
2.3 坑三:Windows WSL2 下的 USB 穿透拉锯战
为了让 SDK Manager 能识别到板子,需要用 usbipd-win 把 USB 端口穿透给 WSL2。在这个环节经历了三连扣:
usbipd-win 命令不存在
- 解决 :运行
winget install dorssel/usbipd-win,重启管理员终端。
There is no WSL 2 distribution running
- 原因:WSL2 在没有活跃终端时会自动挂起。
- 解决 :按下
Win + R输入wsl唤醒虚拟机,并保持该命令行窗口最小化。
终极拦截者:****Failed to attach device 与 UsbDk 冲突
在运行 usbipd attach --wsl --busid 1-1 --auto-attach 时,控制台疯狂输出 Failed to attach:
text
WSL 2026-07-16 19:46:00 Device 1-1 is available. Attempting to attach...
WSL 2026-07-16 19:46:00 Failed to attach device 1-1
- 原因 :系统安装了
UsbDk(如随 Wireshark 或模拟器安装的底层 USB 过滤驱动),强行霸占了 USB 控制权。 - 解决 :在 Windows"安装的应用"中卸载 UsbDk Runtime Libraries,彻底重启电脑后恢复正常。
2.4 坑四:终极幽灵 ------ 设备已 Attached,SDK Manager 依然"找不到板子"
解决 UsbDk 后,usbipd 终于输出了理想的成功日志:
text
WSL Attach command for device 1-1 succeeded.
WSL Device 1-1 is now attached.
然而,回到 SDK Manager 点击 Refresh,界面依然顽固地显示:Could not detect a board。
深层原因拆解:
- USB 模式错位 :检查
usbipd list的 Vendor:Product ID,设备停留在0955:7045(Tegra On-Platform Operator / 串口调试模式),而 SDK Manager 要求的 Recovery 刷机模式必须是 APX 状态(如0955:7026/0955:7023)。 - 物理接口差异:插在了 Debug / OOB 调试口,而不是 J81 / Flash 专用强刷接口。
- WSL2 的 USB 描述符丢失 :即便
usbipd完成了底层的端口映射,Windows 到 WSL2 虚拟网桥的设备描述符透传,在复杂多复合 USB 设备(USB Composite Device)上容易丢包或识别不完整。
3. 及时止损:放弃 Windows 链路,转向 U 盘重装
排查完接口、重新冷启动进 Force Recovery 模式、校验 USB ID 后,面对 Windows Host → WSL2 → SDK Manager 这条过长的调用链中难以预测的玄学问题,我决定放弃这条路径。
最终解决方案:直接放弃 Windows + WSL2 + SDK Manager 的跨环境强刷方案,改用 U 盘镜像 / 烧录盘进行本地重装引导。第一阶段先走通了"做盘 → UEFI 选 U 盘启动"的基本流程:
- 将系统 Boot 镜像或官方 L4T 根文件系统制作成可引导 U 盘。
- 插入 Jetson Thor,开机按
ESC进入 UEFI Boot Menu,直接选择 U 盘启动。 - 一路顺利完成安装,成功打通系统。
⚠️ 镜像版本提示 :NVIDIA 会持续更新 JetPack / L4T 镜像。本文写作时(2026 年 7 月)参考文章中直接提供的镜像链接已经失效或不适用,务必前往 NVIDIA 官方下载页 获取当前最新版本。
针对 NVIDIA Jetson 开发者套件(包括 Jetson Thor 和 Orin 系列),NVIDIA 目前已经采用了全新的统一 ISO 镜像机制。
以下是官方最新的下载渠道和对应网址:
1. 官方最新版本下载页面(推荐 🌟)
如果你想体验最新的系统,可以前往 JetPack 的主下载页面。目前最新的版本是 JetPack 7.2 (对应 Jetson Linux r39.2) ,它带来了更完善的 Agentic AI 支持以及更稳定的统一 ISO 引导安装:
- 最新下载主页 :NVIDIA JetPack SDK Downloads
- (进入该页面后,点击 "Download JetPack ISO Image" 按钮即可直接下载最新的
.iso统一镜像;你也可以在此页面下载最新版的 SDK Manager )2. 历史版本归档页面(如果你需要找特定的旧版本)
如果你因为项目兼容性(例如特定版本的 CUDA、TensorRT 或驱动),需要找回你截图里正在使用的 JetPack 7.0 (对应 Jetson Linux r38.2) 或其他历史版本,可以在归档页面找到:
- 历史归档页面 :NVIDIA JetPack Archive
- (点击页面中的 "JetPack 7.0" 进入专属子页面,即可找到当时版本的 ISO 镜像下载入口)
💡 避坑小贴士
- 建议使用 Rufus 烧录 :由于 balenaEtcher 的 JS 解析器存在兼容性 Bug,在 Windows 环境下强烈建议直接使用 Rufus 导入你下载好的
.iso文件并写入 U 盘。- SBSA 架构变化 :从 JetPack 7 开始,Jetson 系统引入了类似服务器的 SBSA 标准。这意味着无论是 Orin 还是 Thor,现在都使用同一个统一的
.iso文件来进行 USB/UEFI 引导安装。只需写入 U 盘后插在开发板上,开机进入 UEFI 菜单选择 U 盘启动即可。
参考链接
- U 盘刷机参考:CSDN - Jetson Thor U盘刷机
4. 第二阶段:U 盘重装实操与现场救砖
硬件平台 :NVIDIA Jetson AGX Thor Developer Kit (128GB)
镜像版本 :
jetsoninstaller-0.2.0-r38.2-arm64.iso(JetPack 7.x 统一 ISO)宿主机环境:Windows 11
NVIDIA 在最新的 JetPack 7.x 中为 Jetson Thor 带来了类似 PC/服务器的 SBSA(服务器基准系统架构)+ 统一 ISO 引导机制。原本以为像给普通 PC 刷系统一样插上 U 盘就能搞定,结果在实际操作中接连踩中了烧录软件 Bug 和官方脚本检测逻辑的硬伤。
本阶段完整记录 U 盘刷机遇到的三个核心"坑点"及免重启救砖方案。
4.1 坑一:balenaEtcher 打开 ISO 报错 requestMetadata is not a function
故障现象 :在 Windows 下使用 balenaEtcher 导入下载好的 .iso 镜像时,弹窗报错:
打开开源镜像时出错
错误信息:
(0 , h.requestMetadata) is not a function
原因分析 :这是 balenaEtcher 特定版本(尤其是 v1.19.x 系列)内置 JavaScript 运行库的 TypeError 。由于 balenaEtcher 基于 Electron 框架开发,其元数据解析模块(Metadata Parser)在读取 Jetson Thor 这类特殊的 ARM64 ISO 镜像头信息时调用了未定义的函数,导致前端解析崩溃。
解决方案:
- 最佳方案 :放弃
balenaEtcher,直接使用 Windows 原生开源轻量工具 Rufus 或 Ventoy 进行 ISO 写入。 - 次选方案 :将
balenaEtcher降级至旧的稳定版本(如v1.18.11)。
4.2 坑二:U 盘引导报 Unsupported board!,安装程序崩溃(生成 unknown.crash)
故障现象:U 盘引导进入安装阶段后,屏幕刷出大量 Shell 脚本调试日志,随后提示:
text
/ai/jetsoniso_setup.bash: line 233: warning: command substitution: ignored null byte in input
+ board='NVIDIA Jetson Thor Developer Kit'
+ case $board in
+ echo 'Unsupported board!'
Unsupported board!
+ exit 1
An error occurred. Press enter to start a shell
...
written to /var/crash/1751465084.628017187.unknown.crash
root@ubuntu-server:/var/snap/subiquity/6808#
随后系统直接抛出 exit 1,导致 Ubuntu 的 Subiquity 安装器生成崩溃日志,并将用户踢入紧急救援终端(Emergency Shell)。
原因分析 :这是官方安装脚本与开发板出厂固件之间的字符串不匹配(字面量匹配)Bug:
- 脚本
/ai/jetsoniso_setup.bash通过读取内核设备树cat /sys/firmware/devicetree/base/model获取当前板卡名称。 - 开发板 QSPI / UEFI 返回的字符串是:
NVIDIA Jetson Thor Developer Kit。 - 但脚本内部的
case分支写死了极其严格的匹配规则,只认可带有AGX三个字母的字符串"NVIDIA Jetson AGX Thor Developer Kit"。 - 因为少了 "AGX",脚本触发了兜底分支打印
Unsupported board!,并返回非零状态码退出,导致上层 Subiquity 服务崩溃。
救砖解决方案(免重启,现场黑客打补丁) :既然已经落到了 root@ubuntu-server 的 Emergency Shell,完全不需要重启或重新刷盘,利用 Linux 内存文件系统(tmpfs)在终端现场修复:
步骤 1:利用 Bind Mount 伪造设备树型号
在当前 Shell 中执行以下命令,将系统设备树节点的返回值伪造成脚本期望的格式:
bash
# 1. 在内存 tmp 目录下生成带 AGX 的规范字符串文件
echo -n "NVIDIA Jetson AGX Thor Developer Kit" > /tmp/model_fake
# 2. 通过 bind mount 覆盖 sysfs 节点
mount --bind /tmp/model_fake /sys/firmware/devicetree/base/model
# 3. 校验伪造是否生效
cat /sys/firmware/devicetree/base/model
# 应输出:NVIDIA Jetson AGX Thor Developer Kit
步骤 2:重启 Subiquity 安装服务
查看并重启控制安装流程的 Snap 服务:
bash
# 重启 Subiquity 后端服务
systemctl restart snap.subiquity.subiquity-server.service
# (可选) 重新跑一次初始化预配置脚本验证
bash /ai/preseed.sh Jetsoniso
步骤 3:退出 Shell 恢复图形安装界面
在终端输入:
bash
exit
回车后,控制权交还给 Subiquity,系统会自动跳过卡死节点,重新加载进入正常的 Ubuntu 24.04 系统安装向导。
4.3 坑三:安装后期大量刷屏 subiquity/Meta/status_GET:
故障现象 :在软件包解压安装阶段(屏幕显示 Installing many packages, wait for 15mins..),终端底部不断重复打印:
text
start: subiquity/Meta/status_GET:
start: subiquity/Meta/status_GET:
机制科普 :无需担心,这是完全正常的状态!
Ubuntu 24.04 的 Subiquity 安装程序采用了前后端分离架构:
- 后台(Server) :正在默默进行几百个驱动包、L4T 内核(
nvidia-l4t-kernel)和 Docker 依赖的解压与写入。 - 前台(Client) :为了获取安装进度,会每隔几秒向后台发送一次 HTTP GET 请求(即
status_GET轮询)。
只要底部的进度光标在闪烁,说明安装程序正处于健康的高速解压阶段,耐心地等待 15~20 分钟即可。
5. 总结与给同行的建议
"不要和复杂的中间层驱动死磕,当工具链成本高于开发成本时,果断换路。"
第一阶段(WSL2 路线)的教训:
- 避免跨系统底层刷机 :NVIDIA SDK Manager 本身对 Linux 原生环境依赖极高。在 Windows 上通过 WSL2 +
usbipd-win刷机,极易在 USB 描述符、多接口重定向(Composite Device)和自动重启重连(Auto-attach)上掉坑。如果有条件,首选双系统 Linux 或直接准备一台 Ubuntu 物理机。 - 硬件接口要认准:Jetson 开发套件的 Debug 口和 Flash 口有严格区分,刷新固件前务必查阅 Hardware Layout 确定 J81 / Recovery 接口位置。
第二阶段(U 盘路线)的注意事项:
- 重启前务必拔 U 盘 :当看到安装完成并准备 Reboot 时,必须第一时间拔掉安装 U 盘!否则 Jetson Thor 的 UEFI 会再次优先加载 U 盘,导致重新进入安装流程(无限循环)。
- 离线关机与后期配置 :安装成功进入 Ubuntu 桌面后,哪怕当前没有连接网络也可以安全关机(
sudo poweroff)。因为底层驱动(BSP)已完整写入 NVMe 固态硬盘,后续等接入网络后,再从容运行 CUDA 13、TensorRT 10 及 JetPack SDK 软件栈的安装步骤(即官方文档 Step 3 之后的应用层部署)即可。 - 烧录工具选对 :遇到
balenaEtcher崩溃,直接用 Rufus / Ventoy 替代,别在烧录软件上浪费时间。 - 现场救砖优先零重启方案 :官方脚本的字符串匹配 Bug 用
bind mount伪造设备树即可绕过,无需重刷。
希望本篇踩坑记能帮助遇到相同问题的开发者快速定位并解决问题!