Jetson Orin Nano massflush And Boot

Hi All,
I am using the Jetson Orin Nano 4G device.

The original Jetpack is 5.1.4.

The original Jetpack version had issues with backup and batch flashing, so I switched to Jetpack 6.1 for backup and batch flashing. After performing batch flashing with Jetpack 6.1, when I connect the Ethernet cable, the device attempts to boot via HTTP, which results in a very long boot time. Below is some of the boot log. When the Ethernet cable is not connected, the HTTP retrieval fails, and the device boots from the hard drive.

>>Start HTTP Boot over IPv6.
Error: Could not retrieve NBP file size from HTTP server.

Error: Unexpected network error.

>>Start HTTP Boot over IPv4.
Error: Could not retrieve NBP file size from HTTP server.

Error: Server response timeout.

>>Start PXE over IPv6.
PXE-E16: NO valid offer received.

>>Start PXE over IPv4.
PXE-E18: Server response timeout.

However, an interesting phenomenon occurs. Hard drive A boots from NVMe, while hard drive B, after being re-flashed, attempts to boot via HTTP. If I first boot from hard drive A and then switch to hard drive B, hard drive B will subsequently boot from NVMe. I am unsure why this happens.

During my research, I found that adding ADDITIONAL_DTB_OVERLAY="BootOrderNvme.dtbo"is supposed to modify the boot order.
The commands for backup and burning are as follows:

sudo ./tools/backup_restore/l4t_backup_restore.sh -e nvme0n1 -b -c jetson-orin-nano-devkit
sudo ADDITIONAL_DTB_OVERLAY="BootOrderNvme.dtbo" ./tools/kernel_flash/l4t_initrd_flash.sh --massflash 5 --network usb0 --no-flash --use-backup-image --external-device nvme0n1p1 -c ./tools/kernel_flash/flash_l4t_t234_nvme.xml  --showlogs  jetson-orin-nano-devkit nvme0n1p1
cd mfi_jetson-orin-nano-devkit/
sudo ADDITIONAL_DTB_OVERLAY="BootOrderNvme.dtbo" ./tools/kernel_flash/l4t_initrd_flash.sh --massflash 5 --network usb0 --flash-only --external-device nvme0n1p1 -c ./tools/kernel_flash/flash_l4t_t234_nvme.xml  --showlogs  jetson-orin-nano-devkit nvme0n1p1

However, after cloning and backing up using the following command, I encountered an error during re-flashing. The error message is as follows:

***************************************
*                                     *
*  Step 3: Start the flashing process *
*                                     *
***************************************
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
Waiting for target to boot-up...
…………[omit]
…………[omit]
Waiting for target to boot-up...
Waiting for target to boot-up...
Timeout
Device failed to boot to the initrd flash kernel. Please retrive the serial log during flashing to debug further.
Cleaning up...

I also attempted to modify the file kernel/dtb/L4TConfiguration.dts and exported it as kernel/dtb/L4TConfiguration.dtbo . However, the result was still unsuccessful. Upon booting, the system still prioritizes HTTP. The content of the L4TConfiguration.dts file is as follows. I swapped the positions of USB and NVMe in the file.

/dts-v1/;

/ {
	overlay-name = "L4T Configuration Settings";

	fragment@0 {
		target-path = [2f 00];

		board_config {
			sw-modules = "uefi";
		};

		__overlay__ {

			firmware {

				uefi {

					variables {

						gNVIDIAPublicVariableGuid {

							QuickBootEnabled {
								data = [00];
								non-volatile;
							};

							NewDeviceHierarchy {
								data = [01];
								runtime;
								non-volatile;
							};

							RootfsRetryCountMax {
								data = <0x3000000>;
								runtime;
								locked;
							};

							RootfsRedundancyLevel {
								data = <0x0>;
								runtime;
								locked;
							};

							AutoUpdateBrBct {
								data = <0x1000000>;
								non-volatile;
							};

							L4TDefaultBootMode {
								data = <0x1000000>;
								runtime;
								non-volatile;
							};

							ExposeRtRtcService {
								data = [00];
								runtime;
								non-volatile;
							};
						};

						gNVIDIATokenSpaceGuid {

							DefaultBootPriority {
								data = "nvme,usb,emmc,sd,ufs";
								locked;
							};
						};
					};
				};
			};
		};
	};
};  

So, I would like to ask if there is a way to boot from NVMe after backing up the image, rather than booting via HTTP.
Thank you for your assistance!

Sorry for the late response.
Is this still an issue to support? Any result can be shared?

Hi kayccc,
This issue has not been resolved yet. I added a script to the backup image to check at startup whether the first boot option is NVMe. If it is not, the script uses the efibootmgr command to change it to NVMe.

Hi,

Some questions to confirm:

  • Is your Orin Nano a dev kit or a custom board?

Also let me know your situation:

  • flash hard drive A with JP6.1 using sdk manager or manual flash
  • follow the README_backup_restore.txt workflow 3 to back up the drive A, and massflash the drive B

Result

  • drive A can boot from NVMe
  • drive B cannot boot from NVMe, but HTTP instead.

Is it above correct?

Thanks

Hi DavidDDD,

  1. I’m using a custom-designed board.
  2. The system is Ubuntu 22.04, built from the following files:
  • Jetson_Linux_R36.4.0_aarch64.tbz2
  • Tegra_Linux_Sample-Root-Filesystem_R36.4.0_aarch64.tbz2
    3.Backup and flashing were performed following Step 3 in README_backup_restore.txt, though some commands may have differed slightly. I documented the backup commands earlier.*
  1. Using the backup massflash method, the device boots via HTTP initially. After a few minutes, it automatically switches to NVMe boot.
    Sometimes the system boots normally from NVMe because efibootmgr lists boot options in reverse order , making NVMe (the last entry) effectively the first boot option . However, in other cases, HTTP ends up as the last entry, causing it to take priority instead.