Updating Jetson Linux with Image-Based Over-the-Air Update
This wiki will use the reComputer J3010 as an example to demonstrate how to update Jetson linux from jetpack5.1.3 to jetpack6.0 with image-based over-the-air.
Prerequisites
- reComputer J4012/ J4011/ J3010 or J3011
- Ubuntu 20.04 Host Computer
- USB Type-C data transmission cable
Here, we use the reComputer classic series for demonstration. Other series of reComputers can also follow this tutorial to achieve OTA firmware upgrades.
1 Generate the System Image of JP5.1.3
1.1 Prepare JP5.1.3 BSP
First, you need to open a terminal window on the host PC and execute the following command to download the NVIDIA Jetpack 5.1.3 version BSP.
cd <root_dir>
mkdir jp5 && cd jp5
wget https://developer.nvidia.com/downloads/embedded/l4t/r35_release_v5.0/release/jetson_linux_r35.5.0_aarch64.tbz2
wget https://developer.nvidia.com/downloads/embedded/l4t/r35_release_v5.0/release/tegra_linux_sample-root-filesystem_r35.5.0_aarch64.tbz2
Where <root_dir>
is the root directory of the project.

1.2 Build System Image of JP5.1.3
Run the following command in the terminal window of the host PC to build the 5.1.3 system image.
tar xf jetson_linux_r35.5.0_aarch64.tbz2
sudo tar xpf tegra_linux_sample-root-filesystem_r35.5.0_aarch64.tbz2 -C Linux_for_Tegra/rootfs/
cd Linux_for_Tegra
sudo ./apply_binaries.sh
sudo BOARDID=<BOARDID> BOARDSKU=<BOARDSKU> FAB=<FAB> BOARDREV=<BOARDREV> CHIP_SKU=<CHIP_SKU> ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 -c tools/kernel_flash/flash_l4t_nvme.xml -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml --no-systemimg" --no-flash --massflash 5 --network usb0 jetson-orin-nano-devkit external
Jetson | BOARDID | BOARDSKU | FAB | BOARDREV | CHIP_SKU |
Orin Nano 4G | 3767 | 0004 | 300 | N.2 | 00:00:00:D6 |
Orin Nano 8G | 3767 | 0003 | 300 | N.2 | 00:00:00:D6 |
Orin Nx 8G | 3767 | 0001 | 300 | M.3 | 00:00:00:D4 |
Orin Nx 16G | 3767 | 0000 | 300 | G.3 | 00:00:00:D3 |
Please replace the corresponding variables based on the specific Jetson module you are using. For reComputer J3010:
sudo BOARDID=3767 BOARDSKU=0004 FAB=300 BOARDREV=N.2 CHIP_SKU=00:00:00:D6 ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 -c tools/kernel_flash/flash_l4t_nvme.xml -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml --no-systemimg" --no-flash --massflash 5 --network usb0 jetson-orin-nano-devkit external
Upon successful compilation, a system image package will be generated in the Linux_for_Tegra
directory.

1.3 Flash the JP5.1.3 to Device (Optional)
If you want to test this firmware on the Jetson device, you can refer to this wiki to flash the firmware into the Jetson device.
sudo tar xpf mfi_jetson-orin-nano-devkit.tar.gz
cd mfi_jetson-orin-nano-devkit
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --flash-only --massflash 1 --network usb0 --showlogs
2 Generate the OTA Package of JP6.0
2.1 Prepare the BSP
You need to open a terminal window on the host PC and execute the following command to download the NVIDIA Jetpack 6.0 version BSP.
cd <root_dir>
mkdir jp6 && cd jp6
wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/jetson_linux_r36.3.0_aarch64.tbz2
wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/tegra_linux_sample-root-filesystem_r36.3.0_aarch64.tbz2
wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/ota_tools_R36.3.0_aarch64.tbz2

2.2 Build System Image of JP6
Please refer to the steps in 1.2 for execution, and pay attention to modifying the variables therein.
tar xf jetson_linux_r36.3.0_aarch64.tbz2
sudo tar xpf tegra_linux_sample-root-filesystem_r36.3.0_aarch64.tbz2 -C Linux_for_Tegra/rootfs
cd Linux_for_Tegra
sudo ./apply_binaries.sh
sudo BOARDID=<BOARDID> BOARDSKU=<BOARDSKU> FAB=<FAB> BOARDREV=<BOARDREV> CHIP_SKU=<CHIP_SKU> ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 -c tools/kernel_flash/flash_l4t_nvme.xml -p "-c bootloader/generic/cfg/flash_t234_qspi.xml --no-systemimg" --no-flash --massflash 5 --network usb0 jetson-orin-nano-devkit external

2.3 Generate OTA Payload Package
Execute the following commands in the terminal window of the host PC.
cd <root_dir>/jp6
tar xf ota_tools_R36.3.0_aarch64.tbz2
cd Linux_for_Tegra
sudo BASE_BSP=<root_dir>/jp5/Linux_for_Tegra ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh --external-device nvme0n1 -S 80GiB jetson-orin-nano-devkit R35-5
After the command finished. You will get the ota_payload_package.tar.gz
in Linux_for_Tegra/bootloader/jetson-orin-nano-devkit.
3 Apply OTA Package on Device
3.1 Prepare work
Copy the generated OTA package(ota_payload_package.tar.gz
) to the Jetson device, and execute the following commands in the terminal window of the Jetson device.
scp <...>/jp6/Linux_for_Tegra/bootloader/jetson-orin-nano-devkit/ota_payload_package.tar.gz ~
wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/release/ota_tools_R36.3.0_aarch64.tbz2
sudo mkdir /ota
sudo mv ~/ota_payload_package.tar.gz /ota
tar xf ota_tools_R36.3.0_aarch64.tbz2
3.2 Apply OTA
cd ~/Linux_for_Tegra/tools/ota_tools/version_upgrade
sudo ./nv_ota_start.sh /ota/ota_payload_package.tar.gz
After this command finished successfully. Reboot the device.
Finally, the device upgrade from 5.1.3 to 6.0 successfully.
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.