Boot from MicroSD on USB Hub

I have a custom carrier board that uses default Jetson developer kit build for Jetpack 4.6. I want to boot from a MicroSD that is inserted in a USB Hub. Ordinarily, I copy the rootfs onto external media such as an external m.2 nvme or microUSB using the procedure found herehttps://github.com/jetsonhacks/rootOnNVMe, but I change the device name. This does not appear to work when microSD is using a USB port and the rootfs still boots using internal storage.

How can I get my jetson nx to boot from /dev/sdb1?

I have changed the boot order to prioritise USB. Below is my dmesg log.
dmesg.txt (138.4 KB)

Do you want to mount rootfs on this USB device or you want to totally boot kernel+ extlinux.conf from it?

If you want to boot kernel + extlinux.conf from it, then you should share the uart log but not dmesg.

I believe it is loading kernel and extlinux.conf from microSD (on USB Hub). I am trying to get the method described in this post How to Boot from NVMe SSD? - #46 by jocover - although this one is based on copying everything to an external SSD.

Here’s the UART log from power up.
uart-log.txt (42.4 KB)

Hi,

Please try to follow the “Flashing to a USB Drive” section in below document and prepare the rootfs on your device.

https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3261/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/flashing.html#wwpID0E01O0HA

Current situation is:

  1. The method to prepare a usb device is not correct. (It does not matter it is sdcard or not, since it is on usb interface, it is a usb device to jetson).
  2. We don’t know whether cboot is able to detect (1) when it is on a micro sdcard on that usb device. So we need to make sure (1) is correct first.

@WayneWWW im suck on this part of the procedure. See image.

What do I put for “board”?
Is “sda1” the name that my host has given (sdd1) or is it the one that the Jetson NX will ultimately use when I reinsert the USB (sdb1)?

Have you ever flashed your jetson NX with flash.sh before? Only users who didn’t flash with flash.sh would ask this question… so I want to make sure it first.

And sda1 indicates the device which will mount rootfs. You need to modify it to match your usb device.

For example, after you boot up, you see your usb device as sdc1, then you need to write it as sdc1.

I usually use connect tech’s procedure for flashing with flash.sh. In this instance, it was always flashing to either the internal storage or the microSD. I’ve not used the Nvidia procedure of flashing to a usb before.

I feel it has not much difference. There is no special trick in those “ConnetTech’s procedure”, since you are still using flash.sh… I mean the board config is same on their case and what you are doing now.

It has no point to change it to something else just because you are running “nvidia procedure”. If you use board A, then keep using board A config in your flash.sh.

Ok noted… so what do I put for “board”. The Nvidia procedure explains nicely mostly about all the other commands but doesn’t say what to put for board

What exactly did this “ConnectTech prodcedure” tell you to run? Didn’t you say you also run flash.sh in their procedure?

I’ll check their notes.

Is it potentially different for each board manufacturer ?

How thing works here is… basically you would see lots of “xxxx.conf” under your Linux_for_Tegra folder.

The “xxxx” is the board name in use by flash.sh.

For example, if I create a jetson123.conf, then I can run command

sudo ./flash.sh jetson123 mmcblk0p1 to flash the board.

Each board vendor has their own board configuration, so they would create their own board config and replace the configuration inside each file…

Thus, I would say 80% of custom board would have their own board config. The rest 20% cases could be those board vendor claim their board could be supported by sdkmanager… In those cases, they don’t need special board config.

Thus, please figure out what is ConnetTech’s instructions first if you are using their board instead of NV devkit.

Oh I understand now and I know what I would use now for a connect tech board.

However, this is a custom board that has been built based on the dev kit config. What would I use if I were using the dev kit ?

There should be some jetson-nx-xxx.conf under your Linux_for_Tegra.

If you use emmc module, then use that one has emmc as suffix.
If you use sdcard module, then use that one has “devkit” in its name.

Ok I did the “flash drive manually for booting” procedure and things seemingly went fine. However, when I put the USB back into the NX, it still didn’t boot from USB. See attached UART log.

uart-log.txt (13.1 KB)

Then unfortunately, this setup (micro sd on usb hub) is not able to be detected by cboot.

Please try to use usb drive instead.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.