Boot R28.1 from SD card

Folks,

I am having difficulty in booting R28.1 from SD card .
I installed Jetpack 3.1 on my Tx1 eMMC (followed instructions for jetpack installation and got success message. After installation I tried my cameras (IMX274 from leopard) and found them working. Then I copied everything from emmc to SD card, and changed exlinux.config file to point primary boot to SD car.

When I reboot, the boot process seems to get stuck with attached message.

8.127556 xhci-tegra 700900000.xusb : cannot find firmware ...retry after 1 second
9.135729 xhci-tegra 700900000.xusb : Direct firmware load for tegra21x_usb_firmware failed with error -2
9.149308 xhci-tegra 700900000.xusb : Falling back to user helper
9.159005 xhci-tegra 700900000.xusb : cannot find firmware ...retry after 1 second
10.67772 xhci-tegra 700900000.xusb : Direct firmware load for tegra21x_usb_firmware failed with error -2

Any idea where this could be coming from ?

Thanks

When you edited extlinux.conf I assume the only change was from “root=/dev/mmcblk0p1” to “root=/dev/mmcblk1p1”…is this correct?

On the SD card, did you partition it with a GPT aware tool, e.g., gdisk? Or is it old style BIOS with fdisk (both should work, but GPT is what is expected)?

When you formatted your SD card, was it from another host, or was it from the Jetson? The Jetson will always do the right thing, but some hosts will add some 64-bit extensions which U-Boot does not understand (U-Boot is from the 32-bit days).

When you copied the file system, what was your exact command? Was your command aware of not crossing file system boundaries (e.g., you wouldn’t want it to cross “/sys” which isn’t a real file system)?

Hi Linuxdev

Thanks for your response.

  1. I edited extlinux.conf to make following change…
Original --> root=/dev/mmcblk0p1
New      --> root=/dev/sda1
  1. I formatted SD card on Tx1. I chose ext4 for linux.

  2. Then I did sudo cp -ax /

Basically, I got these instructions from Jim’s Video on jetson hacks…

http://www.jetsonhacks.com/2017/08/05/develop-on-ssd-nvidia-jetson-tx1-and-jetson-tx2/

Thanks

sda is a regular hard disk, the SD card is mmcblk1, the first partition is mmcblk1p1. SSD is a solid state hard drive, but uses SATA…the SD card differs in naming convention.

Check the SD card from the Jetson:

sudo gdisk -l /dev/mmcblk1p1

Ah !
I guess I followed Jims case verbatim. He was also booting from SD card in that video. Anyway it is is mmcblk1p1. Thanks your help linuxdev. It is resolved.

Hello,

I have the same issue while installing Jetpack 3.2 to USB SSD in TX1.
Basically, I did the steps in the following.

  1. I edit extlinux.conf to replace root=/dev/mmcblk0p1 with root=/dev/sda1.
  2. I use disks command in TX1 to format my SSD to ext4. Here is the output of “gdisk -l”

GPT fdisk (gdisk) version 1.0.1

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 937703088 sectors, 447.1 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): FF701A00-DBA4-427D-8621-8CC6E40D93CC
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 937703054
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number Start (sector) End (sector) Size Code Name
1 2048 937703054 447.1 GiB 8300

I appreciate if you could give me any advice to solve this.

Thanks

I won’t be able to see the R28.2 install until this weekend, but do you have a serial console log? This would show what is going on during U-Boot (it’s also a lot safer to add alternate boot entries instead of simply replacing the only boot entry). See:
[url]http://www.jetsonhacks.com/2015/12/01/serial-console-nvidia-jetson-tx1/[/url]

It appears that you are pointing the root=/dev/sda1 when your disk is at: /dev/sdb
This is probably less than optimal

Hi,

Thank you very much for your quick replies.

I do not have serial cable, so I’m going to order it.
Once I receive it I’ll post the log.

Sorry for getting you confusion.
When I ran gdisk, I connectd my SSD to host, not TX1.
and run gdisk in host. Because I could not boot my TX1 in that time.
This is why gdisk said /dev/sdb.

Thanks.

While I’m waiting my serial cable, I tried a couple of thing.
I downgraded to R28.1 and followed instructions from Jim’s video which is mentioned the above.
I still see the same error messages and can not boot.
Then, I switched my USB SSD disk to 16GB USB memory stick, but still the same errors.

So my question is, can I use USB memory stick for boot device ?

I’m worried that my TX1 board has some issues.

Thanks

I am not able to test USB stick boot at the moment, but there is one really big catch when booting anything USB, and it isn’t really an error other than setup needing to change…

USB mode in U-Boot is USB2. If the Linux kernel runs USB2, then continuity of service of any USB2 device remains unbroken as control transfers from U-Boot to Linux. If Linux sets the port up as USB3, then all devices on that port must re-enumerate as Linux starts…this means a break in continuity of service…and if the service is providing your root partition, then your whole file system essentially goes away. For this case you’d need to set up Linux to remain in USB2 mode (not ideal for speed, but making U-Boot run USB3 is difficult at best).

I suggest that after a normal boot you run “lsusb -t”. If any “root_hub” has speed “5000M”, then that particular root_hub is USB3. If the root_hub has “480M”, then it is in USB2 mode. I’m not sure which connectors belong to which root_hub, nor which connectors are visible in U-Boot (I can’t find out right now I’m rearranging a few things here), but it is quite possible your root_hub is set up as USB3 in Linux.

Ah!

I though Jim’s video connects SSD by USB3.0, but it’s my misunderstand.
I just realized, he connects it by SATA.

Linuxdev,
I just want to confirm my understanding of your commnets.
You said:

  1. Additional steps are required to set up booting from USB SSD.
  2. And even I do these, I can not use USB3 for booting SSD, because I have to
    set up Linux to remain in USB2 mode.
    Correct ?

Here is the result of “lsusb -t”. As you said, one of “root-hub” has speed “5000M”.

$lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-tegra/4p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci-tegra/5p, 480M

I’m considering to swich to SATA SSD, but just curiosity, how can I set up to remain linux in USB2 mode ? Do I need to reconfigure and rebuild the kernel ? Or change some configration files ?
I’m grald if you could tell me the pointers for it.

Thanks.

If you mount the drive after boot, e.g., to “/usr/local”, then you can use USB3. If the drive is to be used as a root file system, then access to the drive must not be lost during boot…thus, because U-Boot has no USB3 driver, you cannot use USB3 on that port when booting to a USB device.

Typically USB3 versus USB2 can be controlled with kernel command line…at least in older releases. It may require a device tree change in R28.1+ (I have not tried). What do you see from:

cat /proc/cmdline

Presumably the “usb_port_owner_info=0” sets this (and possibly lane_owner_info). In the device tree there is a “chosen” block which has “bootargs” controlling this. Part of the old extlinux.conf APPEND key/value pair still exists (such as for naming rootfs), but most of this must now be done through this device tree change. Before telling you to change your device tree (you could extract from “/proc/device-tree/”, edit, and then put the edit back in the “kernel-dtb” partition) it would be good to know if this will actually achieve USB2 mode.

For a TX1 in R28.1, can someone here suggest if changing “usb_port_owner_info=0” to “usb_port_owner_info=2” in the kernel-dtb device tree would cause the USB3 port to remain as USB2 all the way from U-Boot to running under Linux?

Hi Linuxdev,
Thank you very much for your information.
I’ll try when I receive serial cable.