Booting Xavier AGX from SD card

Hi everyone,

we want to boot the Xavier AGX (with the development kit carrier board) from SD card to be able to quickly swap software releases. We followed these instructions, however while flashing succeeded, booting was never successful. Instead of the Ubuntu login, we get:
cannot set terminal process group (-1): Inappropriate ioctl for device

Looking at the file system it also looks very minimal and does not look like the rootfs that was copied to the SD card. Since others seemed to be successful I must be taking a wrong turn somewhere.

Any help is greatly appreciated!


Please use method from here.

Hi, WayneWWW.

I’m using Jetson AGX Xaiver and trying to boot using SD Card.
I tried to follow the steps in the link.

However, there are some part that I could not understand clearly.
I commented with bold font below.
please let me know if I’m doing wrong.

1.1 Plugin the card to M.2 slot on XNX and boot up

Here I insert SD card on Jetson Xavier and boot up

1.2 Download packages to XNX and generate rootfs

// download L4T Driver Package (BSP) and Sample Root Filesystem
L4T | NVIDIA Developer

  // put the packages in same folder and do
  $ sudo tar xpf Tegra186_Linux_R32.4.4_aarch64.tbz2
  $ cd Linux_for_Tegra/rootfs/
  $ sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_R32.4.4_aarch64.tbz2
  $ cd ../
  $ sudo ./

I followed above on JETSON.

2. Create GPT and partiton using gdisk on the device:

  $sudo gdisk /dev/nvme0
  "o" -> clear all current partition data
  "n" -> create new partition
  "1" -> partition number /dev/nvme0n1p1
  "40M"first sectors -> Press enter
  "Linux filsystem" -> using default type
  "c" -> partition's name "PARTLABEL"
  "w" -> write to disk and exit. 

3 Get partition UUID and copy rootfs to the device:

  $ sudo mkfs.ext4 /dev/nvme0n1p1
  // get partition UUID for step 4
  $ sudo blkid /dev/nvme0n1p1
  $ sudo mount /dev/nvme0n1p1 /mnt
  // go to rootfs directory
  $ cd rootfs/
  // copy rootfs
  $ sudo tar -cpf - * | ( cd /mnt/ ; sudo tar -xpf - )
  $ sudo umount /mnt

I followed above on JETSON. nvme0 and nvme0np1 are switched to mmcblk1 and mmcblk1p1

4. On host Linux PC, copy PARTUUID to bootloader/l4t-rootfs-uuid.txt

Here is says ‘on host linux PC’, then should I actually download ‘L4T Driver Package (BSP) and Sample Root Filesystem’ on host PC but not on Jetson…?
and there was no bootloader/l4t-rootfs-uuid.txt file.

5. Flash the board with rootfs device:

$ sudo ./ jetson-xavier-nx-devkit-emmc external

in my case sudo ./ jetson-xavier external

6. Done

failed to flash

**find: ‘/home/test/Jetson/Tegra186_Linux_R32.5.0_aarch64/Linux_for_Tegra/rootfs/lib’: No such file or directory** **cp: cannot stat '/home/test/Jetson/Tegra186_Linux_R32.5.0_aarch64/Linux_for_Tegra/rootfs/bin/mv': No such file or directory** **failed command: cp -fv /home/test/Jetson/Tegra186_Linux_R32.5.0_aarch64/Linux_for_Tegra/rootfs/bin/mv /home/test/Jetson/Tegra186_Linux_R32.5.0_aarch64/Linux_for_Tegra/bootloader/ramdisk_tmp//bin/mv**

That example is for NVMe case. Part of work is done on jetson and rest of work is on host.

And when it comes to something related to “flash” or actually use tool in Linux_for_Tegra/bootloader, that is definitely on host side.

What that example doing is

  1. Check the nvme partition uuid on device
  2. Mount the rootfs on nvme on device
  3. Go back to host side and flash it to tell device to use nvme as root device.

Actually, if it is for sdcard, you can do that totally on your host. We put nvme on device is just to check the uuid, because not every user’s host has slot for nvme.

As for that l4t-rootfs-uuid.txt, please create a new file with this name manually.