Skip to main content

Make DIY BSP from Orin Nano DevKit to reComputer Classic

This wiki shows how to clone a full development environment from an NVIDIA Jetson Orin Nano Developer Kit, build a Hybrid BSP that can be flashed to Seeed reComputer Classic (J4011/J4012, board config recomputer-orin-j401), and complete the flash.

It extends the same-carrier DIY BSP flow. If your source and target are both Seeed boards, use Creating a Custom BSP Package from Jetson Development Environment instead.

Related docs:

This guide uses JetPack 6.2 / L4T 36.4.3 as an example (module SKU 0005 = Orin Nano 8GB).

What You Are Building

GoalArtifactPurpose
A. Same-carrier clonemfi_jetson-orin-nano-devkit-nvme.tar.gzReflash DevKit with a full environment clone
B. Classic Bundlemfi_recomputer-orin-j401.tar.gzFlash Classic J4011: J401 board-level QSPI + DevKit full APP (including /home)
C. Safe fallbackOfficial J401 BSP + migrate /home onlyUse when Hybrid results are abnormal
danger

Do not flash the DevKit mfi_jetson-orin-nano-devkit-nvme package directly onto Classic.
Do not treat editing a single .dtb inside the mfi directory as board adaptation.

Prerequisites

Hardware

  • Source: Orin Nano Developer Kit (this example uses module SKU 0005 = Orin Nano 8GB, NVMe boot)
  • Target: Seeed reComputer Classic J4011/J4012 (J401 carrier; module should ideally also be 0005)
  • Host: Ubuntu 22.04 x86_64, USB Type-C cable (flash port)
  • Disk: reserve ≥ 100GB free space (backup + dual mfi + snapshots)

Host Dependencies

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

Before backup/flash:

sudo systemctl stop udisks2.service
sudo service nfs-kernel-server start
lsusb | grep 0955:7523 # must show NVIDIA Corp. APX

Board Comparison (This Example)

ItemDevKitClassic J4011
board-namejetson-orin-nano-devkit-nvmerecomputer-orin-j401
Config filep3768-0000-p3767-0000-a0-nvme.confrecomputer-orin-j401.conf
Pinmux...-dp-a03 (DP)...-hdmi-a03 (HDMI)
OverlayDevKit dynamic, etc.tegra234-dcb-p3767-0000-hdmi.dtbo + tegra234-p3767-camera-p3768-imx219-dual-seeed.dtbo
SKU0005 main DTB...-0005-nv(-super).dtbStill uses tegra234-p3768-0000+p3767-0005-nv-super.dtb

Example backup board_spec:

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

The reComputer Classic series has insufficient cooling to support MAXN Super mode. If you flash JetPack 6.2 onto a Classic device, do not enable MAXN.

1. Prepare the Linux_for_Tegra Workspace

Download the Seeed L4T working package from the table in Creating a Custom BSP Package from Jetson Development Environment (JetPack 6.2 / L4T 36.4.3 plus in this example).

sudo tar xpf L4T_36.4.3_plus.tar.gz
# Adjust the archive name to match your download

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

Verification:

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. Back Up the Full DevKit Environment

2.1 Put the Source Device in Recovery Mode

Connect the DevKit flash port to the host with a USB Type-C data cable and enter Recovery mode. On the host, lsusb should show 0955:7523 APX.

For Recovery mode steps, see: Flash JetPack to a Selected Product

During backup the device may briefly switch to 0955:7035 (Linux for Tegra / initrd). That is normal.

2.2 Backup Command

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

Do not use recomputer-orin-j401 for the first backup when the source is a DevKit. That will corrupt board_spec and later baselines.

2.3 Verification

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

You should see:

  • board_spec contains jetson-orin-nano-devkit-nvme
  • nvme0n1p1.tar.zst (or the later converted large APP) is GB-scale
  • QSPI0.img exists (this is DevKit QSPI; Hybrid must not reuse it as Classic QSPI)

Recommended: snapshot immediately:

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

3. Build DevKit Same-Carrier DIY BSP (Optional)

Put the device back into APX. On the host, lsusb should show 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

Artifacts:

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

For DevKit reflash only. Do not flash Classic with this package.

4. Required Reading: The QSPI Trap

With --use-backup-image, convert_backup_image_to_initrd_flash places:

Backup contentDestination
NVMe / APPtools/kernel_flash/images/external/
Source QSPI0.imgtools/kernel_flash/images/internal/

Therefore:

Wrong approachResult
Only edit mfi/.../rootfs or one .dtbIneffective (what actually flashes is bak / QSPI)
DevKit backup, then directly recomputer-orin-j401 + --use-backup-imageStill flashes DevKit QSPI (DP pinmux); HDMI/USB may be wrong
Change conf, then --flash-only--flash-only does not rebuild images from conf

What really differs on Classic J4011 is HDMI pinmux + DCB/camera overlay in 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"

For SKU 0005, the main DTB filename is still NVIDIA’s *-0005-nv-super.dtb. Do not force-switch to *-0000-recomputer.dtb (that path is for NX 16GB).

5. Hybrid B': Build the Classic J4011 Bundle

Core idea:

  1. APP: keep using the DevKit backup (full user environment)
  2. QSPI: regenerate with recomputer-orin-j401 (without --use-backup-image)
  3. Assemble into mfi_recomputer-orin-j401
DevKit backup APP  ──►  external/ (nvme0n1p1_bak.img, etc.)
J401 conf new QSPI ──► internal/ (QSPI shards, not DevKit monolithic QSPI0.img)
└──► mfi_recomputer-orin-j401(.tar.gz)

5.1 Prepare APP-only (Remove 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

Convert APP-only into initrd flash external images (use the backup tool’s convert step, or reuse the large APP already under tools/kernel_flash/images/external/ from the DevKit mfi pack step).

5.2 Regenerate QSPI with J401 conf

Device must be in APX. Module parameters should match the backup (this example: 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

Logs should show HDMI pinmux, e.g. tegra234-mb1-bct-pinmux-p3767-hdmi-a03.

Recommended: save the new QSPI internal:

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

5.3 Assemble mfi

The final directory should satisfy:

PathContent
mfi_recomputer-orin-j401/recomputer-orin-j401.confPresent
.../tools/kernel_flash/images/internal/New J401 QSPI (no DevKit monolithic QSPI0.img, or hash differs from DevKit; flash.idx is often multi-line shards)
.../tools/kernel_flash/images/external/nvme0n1p1_bak.imgGB-scale APP

Optional archive:

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

6. Flash to Classic J4011

6.1 Put Target in APX

lsusb0955:7523 NVIDIA Corp. APX

6.2 Flash Command

If the extracted directory already exists locally, do not run tar xpf again:

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

Only when another PC has only the .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

6.3 Normal Messages During Flash

LogMeaning
p3768-0000-p3767-0000-a0.conf: No such file or directoryCommon with --flash-only; images are prebuilt, continue
rpcbind already runningSafe to ignore
blockdev: cannot open /dev/mmcblk0boot0Orin Nano has no such partition; usually harmless
RCM-boot + SSH readyNormal flash entry
DTB ...-0005-nv-super.dtbCorrect for SKU0005
Multiple internal lines + Starting to flash to qspiFlashing J401 QSPI
tar ... zstd ... nvme0n1p1_bak.imgRestoring APP (longest step; may take tens of minutes)
warning

Do not power off or unplug until you see a successful completion message.

6.4 Post-Flash Checks (On Classic)

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

# Whether peripherals actually work (more important than model / dtbo filenames)
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

# Whether the original DevKit user environment survived (CUDA example)
nvcc --version
info

Without sudo, dmesg may report Operation not permitted. That is a permissions issue; use sudo.

On device: model / DTB

On device: CUDA installed on the original DevKit still works

How to Interpret Results (SKU 0005)

1) /proc/device-tree/model still shows DevKit — normal for SKU 0005

Example:

NVIDIA Jetson Orin Nano Engineering Reference Developer Kit Super

Reason: for SKU 0005, recomputer-orin-j401.conf selects NVIDIA’s tegra234-p3768-0000+p3767-0005-nv-super.dtb. It does not switch to tegra234-j401-*-recomputer.dtb, so the model string still looks like the official DevKit. Do not conclude “flashed the wrong DevKit bundle” from this line alone.

2) DTB filenames under /boot

Commonly visible:

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

You may not see a *-0005-nv-super.dtb filename; the actual boot DTB is often chosen by UEFI/QSPI. The /boot listing is reference only.

3) Empty grep hdmi|imx219-dual-seeed — not a failure by itself

After Hybrid flash, /boot/*.dtbo often still contains the generic overlay list from the DevKit backup. You may not see tegra234-dcb-p3767-0000-hdmi.dtbo or ...-imx219-dual-seeed.dtbo. Seeed HDMI/camera settings mostly take effect through the new J401 QSPI / UEFI overlay path.

4) Judge by “does it work?”

CheckHealthy example
USBHubs, mouse, Bluetooth, USB Ethernet enumerated (lsusb shows multiple devices)
Wired EthernetenP8p1s0 etc. are UP
Wi‑FiwlP1p1s0 is UP
DisplayDesktop works; or xrandr has output
User environmentOriginal DevKit users, software, and data remain
CUDAnvcc --version works (this example 12.6), indicating APP clone is intact

When to Edit extlinux.conf

Only if HDMI / USB / boot is abnormal, try adding under LABEL primary in /boot/extlinux/extlinux.conf:

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

(If that file is missing under /boot, try ...-0005-nv.dtb, or copy from BSP kernel/dtb/ first.)

sudo reboot

If still abnormal, use Section 7 Plan A (official J401 BSP + migrate /home).

7. Plan A Fallback (Official Path)

If Hybrid flash leaves partitions/UEFI/peripherals abnormal:

  1. Flash the official recomputer-orin-j401 BSP per Seeed’s flow (do not flash the DevKit mfi).
  2. Extract /home from backup (nvme0n1p1.tar.zst) or follow Migrate /home Data from Jetson Orin Nano Developer Kit to reComputer.
  3. Restore /home on Classic, then reinstall system-level software as needed (/usr, /etc, Docker, etc. need separate handling).

Pros: cleanest board firmware. Cons: not a full / disk clone.

8. Key Paths Quick Reference

TypePath (under Linux_for_Tegra/)
DK mfimfi_jetson-orin-nano-devkit-nvme.tar.gz
Classic Bundle mfimfi_recomputer-orin-j401.tar.gz
J401 confrecomputer-orin-j401.conf
HDMI DCBkernel/dtb/tegra234-dcb-p3767-0000-hdmi.dtbo
Seeed dual IMX219kernel/dtb/tegra234-p3767-camera-p3768-imx219-dual-seeed.dtbo
J401 DTBkernel/dtb/tegra234-j401-p3768-0000+p3767-*-recomputer.dtb
SKU0005 DTBkernel/dtb/tegra234-p3768-0000+p3767-0005-nv-super.dtb

9. Flow Overview

[Host] Extract L4T + apply_binaries + nvbuild


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

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

├─► snapshot backup_images_dk_sku0005
│ │
│ ├─ APP-only (remove QSPI)
│ └─► external APP

└─► [APX] J401 without --use-backup-image → generate QSPI


assemble mfi_recomputer-orin-j401


[Classic APX] --flash-only


check display/USB/NVMe/user environment

10. FAQ

Q: Both the directory and .tar.gz exist—do I still need to extract?
A: No. If mfi_recomputer-orin-j401/ exists, cd into it and run --flash-only.

Q: Target Classic module is not 0005?
A: Change BOARDSKU, pick the matching DTB per p3767_super_overlay in recomputer-orin-j401.conf, then regenerate QSPI.

Q: I only want to keep /home, not clone the whole disk?
A: Use Plan A (Section 7). It is simpler and more reliable.

Q: Why does the DIY BSP wiki example use recomputer-orin-j401?
A: That example assumes source and target are both Seeed boards. When the source is an official DevKit, backup must first use jetson-orin-nano-devkit-nvme, then follow this Hybrid Classic adaptation tutorial.

Tech Support & Product Discussion

Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.

Loading Comments...