Remotely Updating the Rootfs for Jetson NX using NVMe

Hi there,

My aim is to be able to be able to remotely update the rootfs which I believe is possible from the documentation:
https://docs.nvidia.com/jetson/archives/r35.1/DeveloperGuide/text/SD/SoftwarePackagesAndTheUpdateMechanism.html#updating-jetson-linux-with-image-based-over-the-air-update

Specifically the section:

The OTA tool package can be used to create OTA payload package for … Updating the rootfs only

MyEquipment:

  • Jetson NX carrier board
  • Jetpack 5.0.2
  • Required to boot from an external NVMe SSD
  • Host computer Ubuntu 20.04

I followed workflow 4 in README_initrd_flash.txt to derive the following, to initially flash my NX:

sudo ROOTFS_AB=1 ./tools/kernel_flash/l4t_initrd_flash.sh \
      --external-device nvme0n1 \
      -c ./tools/kernel_flash/flash_l4t_nvme_rootfs_ab.xml \
      -S 8GiB  --showlogs \
      jetson-xavier-nx-devkit-emmc external

I booted it up and went through the initial setup, so at this point I believe I have a jetson that would be capable of receiving OTA.

Now if we move to my build server I built a new rootfs image, which would be the payload to send OTA. So I tried this:

sudo ROOTFS_AB=1 BOARDID=3668 FAB=100 BOARDSKU=0001 ./tools/kernel_flash/l4t_initrd_flash.sh \
      --external-device nvme0n1 \
      -S 8GiB \
      -c ./tools/kernel_flash/flash_l4t_nvme_rootfs_ab.xml \
      --no-flash \
      jetson-xavier-nx-devkit-emmc \
      external

This completed successfully, but it’s here that I start to get stuck.

I tried running the following, assuming that the rootfs image was bootloader/system.img

sudo -E ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh -sr -f bootloader/system.img jetson-xavier-nx-devkit-emmc R32-7

Which gave the output:

SUCCESS: generate binaries for OTA "boardid=3668;fab=100;boardsku=;boardrev=;fuselevel_s=1;chiprev=2;board=jetson-xavier-nx-devkit-emmc;rootdev=mmcblk0p1;signed_img_dir=images-R35-ToT"
SUCCESS: generate binaries for OTA "boardid=3668;fab=100;boardsku=;boardrev=;fuselevel_s=1;chiprev=2;board=jetson-xnx-devkit-emmc-R32i;rootdev=mmcblk0p1;signed_img_dir=images-R32i"
SUCCESS: generate binaries for OTA "boardid=3668;fab=100;boardsku=;boardrev=;fuselevel_s=1;chiprev=2;board=jetson-xnx-devkit-emmc-R32x-R35i;rootdev=mmcblk0p1;signed_img_dir=images-R32x-R35i"
SUCCESS: generate binaries for OTA "boardid=3668;fab=100;boardsku=;boardrev=;fuselevel_s=1;chiprev=2;board=jetson-xnx-devkit-emmc-R35A-R35i;rootdev=mmcblk0p1;signed_img_dir=images-R35A-R35i"
SUCCESS: generate binaries for OTA "boardid=3668;fab=301;boardsku=;boardrev=;fuselevel_s=1;chiprev=2;board=jetson-xavier-nx-devkit-emmc;rootdev=mmcblk0p1;signed_img_dir=images-R35-ToT"
SUCCESS: generate binaries for OTA "boardid=3668;fab=301;boardsku=;boardrev=;fuselevel_s=1;chiprev=2;board=jetson-xnx-devkit-emmc-R32i;rootdev=mmcblk0p1;signed_img_dir=images-R32i"
SUCCESS: generate binaries for OTA "boardid=3668;fab=301;boardsku=;boardrev=;fuselevel_s=1;chiprev=2;board=jetson-xnx-devkit-emmc-R32x-R35i;rootdev=mmcblk0p1;signed_img_dir=images-R32x-R35i"
SUCCESS: generate binaries for OTA "boardid=3668;fab=301;boardsku=;boardrev=;fuselevel_s=1;chiprev=2;board=jetson-xnx-devkit-emmc-R35A-R35i;rootdev=mmcblk0p1;signed_img_dir=images-R35A-R35i"

mount: /home/sr/jetson_setup/vc_mipi_nvidia/build/XavierNXSD_35.1.0/Linux_for_Tegra/R32x_R35-ToT_OTA/sysimg_tmp: wrong fs type, bad option, bad superblock on /dev/loop8, missing codepage or helper program, or other error.
Failed to mount /home/sr/jetson_setup/vc_mipi_nvidia/build/XavierNXSD_35.1.0/Linux_for_Tegra/bootloader/system.img.raw

but the error at the end suggests that I have the wrong file system type. Could you advise please on how to proceed?

Hi there,

Is there any update regarding this please?

Kind regards,
chh