Creating and deploying an OTA update package for Jetson Orin Nano boards


I’m looking for assistance with updating Jetson Orin Nano boards. I want to push an Update containing a new rootfs Image but the same L4t Version. The board is set up with A/B Partitions enabled (30GiB space for each Partition with an addtional UDA Partition of 50,6 GiB). I’ve set the environement variables BASE_BSP and TARGET_BSP to the same l4t directory.
Further i have used the following command to generate a custom rootfs Image on the Jetson Board:
sudo dd if=/dev/nvme0n1p1 of=/mnt/uda/rootfs.img bs=1M status=progress

Then i have copied it to the host and compressed it with:
mksparse -v --fillpattern=0 /path/to/rootfs.img /path/to/rootfs_sparse.img

Then i tried to generate the update payload package with following command:
sudo -E ROOTFS_AB=1 ./tools/ota_tools/version_upgrade/ -sr -o tools/ota_tools/version_upgrade/ --external-device nvme0n1 -S30GiB -f rootfs_sparse.img jetson-orin-nano-devkit R35-4

And got the following error:
generate_update_custom_roofs.txt (213.7 KB)

I’m using a custom board for Orin Nano.
Any help is highly appriciated

Hi ahmed.lassoued,

What’s your Jetpack version in use?

[   4.6166 ] End sector for APP_b, expected at: 122159070, actual: 0

It seems you have the size issue for APP_b partition.

If you want to update the new rootfs, why you clone the data from /dev/nvme0n1p1?
Please try just creating OTA package from your host w/o using -sr parameter.

Thanks for your response.

We are using Jetpack 5.1.2
We use the image from /dev/nvme0n1p1 to get our customized rootfs from a test board. This rootfs will be deployed on other boards in the field.
Here is the partitioning layout of all the boards (customized as well as target boards):
Partitioning layout.txt (1.6 KB)

We’ve noticed in the log that is called with another partioning file then the one we use for flashing the board which is: flash_l4t_nvme_rootfs_ab.xml

ROOTFS_AB=1 SKIP_REC_IMG=0 BOARDID=3767 FAB=000 BOARDSKU=0000 BOARDREV= FUSELEVEL=fuselevel_production CHIP_SKU=00:00:00:D3 ADDITIONAL_DTB_OVERLAY="BootOrderNvme.dtbo," BOOTDEV=nvme0n1p1  /home/vpcuser/Downloads/JetPack_5.1.2_Linux_JETSON_ORIN_NANO_TARGETS_A_B_Image/Linux_for_Tegra/ --no-flash --sign --no-systemimg --external-device -c "/home/vpcuser/Downloads/JetPack_5.1.2_Linux_JETSON_ORIN_NANO_TARGETS_A_B_Image/Linux_for_Tegra/tools/kernel_flash/flash_l4t_t234_nvme_rootfs_ab.xml" -S "30GiB" jetson-orin-nano-devkit nvme0n1p1

We don’t want to change the partition layout. Do we need to pass the partition format to the

Simply using sudo -E ROOTFS_AB=1 ./tools/ota_tools/version_upgrade/ --external-device nvme0n1 -S30GiB jetson-orin-nano-devkit R35-4 works just fine.

Okay, it seems you use a 128GB NVMe SSD with rootfs a/b enabled (30GiB for each slot).

What is “another partioning file” do you see in the log?
You should use the exact same partition layout file when you flash the board to generate OTA package.