The boot code prior to running Linux has to understand the initial filesystem. Basically boot code understands (has drivers for) ext4 and initrd. Initrd is more or less a self-contained mini filesystem.
Imagine the case of needing to boot to another filesystem type, e.g., XFS, and XFS isn’t understood by Linux without a kernel module (sure, you could compile it in, but this is for illustration)…then Linux would need the driver in the form of a module, but the module to understand XFS has to be read from XFS. A “chicken and the egg” dilemma.
Boot has a similar issue in handing over to a filesystem type it doesn’t understand. That understanding is required because it needs to load “/boot/Image” into RAM. This is why an initrd is used if Image isn’t on ext4…the filesystem type of initrd will always be a readable ext2/3/4, and then if Linux understands booting to overlayfs due to having all it needs, either integrated with the kernel or as modules, then boot code does not need to have that understanding (at this point Linux is running and understands overlayfs so CBoot does not need to). The initrd in this case adds content which gives the kernel Image whatever it needs to understand overlayfs and do the switch to the new filesystem type instead of making CBoot do this. It’s either an initrd, or writing/porting a driver for CBoot.
An initial ramdisk is just a compressed tar file of a small self-contained root filesystem. Xavier makes this more difficult due to content which now lives in partitions (and is signed) rather than in “/boot”. You’ll have to read more, and I have not yet succeeded at installing a custom initrd, but if you do find an initrd, then you can unpack it and see what is on it like this:
# sudo is because some files might be root permissions.
gunzip < initrd > initrd.cpio
# This unpacks a tree of files, start in an empty directory:
cpio -vid < initrd.cpio
One way of creating an initrd (perhaps after editing an existing initrd):
find . | cpio --quiet -H newc -o | gzip -9 -n > ../initrd_new
You’ll probably have to post a new topic to find out more about how to sign and install modified initrds on an Xavier.
On my wish list for NVIDIA boot would be adding drivers to CBoot:
USB3, DMA-capable serial ports, ethernet, USB SATA, and eSATA. Some of this already exists in one form or another. Overlayfs wouldn’t be a bad addition as well.