Dual boot JetPack version - boot from NVME with latest JP4.5.1 while mmcblk has JP4.4.1

Continuing the discussion from How to Boot from NVMe SSD?:

Im trying to verify if its possible to “boot” into the NVME that has all rootfs components for JP4.5.1 while the eMMC has JP4.4.1

The reason, I have several fielded Xaviers with internet access that have NVME installed and seeking to upgrade from JP4.4.1 to JP4.5.1 without having to reflash the Xavier.

Iv been able to “kinda” boot from the NVME with JP4.5.1 in that after the xavier boots I can confirm with df -h ~/ that the file system is using the NVME. This was done by following the Nvidia guide and picking pieces from the forum to rsync the rootfs from eMMC to NVME.

I understand that the xavier may not truely boot from the NVME due to cboot rules, so Im ok if there are some elements such as the linux.img and initrd for JP4.5.1 also live on the eMMC.

But when I try this configuration with a Xavier that previously had JP4.4.1 flashed to the eMMC and install my configured NVME AND copy over the necessary boot items - the xavier fails to boot.

What im looking for is

  1. confirmation if this is possible
  2. what if any /boot/jp4.5.1 may also need to be located on eMMC
  3. what the extlinux.config file should look like.


What you can do over jp4.5.1 is just choosing where to mount the file system.

For example, you can mount the file system over the NVMe. However, the bootlaoder will still be on the emmc.

What you need to do is adding “root= _your_device_node”. to your extlinux.conf.

Also, to check such issue, you better using the uart serial console because it is the only way to dump bootloader log.

BTW, there is no guarantee that the bootloader from jp4.4.1 will be fully compatible with jp4.5.1 kernel. Theoretically it would work, but we cannot guarantee whether potential issue would happen or not.

Thanks for sharing. I found that just modify the root=your_device_node in the extlinux.conf was not enough. The boot gets stuck, and looking at the boot logs can see that the append does not work as expected for inserting root before the other boot elements: dtb, Image, initrd.image and System.map belonging to JP4.5.1 located on the nvme rootfs.

I needed to copy from the nvme (which is where the new JP4.5.1 rootfs is located) the boot elements listed above to the mmcblk0p1/boot that are included in the extlinux.conf.

Doing the above - so far testing has proved this method has worked for dual booting system. The mmcblk0p1 contains the rootfs for jp4.4.1 and the nvme contains rootfs with jp4.5.1

What you are doing is not related to rootfs. It is just as my previous comment. Maybe I didn’t say it clearly.

For example, you can mount the file system over the NVMe. However, the bootlaoder will still be on the emmc.

Since you cannot really “boot from” external drive, the kernel/kernel-dtb are all from the emmc. So actually only one of the system is a completed one.

For example, your emmc is now using kernel / dtb from jp4.5.1 to boot while its rootfs is still jp4.4.1. Maybe write more labels in extlinux.conf can let you select the file you want to use.

Thanks Wayne, could you clarify a bit more on the last sentence, or let me know if what you are saying is still the case given the information below for my configuration.

extlinux.conf - located on emmc

DEFAULT redhawk-custom-mmc-to-nvme

MENU TITLE  boot options

LABEL redhawk-custom-mmc-to-nvme
      MENU LABEL redhawk-custom-mmc-to-nvme kernel
      LINUX /boot/Image-4.9.201-rt134-r32.5.1-tegra-RedHawk-7.5.5-custom
      INITRD /boot/initrd.img-4.9.201-rt134-r32.5.1-tegra-RedHawk-7.5.5-custom
      APPEND ${cbootargs} quiet root=/dev/nvme0n1p1 rw rootwait rootfstype=ext4  
      FDT /boot/dtb-4.9.201-rt134-r32.5.1-tegra-RedHawk-7.5.5-custom/d3-rogue-166

The /dev/mmcblk0p1/boot/ directory also contains:


The files above are also located on the nvme rootfs.

When the xavier boots, i can confirm with uname -a that the xavier is using the correct kernel build, and can confirm with df -h / that the rootfs in use is located on the NVME.



Check your full bootloader log and you will understand what I am talking about.

Your extlinux is loaded from the emmc. That one on nvme is being ignored.

Yes, that is correct. The extlinux.conf located on the nvme is not in use.

What I was referring to is the other boot elements are also required to be located on the eMMC/boot directory.

I was under the impression that the APPEND ${cbootargs} quiet root=/dev/nvme0n1p1 would append ALL paths in the extlinux.conf: LINUX, INITRD and FTD. But, it is now evident that APPEND only is applied to the location of rootfs. Granted the root=/dev/nvme0n1p1 is only populated on the APPEND lines.

So I guess my question is, if I were to put modify the INITRD line to:
/dev/nvme0n1p1/boot/initrd.img.... would it look for it on the the NVME ?

I don’t think it would work since cboot has no capability to search things on your nvme drive.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.