Boot Orin AGX with rootfs on SSD and other partitions on eMMC (L4T 36.4)

I have an Orin AGX booting from its eMMC. I would like to move the rootfs on the SSD but keep all the other partitions on the eMMC (the A/B_kernel, A/B_kernel_dtb, esp, etc.).
Is this somehow already possible with L4T 36.4? If so, could you point me to some doc/scripts please?

I have found this, but am not 100% sure this fits our use case, nor if it does how it works.
From the doc it seems a minimal rootfs is flashed, but what is this rootfs and where can I find it?
Is the expectation that the NVMe drive has been pre-flashed with the rootfs separately or would we use another script to just flash it via the Orin?

If not already possible, any pointers to get us started in the right direction? Is there any potential issue you are aware of with this approach? In case this is relevant, we need to support OTA updates capsule updates too.

Hi jeanphilippe.arnaud,

Are you using the devkit or custom board for AGX Orin?

Yes, it should work for your use case to mount NVMe SSD as rootfs.

Have you flashed NVMe SSD before?
If not, you can just refer to Flashing Support — NVIDIA Jetson Linux Developer Guide 1 documentation to flash it first.

Hi KevinFFF,

Thank you for your prompt reply.

I am using the devkit and have managed to successfully boot with the rootfs on the SSD using the script above.

I had already prepared the partition on the SSD using our own scripts.

I wonder if you could shine some light on how the boot process works in this use case? I can see that during the flashing partition ‘APP’ is flashed with ‘system.img’, which is quite a small image (~60MB). ( Writing partition APP with system.img [ 63145884 bytes ] ).
However, I cannot mount this partition once booted to look at it, so am wondering what it is, what format it is in, where does it come from and how/when is it built?

Partition Configuration

sudo nvbootctrl --help

How to build or interrogate Root File System
This document has this note: “Completing an OTA update with a Debian package is not supported for systems that use rootfs redundancy.”

Please share full of the flash log for further check.

Please also share your partition layout file if you have any customization.

Here is the anonymised host-side flash log: l4t36_4_flash_emmc_rootfs_nvme_ano.txt (215.0 KB)

The partition layout file was not customised.

What I’m trying to understand is how it has been implemented. It seems that the APP partition is written with image ‘system.img’. I’d like to know what is in this file.

Another question that just came-up is whether the command used (sudo ./flash.sh jetson-agx-orin-devkit nvme0n1p1) allows for the A/B redundant mechanism to be used, and if not, if it can be made to use it?

generating system.img for booting... 
Making system.img... 
        populating rootfs from /tmp/tmp.RY7BDgMU4d ...  populating /boot/extlinux/extlinux.conf ... done.
        Sync'ing system.img ... done.
        Converting RAW image to Sparse image... done.
system.img built successfully. 

Please refer to above messages showing in your log that the system image is generated from <Linux_for_Tegra>/rootfs during flash.

Please add “ROOTFS_AB=1” in the flash command to enable redundant rootfs.