JetsonHacks

Native Boot for Jetson Xaviers

With the advent of JetPack 4.6 (L4T 32.6.1) it is now possible to boot the Jetson AGX Xavier and Jetson Xavier NX from external storage. Looky here:

Background

In the JetPack 4.6 release Cboot now has NVMe driver support for the Jetson Xavier NX and Jetson AGX Xavier series. This enablesnables loading kernel, kernel-dtb and initrd from the root file system on NVMe.

There is also a new flashing tool which can flash internal or external media connected to the Jetson Xaviers. The new tool uses initial RAM disk for flashing and is up to 1.5x faster when flashing compared to the previous method!

If you have read the highlights from the press release, you already know all of that. Let’s talk about the new flashing tool in a little more detail.

For reference, the JetsonHacks scripts are in the JetsonHacks repository on Github: bootFromExternalStorage

You’ll need a NVMe drive in your Jetson to follow this tutorial. Only Gen3 drives have been tested, there appear to be issues with Gen4. These drives are available in different sizes of course, but 500GB seems like a good price/capacity. Here’s some suggestions (Amazon affiliate links):

This process does not require that the NVIDIA SDK Manager GUI application be present. These are all command line scripts that can be run in a Terminal. For many people, this better fits their workflow.

Flashing with initrd

The new flashing method uses initrd (initial RAM Disk) to flash both internal media and external media connected to a Jetson device. This method uses initrd and USB device mode. Initrd flash supports several workflows such as:

Note: Jetson AGX Xavier series devices use boot firmware that is stored only on internal eMMC memory. Consequently this type of device cannot boot from USB or NVMe SSD until its internal eMMC has been flashed.

As usual, tools this flexible have a little bit of a learning curve. There are a group of scripts in the Linux_for_Tegra/tools/kernel_flash directory which handle the above mentioned tasks. It is worth reading the README_initrd_flash.txt file to get a feel for what it takes accomplish the task you are trying to accomplish.

The flashing process will reformat the external drive on the Jetson. Make sure that you backup any data you want to keep.
Before flashing a Jetson Xaver NX Developer Kit, remove the SD card if present.

Preparing the Host

You will need to install dependencies on the x86 host to support flashing the Jetson. NVIDIA officially supports Ubuntu 16.04 and 18.04 for the flashing scripts. Then you will minimally need three archives:

Here are Direct downloadable links to JetPack 4.6 and L4T debian packages for Jetson

There are helper scripts in the JetsonHacks bootFromExternalStorage repository. The time for the entire process of downloading and flashing the Jetson will depend on the speed of your Internet connection and host computer. Here it was ~ 1 hour. To download the helper scripts and run them:

$ git clone https://github.com/jetsonhacks/bootFromExternalStorage.git

$ cd bootFromExternalStorage

$ ./install_dependencies.sh

$ ./get_jetson_files.sh

There are a couple of tricks here and there in the scripts to put everything in the right place.

Flashing the Jetson

Once the archives are expanded and put in the correct place, put the Jetson into Force Recovery mode. This is different on each Xavier. The video shows a Xaiver NX. You can use the command lsusb to determine if the host can ‘see’ the Xavier. There should be an entry with the NVidia Corp tag when the Xavier is connected to the host in Force Recovery mode. Default is to flash to the NVMe SSD. You will find this works best if you actually have a NVMe SSD installed (64GB minimum; more is better) before attempting to flash.

You can use the convenience script in the repository to flash the Jetson:

$ flash_jetson_external_storage.sh

It takes ~ 20 minutes to install everything in this manner. After flashing, the Jetson will be in ‘oem-config’ mode, ready to be setup. At this point, we’re done on the host side.

Note on Flashing

The script flash_jetson_external_storage.sh wraps a NVIDIA script which calls the initrd flashing script. After everything is setup, this boils down to:

$ ./nvsdkmanager_flash.sh –storage nvme0n1p1

For a Jetson Xavier NX, this flashes the internal QSPI-NOR memory and puts the rootfs and other partitions on the NVMe SSD. The Jetson AGX Xavier does not have QSPI memory, so the equivalent on eMMC is flashed instead.

Setting up the Jetson

You can choose to setup the Jetson in headless mode or desktop mode. In the video, we chose desktop mode. In either case, the next step is to install the NVIDIA JetPack packages on the Jetson. Switch from the host to the Jetson. Finish the Jetson configuration, then:

$ git clone https://github.com/jetsonhacks/bootFromExternalStorage.git

$ cd bootFromExternalStorage

./install_jetson_default_packages.sh

The default packages are from the meta-package nvidia-jetpack and includes all of our Jetson friends like:

plus a couple of other of packages to replicate the same experience as the default Xavier NX SD card.

Conclusion

With the convenience scripts, setting up your Jetson Xavier to boot from external storage should be straightforward. This is the NVIDIA ‘approved’ way, so Over The Air (OTA) updates should work going forward too.

Note that NVIDIA is working on the SDK Manager GUI application to replicate this type of functionality. That’s certainly worth checking out!

Notes

The JetPack tools from NVIDIA support Ubuntu 16.04 and 18.04 on the host machine. There are work arounds in these scripts for Ubuntu 20.04. However these are not well tested yet.
This method will work with the Jetson Xavier AGX Developer Kit. However, there appears to be an issue of oem-config not being called on first boot of the Jetson. The work around is to setup a default user. On the host, switch to the Linux_for_Tegra folder and execute:

# this command create username ubuntu and password ubuntu
$ sudo ./tools/l4t_create_default_user.sh -u ubuntu -p ubuntu </blockquote>

Then reflash the Jetson.

Initial Release

Skip to toolbar