tegra-xhci tegra-xhci: failed to init firmware from filesystem tegra21x_xusb_firmware

This is an extension of a post from https://devtalk.nvidia.com/default/topic/923800/jetson-tx1/boot-from-sd-card/

A few months back I was able to successfully boot Jetson TX1 with an SD card. Recently I had to boot from SD card again so I followed the instructions from the previous post but this time using the most recent version.

However I get this error:

tegra-xhci tegra-xhci: failed to init firmware from filesystem tegra21x_xusb_firmware

I am not sure why this is happening. I’ll copy the instructions from the previous post for convenience:

  1. Make sure that your SD card is inserted, formatted with ext4 file system and is not currently mounted.

  2. Download the driver toolkit and the sample file system from https://developer.nvidia.com/embedded/linux-tegra

  3. Extract the downloaded files, mount the SD card and extract the sample file system to it.

$ sudo tar xvpf Tegra210_Linux_R23.2.0_armhf.tbz2
$ sudo mount /dev/mmcblk1p1 Linux_for_Tegra/rootfs
$ cd Linux_for_Tegra/rootfs
$ sudo tar xvpf ../../Tegra_Linux_Sample-Root-Filesystem_R23.2.0_armhf.tbz2
  1. Run apply_binaries.sh:
$ cd ..
$ sudo ./apply_binaries.sh
  1. On your Jetson TX1, open up /boot/extlinux/extlinux.conf in a text editor and add an entry to it pointing to the installation on the SD card. Mine looks as follows:
TIMEOUT 30
DEFAULT sdcard

MENU TITLE p2371-2180 eMMC boot options

LABEL primary
      MENU LABEL primary kernel
      LINUX /boot/Image
      FDT /boot/tegra210-jetson-tx1-p2597-2180-a01-devkit.dtb
      APPEND fbcon=map:0 console=tty0 console=ttyS0,115200n8 androidboot.modem=none androidboot.serialno=P2180A00P00940c003fd androidboot.security=non-secure tegraid=21.1.2.0.0 ddr_die=2048M@2048M ddr_die=2048M@4096M section=256M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb no_console_suspend=1 debug_uartport=lsport,0 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=${lp0_vec} nvdumper_reserved=${nvdumper_reserved} core_edp_mv=1125 core_edp_ma=4000 gpt android.kerneltype=normal androidboot.touch_vendor_id=0 androidboot.touch_panel_id=63 androidboot.touch_feature=0 androidboot.bootreason=pmc:software_reset,pmic:0x0 root=/dev/mmcblk0p1 rw rootwait

LABEL sdcard
      MENU LABEL sdcard kernel
      LINUX /boot/Image
      FDT /boot/tegra210-jetson-tx1-p2597-2180-a01-devkit.dtb
      APPEND fbcon=map:0 console=tty0 console=ttyS0,115200n8 androidboot.modem=none androidboot.serialno=P2180A00P00940c003fd androidboot.security=non-secure tegraid=21.1.2.0.0 ddr_die=2048M@2048M ddr_die=2048M@4096M section=256M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb no_console_suspend=1 debug_uartport=lsport,0 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=${lp0_vec} nvdumper_reserved=${nvdumper_reserved} core_edp_mv=1125 core_edp_ma=4000 gpt android.kerneltype=normal androidboot.touch_vendor_id=0 androidboot.touch_panel_id=63 androidboot.touch_feature=0 androidboot.bootreason=pmc:software_reset,pmic:0x0 root=/dev/mmcblk1p1 rw rootwait

Note how the sdcard entry is set to default.
Save the config file and reboot your Jetson. It should now load into the L4T installation on your SD card.
You could choose which OS to boot via the serial console.

If your L4T version was prior to R24.2 the initrd was not used; starting at R24.2+ an initrd is used and contains some firmware. Notice that although there is a “/boot/initrd” file in earlier releases, extlinux.conf did not use them; on R24.2+ you will see this key/value pair:

INITRD /boot/initrd

Are you booting R24.2 or newer? If so, that entry is missing in your extlinux.conf file.

Ah I see.

On the board, I have L4T version prior to R24.2 and I’m trying to boot R24.2 with my SD card.
I’m using the old version of L4T because I need 32bit ubuntu - later versions only support 64 bit.

Is there a way to still boot without initrd?

If an initrd was required it still is. You could add the initrd key/value pair back in, or else compile the kernel with all of the provided features of the initrd integrated (versus module).

Note that so long as you flashed R24.2 to eMMC the location to find kernel and initrd are on the eMMC “/boot”, not the SD card. The boot loader would look there for configuration and files to load prior to handing over to the kernel, so it would just be a matter of something like this as the edit:

LABEL sdcard
      MENU LABEL sdcard kernel
      LINUX /boot/Image
      <b>INITRD /boot/initrd</b>
      FDT /boot/tegra210-jetson-tx1-p2597-2180-a01-devkit.dtb
      APPEND fbcon=map:0 console=tty0 console=ttyS0,115200n8 androidboot.modem=none androidboot.serialno=P2180A00P00940c003fd androidboot.security=non-secure tegraid=21.1.2.0.0 ddr_die=2048M@2048M ddr_die=2048M@4096M section=256M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb no_console_suspend=1 debug_uartport=lsport,0 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=${lp0_vec} nvdumper_reserved=${nvdumper_reserved} core_edp_mv=1125 core_edp_ma=4000 gpt android.kerneltype=normal androidboot.touch_vendor_id=0 androidboot.touch_panel_id=63 androidboot.touch_feature=0 androidboot.bootreason=pmc:software_reset,pmic:0x0 root=/dev/mmcblk1p1 rw rootwait

Then make sure the initrd is on the eMMC “/boot” directory since that is where this example key/value pair tells u-boot to find the file.