Skip to main content

从 Orin Nano DevKit 制作 DIY BSP 并适配 reComputer Classic / Super

本 Wiki 演示如何从 NVIDIA Jetson Orin Nano Developer Kit 克隆完整开发环境,换用 Seeed reComputer 的板级启动固件,制作 Hybrid BSP 并完成刷写。

本流程支持两个目标板型:

  • reComputer Classic(J4011/J4012,板级配置 recomputer-orin-j401
  • reComputer Super(板级配置 recomputer-orin-super-j401

两者核心思路一致——保留 DevKit 的整盘 APP,重新生成目标板的 QSPI——但在 pinmux、摄像头 overlay 和磁盘布局等细节上有所不同。下文在差异处会以选项卡区分,相同部分则共用。

本流程已在 JetPack 6.2 / L4T 36.4.3、Orin Nano 8GB(SKU 0005)上完成实机刷写与启动验收。

相关文档:

你要达成什么

目标产物用途
A. 同载板克隆mfi_jetson-orin-nano-devkit-nvme.tar.gz再刷回 DevKit,完整环境克隆
B. 目标板 Bundlemfi_recomputer-orin-j401.tar.gz(Classic)
mfi_recomputer-orin-super-j401.tar.gz(Super)
刷到目标板:目标板级 QSPI + DevKit 整盘 APP(含 /home
C. 稳妥回退官方 BSP + 只迁 /homeHybrid 异常时用
danger

不要把 DevKit 的 mfi_jetson-orin-nano-devkit-nvme 直接刷到目标板。

不要只改 mfi 目录里某个 .dtb 就当适配完成。

不要把 Classic 的 Hybrid 包刷到 Super,反之亦然——两者 pinmux 和摄像头 overlay 不同。

前提条件

硬件

  • 源机:Orin Nano Developer Kit(本例模块 SKU 0005 = Orin Nano 8GB,NVMe 启动)
  • 目标机:Seeed reComputer Classic J4011/J4012reComputer Super(模块建议同为 0005)
  • 主机:Ubuntu 22.04 x86_64,USB Type-C 数据线(刷写口)
  • 磁盘:建议预留 ≥ 100GB 空闲(备份 + 双 mfi + 快照)
danger

reComputer Classic 系列的散热不足以支持 MAXN 超级模式。如果您在 Classic 设备上刷写了 JetPack 6.2,请不要启用 MAXN 模式

主机依赖

sudo apt-get update -y
sudo apt-get install -y \
build-essential flex bison libssl-dev \
sshpass abootimg nfs-kernel-server \
libxml2-utils qemu-user-static

备份/刷写前:

sudo systemctl stop udisks2.service
sudo service nfs-kernel-server start
lsusb | grep 0955:7523 # 必须看到 NVIDIA Corp. APX

板型对照

项目DevKitreComputer ClassicreComputer Super
board-namejetson-orin-nano-devkit-nvmerecomputer-orin-j401recomputer-orin-super-j401
配置文件p3768-0000-p3767-0000-a0-nvme.confrecomputer-orin-j401.confrecomputer-orin-super-j401.conf
PinmuxNVIDIA DevKit(DP)Classic HDMISuper HDMI
摄像头 overlayNVIDIA dynamicSeeed dual IMX219Seeed quad IMX219
SKU0005 主 DTB...-0005-nv(-super).dtb仍用 tegra234-p3768-0000+p3767-0005-nv-super.dtb
最终 mfiDevKit 专用Classic 专用Super 专用

本例备份 board_spec

3767-300-0005-V.2-1-1-jetson-orin-nano-devkit-nvme-

1. 准备 Linux_for_Tegra 工作区

从 Jetson 开发环境创建自定义 BSP 包 的「在 PC 上准备工作目录」表格下载 Seeed L4T 工作包(本例为 JetPack 6.2 / L4T 36.4.3 plus)。

sudo tar xpf L4T_36.4.3_plus.tar.gz
# 请按实际下载的压缩包名称调整

cd Linux_for_Tegra/
sudo ./apply_binaries.sh
cd ..

export ARCH=arm64
export CROSS_COMPILE="$PWD/aarch64--glibc--stable-2022.08-1/bin/aarch64-buildroot-linux-gnu-"
export PATH="$PWD/aarch64--glibc--stable-2022.08-1/bin:$PATH"
export INSTALL_MOD_PATH="$PWD/Linux_for_Tegra/rootfs/"

cd Linux_for_Tegra/source
./nvbuild.sh
./do_copy.sh
./nvbuild.sh -i

验收:

test -f Linux_for_Tegra/recomputer-orin-j401.conf
test -f Linux_for_Tegra/jetson-orin-nano-devkit-nvme.conf
ls Linux_for_Tegra/kernel/dtb/tegra234-j401-*-recomputer.dtb
ls Linux_for_Tegra/kernel/dtb/tegra234-dcb-p3767-0000-hdmi.dtbo

2. 从 DevKit 备份完整环境

2.1 源机进恢复模式

用 USB Type-C 数据线将 DevKit 刷写口连接到主机,并进入恢复模式。主机执行 lsusb 应看到 0955:7523 APX

进入恢复模式的说明见:刷写 JetPack 到指定产品

备份过程中设备可能短暂变成 0955:7035(Linux for Tegra / initrd),属正常。

2.2 备份命令

cd Linux_for_Tegra
sudo ./tools/backup_restore/l4t_backup_restore.sh \
-e nvme0n1 -b -c jetson-orin-nano-devkit-nvme
warning

源机是 DevKit 时,不要用目标板 board-name 做第一次备份,否则 board_spec / 后续基线会乱。

2.3 验收

ls -lah tools/backup_restore/images/
head -5 tools/backup_restore/images/nvpartitionmap.txt

应看到:

  • board_specjetson-orin-nano-devkit-nvme
  • nvme0n1p1.tar.zst(或后续转换的大 APP)体积为 GB 级
  • 存在 QSPI0.img(这是 DevKit 的 QSPI,后面 Hybrid 不能直接当目标板用)

建议立刻打快照:

sudo cp -a tools/backup_restore/images ~/backup_images_dk_sku0005

3. 打出 DevKit 同载板 DIY BSP(可选)

设备再次进入 APX。主机执行 lsusb 应看到 0955:7523 APX

cd Linux_for_Tegra
sudo ./tools/kernel_flash/l4t_initrd_flash.sh \
--use-backup-image --no-flash --network usb0 --massflash 5 \
jetson-orin-nano-devkit-nvme internal

产物:

  • mfi_jetson-orin-nano-devkit-nvme/
  • mfi_jetson-orin-nano-devkit-nvme.tar.gz
danger

仅用于再刷 DevKit。禁止刷目标板。

这个包的 APP 可作为后续 Hybrid Bundle 的数据源,但它的 QSPI 不能复用。

4. 必读:QSPI 陷阱

--use-backup-imageconvert_backup_image_to_initrd_flash 会把:

备份内容放到
NVMe / APPtools/kernel_flash/images/external/
源机 QSPI0.imgtools/kernel_flash/images/internal/

因此:

错误做法结果
只改 mfi/.../rootfs 或某个 .dtb无效(真正刷的是 bak / QSPI)
备份来自 DevKit,却直接换目标板 board-name + --use-backup-image仍刷 DevKit QSPI(DP pinmux),HDMI/USB 可能异常
改 conf 后再 --flash-only--flash-only 不会按 conf 重算镜像

目标板真正差在 conf 里的 HDMI pinmux + DCB/camera overlay

recomputer-orin-j401.conf 关键内容:

PINMUX_CONFIG="tegra234-mb1-bct-pinmux-p3767-hdmi-a03.dtsi"
PMC_CONFIG="tegra234-mb1-bct-padvoltage-p3767-hdmi-a03.dtsi"
OVERLAY_DTB_FILE+=",tegra234-dcb-p3767-0000-hdmi.dtbo,tegra234-p3767-camera-p3768-imx219-dual-seeed.dtbo"
DCE_OVERLAY_DTB_FILE="tegra234-dcb-p3767-0000-hdmi.dtbo"

对 SKU 0005,主 DTB 文件名仍是 NVIDIA 的 *-0005-nv-super.dtb不是强行换成 *-0000-recomputer.dtb(那是 NX 16GB 路径)。

5. Hybrid BSP:做目标板 Bundle

核心思路:

  1. APP:继续用 DevKit 备份(整盘用户环境)
  2. QSPI:用目标板 conf 重新生成(不要 --use-backup-image
  3. 组装成目标板 mfi
DevKit 备份 APP  ──►  external/(nvme0n1p1_bak.img 等)
目标板 conf 新 QSPI ──► internal/(分片 QSPI,非 DevKit 单体 QSPI0.img)
└──► mfi_recomputer-orin-<target>(.tar.gz)

5.1 准备 APP-only(去掉 DevKit QSPI)

cd Linux_for_Tegra
sudo cp -a ~/backup_images_dk_sku0005 \
tools/backup_restore/images_app_only
sudo rm -f tools/backup_restore/images_app_only/QSPI0.img
sudo sed -i '/qspi/Id' tools/backup_restore/images_app_only/nvpartitionmap.txt

将 APP-only 转成 initrd flash 的 external 镜像(可用备份工具的 convert,或复用 DevKit 打包步骤已有的 tools/kernel_flash/images/external/ 大 APP)。

5.2 生成目标板 QSPI

设备须处于 APX。模块参数与备份一致(本例 3767 / 0005 / 300 / V.2):

cd Linux_for_Tegra
sudo BOARDID=3767 BOARDSKU=0005 FAB=300 BOARDREV=V.2 CHIP_SKU=00:00:00:D5 \
./tools/kernel_flash/l4t_initrd_flash.sh \
--external-device nvme0n1p1 \
-c tools/kernel_flash/flash_l4t_t234_nvme.xml \
-p "-c bootloader/generic/cfg/flash_t234_qspi.xml --no-systemimg" \
--no-flash --massflash 5 --showlogs --network usb0 \
recomputer-orin-j401 internal

日志中应出现 HDMI pinmux,例如:tegra234-mb1-bct-pinmux-p3767-hdmi-a03

建议保存新 QSPI internal:

sudo cp -a tools/kernel_flash/images/internal ~/j401_qspi_internal_save
info

本指南实测生成的 QSPI internal(SKU 0005 / L4T 36.4.3)已上传,可直接下载使用:

wget -O j401_qspi_internal_save.tar.gz \
https://files.seeedstudio.com/wiki/reComputer-Jetson/FAQ/dk-to-classic/j401_qspi_internal_save.tar.gz
mkdir -p Linux_for_Tegra/tools/kernel_flash/images/internal
tar xpf j401_qspi_internal_save.tar.gz -C Linux_for_Tegra/tools/kernel_flash/images/internal/

下载后放入 Linux_for_Tegra/tools/kernel_flash/images/internal/ 即可跳过本节 QSPI 生成步骤。

复用前提:目标板为 reComputer Classic J4011/J4012、模块 SKU 0005、L4T 36.4.3。若任一条件不符,必须按本节重新生成。

5.3 组装 mfi

最终目录应满足:

路径内容
mfi_recomputer-orin-j401/recomputer-orin-j401.conf存在
.../tools/kernel_flash/images/internal/J401 新 QSPI(无 DevKit 单体 QSPI0.img,或哈希与 DevKit 不同;flash.idx 常为多行分片)
.../tools/kernel_flash/images/external/nvme0n1p1_bak.imgGB 级 APP

打包归档(可选):

cd Linux_for_Tegra
sudo tar czf mfi_recomputer-orin-j401.tar.gz mfi_recomputer-orin-j401

6. 刷写到目标机

6.1 目标机进 APX

lsusb0955:7523 NVIDIA Corp. APX

6.2 刷写命令

若本机已有解压目录,不要再 tar xpf

cd Linux_for_Tegra/mfi_recomputer-orin-j401
sudo ./tools/kernel_flash/l4t_initrd_flash.sh \
--flash-only --massflash 1 --network usb0 --showlogs

仅当另一台电脑只有 .tar.gz 时:

sudo tar xpf mfi_recomputer-orin-j401.tar.gz
cd mfi_recomputer-orin-j401
sudo ./tools/kernel_flash/l4t_initrd_flash.sh \
--flash-only --massflash 1 --network usb0 --showlogs
warning

如果刷到 recovery 或 APP 时出现 /mnt/external/...: Permission denied,这是 NFS 权限问题,解决方法见技术说明 B

6.3 刷写过程中正常现象

日志含义
p3768-0000-p3767-0000-a0.conf: 没有那个文件或目录--flash-only 下常见,镜像已预生成,可继续
rpcbind already running可忽略
blockdev: cannot open /dev/mmcblk0boot0Orin Nano 无该分区,常见无害
RCM-boot + SSH ready正常进入刷写
DTB ...-0005-nv-super.dtbSKU0005 正确
internal 多行 + Starting to flash to qspi正在刷目标板 QSPI
tar ... zstd ... nvme0n1p1_bak.img正在恢复 APP(最久,可能数十分钟)
Successfully flash the qspiQSPI 刷写完成
Successfully flash the external device外部设备刷写完成
Flashing success / Flash is successful刷写成功
warning

在出现成功结束提示前不要断电、不要拔线。

7. 刷后检查

刷写成功后释放 Recovery 按键或跳帽,再断电重启。若 lsusb 仍显示 0955:7523 APX,说明设备仍处于 Recovery,尚未进入系统。

正常启动后执行:

cat /proc/device-tree/model
ls /boot/kernel_tegra234*.dtb
ls /boot/*.dtbo | grep -E 'hdmi|imx219' || true

# 外设是否真的可用(比 model / dtbo 文件名更重要)
xrandr 2>/dev/null | head -20
lsusb | head
ip -br link
ls /boot/*.dtbo 2>/dev/null | head -40
sudo dmesg | grep -iE 'dtb|overlay|hdmi|tegra234' | tail -30

# 原 DevKit 用户环境是否还在(以 CUDA 为例)
nvcc --version
info

dmesg 无 sudo 时可能报 Operation not permitted,属权限问题,加 sudo 即可。

如何解读结果(SKU 0005)

1)/proc/device-tree/model 仍显示 DevKit —— 对 SKU 0005 是正常的

例如:

NVIDIA Jetson Orin Nano Engineering Reference Developer Kit Super

原因:目标板 conf 对 SKU 0005 选用的是 NVIDIA 的 tegra234-p3768-0000+p3767-0005-nv-super.dtb不会换成 tegra234-j401-*-recomputer.dtb,因此 model 字符串仍像官方 DevKit。不能单凭这行判断「刷错成 DevKit 包」。

2)/boot 里的 DTB 文件名

常见可见:

/boot/kernel_tegra234-p3768-0000+p3767-0000-nv.dtb
/boot/kernel_tegra234-p3768-0000+p3767-0005-nv.dtb

不一定能看到 *-0005-nv-super.dtb 文件名;实际启动 DTB 往往由 UEFI/QSPI 侧决定,/boot 列表只是参考。

3)grep hdmi|imx219 为空 —— 也不等于失败

Hybrid 刷完后,/boot/*.dtbo 里经常仍是 DevKit 备份带来的通用 overlay 列表,不一定出现 tegra234-dcb-p3767-0000-hdmi.dtbo 或 Seeed 摄像头 overlay。Seeed HDMI/摄像头相关配置更多在 目标板新生成的 QSPI / UEFI overlay 路径上生效。

4)真正要以「能不能用」为准

检查项正常示例
USB能枚举 Hub、鼠标、蓝牙、USB 网卡等(lsusb 有多设备)
有线网Classic: enP8p1s0 等为 UP;Super: 见技术说明 C
Wi‑FiwlP1p1s0UP
显示桌面可用;或 xrandr 有输出
用户环境原 DevKit 的用户、软件、数据仍在
CUDAnvcc --version 能跑通(本例 12.6),说明 APP 克隆完整

Classic 应重点验证 dual camera 配置(imx219-dual-seeed)。

实机:model / DTB

实机:原 DevKit 安装的 CUDA 仍可用

何时才需要改 extlinux.conf

仅当 HDMI / USB / 启动异常 时,再尝试在 /boot/extlinux/extlinux.confLABEL primary 下增加:

FDT /boot/kernel_tegra234-p3768-0000+p3767-0005-nv-super.dtb

(若 /boot 没有该文件,可先试 ...-0005-nv.dtb,或从 BSP 的 kernel/dtb/ 拷入后再指定。)

sudo reboot

若仍异常,改走第 8 节回退方案。

8. 回退方案(官方更稳妥)

若 Hybrid 刷机后分区/UEFI/外设异常:

  1. 按 Seeed 流程刷官方目标板 BSP(不要刷 DevKit mfi)。
  2. 从备份抽出 /homenvme0n1p1.tar.zst),或按 将 Orin Nano DK 的 /home 迁到 reComputer 操作。
  3. 在目标板上恢复 /home,再按需补装系统级软件(/usr/etc、Docker 等需另处理)。

优点:板级固件最干净。缺点:不是整盘 / 克隆。

9. 关键路径速查

类型路径(相对 Linux_for_Tegra/
DK mfimfi_jetson-orin-nano-devkit-nvme.tar.gz
Classic Bundle mfimfi_recomputer-orin-j401.tar.gz
Super Bundle mfimfi_recomputer-orin-super-j401.tar.gz
Classic confrecomputer-orin-j401.conf
Super confrecomputer-orin-super-j401.conf
HDMI DCBkernel/dtb/tegra234-dcb-p3767-0000-hdmi.dtbo
Classic 双 IMX219kernel/dtb/tegra234-p3767-camera-p3768-imx219-dual-seeed.dtbo
Super 四 IMX219kernel/dtb/tegra234-p3767-camera-p3768-imx219-quad-seeed.dtbo
J401 DTBkernel/dtb/tegra234-j401-p3768-0000+p3767-*-recomputer.dtb
SKU0005 DTBkernel/dtb/tegra234-p3768-0000+p3767-0005-nv-super.dtb

10. 流程总览

[主机] 解压 L4T + apply_binaries + nvbuild


[DevKit APX] backup -c jetson-orin-nano-devkit-nvme

├─►(可选)--use-backup-image → mfi_jetson-orin-nano-devkit-nvme

├─► 快照 backup_images_dk_sku0005
│ │
│ ├─ APP-only(删 QSPI)
│ └─► external APP

└─► [APX] 目标板 conf 生成 QSPI
│ │
│ ├─ Classic: recomputer-orin-j401 internal
│ └─ Super: recomputer-orin-super-j401-nvme external


组装 mfi_recomputer-orin-<target>


[目标板 APX] --flash-only


检查显示/USB/NVMe/用户环境

11. FAQ

Q: 目录和 .tar.gz 都有,还要解压吗?
A: 不要。有 mfi_recomputer-orin-* 目录就直接 cd 进去 --flash-only

Q: 目标板模块不是 0005?
A: 改 BOARDSKU,并按目标板 conf 里 p3767_super_overlay 选对应 DTB,再重新生成 QSPI。

Q: 只想保留 /home,不要整盘克隆?
A: 直接走第 8 节回退方案,更简单稳妥。

Q: 可以把 Classic Hybrid 包改名后刷到 Super 吗?
A: 不可以。两者 pinmux 和摄像头 overlay 不同,必须重新生成对应的 QSPI。

Q: 为什么不能直接使用 --use-backup-image
A: 它可能把 DevKit 的 QSPI0.img 一并复用。Hybrid 只应复用 APP。

Q: 源盘和目标盘容量不同怎么办?(Super)
A: GPT 必须按目标盘生成,只替换 APP 数据。还需确认 APP 解压后的实际占用小于新 APP 分区。

Q: Wiki DIY 示例为什么写 recomputer-orin-j401
A: 那是源机与目标同为 Seeed 板时的示例。源机是官方 DevKit 时,备份必须先用 jetson-orin-nano-devkit-nvme,再按本教程 Hybrid 适配目标板。

技术说明

技术说明 A. Super 保证首次启动无需现场修复

打包前还必须检查三个一致性条件:

  1. boot.imgroot=PARTUUID=... 与 external GPT 中 APP 分区的唯一 GUID 相同;
  2. DevKit APP /etc/fstab/boot/efi UUID 与新 esp.img 的 FAT UUID 相同;
  3. 若克隆的 DevKit 内核在 Super LAN7430 上触发 lan743x Oops,在 APP 中预置:
/etc/modprobe.d/blacklist-lan743x-super-hybrid.conf
blacklist lan743x
install lan743x /bin/false

前两项不一致分别会导致根分区挂载失败或进入 maintenance mode。不要把在 initrd 中用 sgdisk 改 PARTUUID 当成最终制作步骤;应重新成对生成 GPT 和 boot.img,并在归档中预修复 APP。

技术说明 B. NFS Permission denied

如果刷到 recovery 或 APP 时出现 /mnt/external/...: Permission denied,检查 mfi 路径的每一级父目录是否允许 NFS 客户端穿越。

例如用户主目录权限为 750 时,可在刷写期间临时改为 751,结束后立即恢复:

sudo chmod 751 /home/$USER
# 重新进入 APX 并刷写
sudo chmod 750 /home/$USER

751 只增加目录穿越权限,不允许其他用户列目录。不要改成 777

技术说明 C. Super lan743x 有线网限制

本例克隆的 DevKit RT 内核在 Super 的 LAN7430 上加载 lan743x 时发生 kernel Oops。最终 Hybrid BSP 默认禁用 lan743x(见技术说明 A 第 3 条),因此板载有线网暂不可用,Wi-Fi 不受影响。

这是源 APP/内核的驱动兼容性限制,不是 Super QSPI 或 pinmux 失败。生产使用有线网前应移植/升级兼容驱动并完成压力测试。

技术支持与产品讨论

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...