Flashing Jetpack 4.6 to NVMe storage instead of internal eMMC

Starting with JetPack 4.6 initrd can be used to flash JetPack, this method is faster compared to previous ones. The company Ridgerun has created a guide on how to use this process.

This page is meant to help you complete this process using Syslogic hardware.

On Ubuntu Host:

  1. disable automount: "systemctl stop udisk2.service"
  2. install dependencies: "apt install libxml2-utils simg2img network-manager abootimg sshpass device-tree-compiler"
  3. Connect the jetson device in recovery mode to the host
  4. Go to the Target HW image folder: "cd /home/$USER/nvidia/nvidia_sdk/JetPack_4.6_<board>
  5. Download the Jetson Platform Fuse Burning and Secure Boot Documentation and Tools package from Nvidia https://developer.nvidia.com/embedded/linux-tegra-r3261
  6. unpack it: "tar xvjf sercureboot_r32.6.1_aarch64.tbz2"
  7. navigate to the Linux_for_Tegra directory: "cd Linux_for_Tegra"
  8. To flash a syslogic device, you need the configuration files for your system and put them into the right locations inside the Linux_for_Tegra folder
  9. Adapt External Storage Device Partition if necessary for your NVMe Device (https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/part_config.html#wwp140137)
  10. Flash the device with the following command: "sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1 -c ./tools/kernel_flash/flash_l4t_nvme.xml -S 8GiB  --showlogs jetson-xavier-nx-devkit nvme0n1p1"

where
<board-name> is the Syslogic Board Name (for example brla3, brma2-jetsontx, brma3n-nx,..)

<rootdev> is the device name on which to flash, for nvme it is "nvme0n1p1"

<external-partition-layout> is the partition layout of the external storage device. There are Nvidia samples under tools/kernel_flash which can be used as starting point

<external-device> is the name of the external storage device you want to flash, for nvme it is "nvme0n1"

<APP-size> is the size of the partition that contains the operating system in bytes. KiB, MiB, GiB shorthand are allowed, for example, 1GiB means 1024 * 1024 * 1024 bytes. This size cannot be bigger than "num_sectors" * "sector_size" specified in the <external-partition-layout> and must be small enough to fit other partitions in the partition layout.

<external-only> is a flag to flash only the external storage device, otherwise both internal and external devices will be flashed. Notice, that if you flash only the external device, the Jetson will boot back up to the internal storage and you will have to manually change the root=<rootdev> argument in the /boot/extlinux/extlinux.conf to boot from the external device. If you want to boot again from the internal storage you should mount the partition and change the /boot/extlinux/extlinux.conf of the internal storage filesystem.