USB 3 boot on Jetson Nano

Is it possible to boot L4T from a USB 3 disk on the Jetson Nano? If so, how?

I have tried copying (using rsync -rav) everything from the root partition of the nano SD card image onto an ext4 formatted SSD connected to my nano via a SATA3 -> USB3 adapter and I modified the extlinux config file to use /dev/sda1 instead of the SD card device but when I try booting I just get:

Waiting for root device /dev/sda1
...
Direct firmware load for tegra21x_xusb_firmware failed with error -2

I have read on these forums that this is could be either because u-boot doesn’t support USB 3 for Tegra machines yet and/or a problem with newer versions of udev. The disk I’m trying to boot off works fine under L4T otherwise, I just can’t boot off it.

I have noticed there is a root filesystem tarball so maybe there is a way to correctly apply that to a USB disk to make it boot on a Jetson Nano?

If this is a deficiency of u-boot, is work underway to get this working?

I was shocked to see the SD card image has TWELVE partitions! Why?

As for the rootfs, in the “Setting up your file system” section of the Linux Driver Package Development Guide:

https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide%2Frootfs_custom.html%23

It says:

“Navigate to the rootfs directory of the extracted NVIDIA driver package.
$ cd <your_L4T_root>/Linux_for_Tegra/rootfs”

However there is no directory called Linux_for_Tegra within the extracted Nano filesystem.

“Linux_for_Tegra/” is on the Ubuntu desktop host PC used for flashing. You won’t find that on any of the embedded systems. This file is actually created by the driver package, which in turn would be installed if JetPack ran…and I think the SDK Manager would download and run that. Basically a front end on top of a front end on top of a command line tool kit.

If you’ve not flashed or used the SDK Manager from a PC, then you won’t see this. Simply install the SDK Manager on your Ubuntu host PC and run once.

I’m afraid the bootcode cann’t jump correctly into the USB storage. For the Rootfs part maybe it’s ok. You can see there are some other partitions used in the eary boot.

I wrote to the NVIDIA engineers/devs to get the definitive status on this:

On Fri, Mar 29, 2019 at 02:12:09PM +0000, Dan MacDonald wrote:

Hi Thierry

I got my Jetson Nano a few days ago. I’ve not had much time to use it
yet but I’m hoping I will this weekend. It’s looking good so far.

The first/main thing I want to do is to get L4T booting off an SSD via
a SATA 3 to USB 3.0 adapter, but a search for doing this on the NVIDIA
forums says that u-boot for Tegra currently only supports USB2, or at
least that is (was?) the case for the TX2.

Is it possible to boot from USB3 disks in xhci mode on the Jetson Nano
with u-boot yet?

Hi Dan,

I think USB 2.0 is technically supported on Tegra210 in U-Boot, but we may not be routing the legacy USB 2.0 to any of the ports on Jetson Nano. I think for USB to work on Jetson Nano you have to use the XHCI, but that’s currently not working, I think primarily because it requires firmware to be loaded and we can’t bundle the non-GPL firmware with GPL U-Boot.
[Tom] I’m hoping to load the XUSB firmware via CBoot, before U-Boot loads, so the XHCI controller will be up & ready.

I’m adding Tom, who I think has been looking into this, but I’m not exactly sure about the details or the timeframe. Hopefully Tom will be able to shed some light on this.
[Tom] That’s all correct, on Nano the USB2 controller is only used for the microUSB port, for device-mode support (during RCM, and to present the SD-card using ‘ums 0 mmc 1’ in U-Boot), the HW team says there’s not enough power to use it in host mode. So the only ports available for that are the USB3 type-A ports, via the XHCI/XUSB controller. That has never been supported in Tegra U-Boot, so I’m looking into getting standard XHCI driver loaded and ports mapped/configured to support USB boot/USB disk access. That work is slated for the next Jetpack release, which is in June, I believe. I may have it working before then, depending on how complicated the port is, other priorities, etc.

Thierry

Anybody manage to get a an installation up and running on a usb3 drive? The sdcard is incredibly slow.

You sort of can but you will need to recompile the kernel and include the tegra usb firmware as well as leaving /boot on the sd card. The rest of the rootfs can be moved to a usb drive.

Have you gotten it to work yet?

Yes, using the method I described.

That’s awesome. Any chance you could do a little write up on how you did it? Even if it were in just a pastebin text file. Like what you changed when recompiling the kernel, how you specified to it to point to the external drive ect…

Would love a short (not that short) howto, too. I got mine running with /home and swap on the USB3 SSD. This is better, but could get some more improvement.

Here’s the /etc/fstab I used for this:


/dev/root / ext4 defaults 0 1
UUID=b8aace4a-94d5-417e-a15a-a0be904c7b71 /home ext4 defaults 0 2
UUID=8fc5bd25-0c7a-48ab-93ee-0986caaa72df none swap sw 0 0


The UUIDs are the ones of the partitions on the SSD, after mkfs. See here: https://superuser.com/questions/862994/how-to-enable-linux-swap-partition

By using UUIDs, it should not matter how many other drives will be connected.

Another avenue I looked into was simply attaching a key-E m.2 nvme SSD in the m.2 slot. First problem: There appear to be no key-E SSDs… :( This slot has PCIe x1, too, would be nice :)

Just FYI, if you have a booted system, then you can find UUID (and other useful information) via:

lsblk -f

@eousphoros How to recompile the kernel to include tegra usb firmware?

The following blog post (not my own) goes over booting from USB3, but still requires boot to be on the SD card. I have not attempted it yet on my dev kit: https://syonyk.blogspot.com/2019/04/nvidia-jetson-nano-desktop-use-kernel-builds.html

That blog post seems to cover the approach in detail, the zswap change also looks interesting. Thank you for sharing.

Thank you for sharing. Great read, and something for the next tool time.

This looks like exactly what I was looking for. Thanks for sharing. I’ll try it sometime this week and post back how it went. I already have a m.2 ssd in a usb 3 case.