Skip to content

Instantly share code, notes, and snippets.

@polprog
Last active March 23, 2025 14:29
Show Gist options
  • Save polprog/218f98ba9f1c20a01657d0c0718e5a9c to your computer and use it in GitHub Desktop.
Save polprog/218f98ba9f1c20a01657d0c0718e5a9c to your computer and use it in GitHub Desktop.
Linux for Tegra on TX1 (2025)

Flashing jetson tx1 without using the nvidia SDK gui tool

Because it sucks so bad, it even fails to flash the TX1 as of march 2025. Also, it does not let you flash to the SD card, and there is a million other reasons not to use it

0. Files needed (sha512 sums)

017e6c0f5f903d0b3f50454b45d41a86b693a11c6cba37eec32e5e110e1f37ef4163b568a8d60ca51cba472c430567dd828bf03fee8a174442d1ac2239e25df9 Tegra_Linux_Sample-Root-Filesystem_R32.7.5_aarch64.tbz2
8c188dbc85eab38c589470e9e81c367e8a5b73e4f4f7450d825550fc7b750c2393bf7260f3c65b2e947ef74469b828831de168ec0bb9563b841c73048bce1dee Jetson-210_Linux_R32.7.5_aarch64.tbz2

You can get them from the NVIDIA SDK installer (select "download only"). Please note that it ONLY works in ubuntu 16.04 LTS, and if you are planning to run it in a VM, it only works with VMWare. VirtualBox USB passthrough is broken. Allocate at least 60GB for the virtual HDD.

1. unpack the SDK and sample rootfs to Linux_for_Tegra/rootfs (as per readme there)

tar -xjvf Jetson-210* 
cd Linux_for_Tegra
mkdir rootfs
tar -xjvf Tegra_Linux_Sample-Root-Filesystem_R32.7.5_aarch64.tbz2 -C rootfs/

2. create default user. The script would fail because there is no eula in the unpacked rootfs, so we create an empty file to pass the check (Nvidia legal team hates this man)

sudo mkdir -p rootfs/usr/share/doc/nvidia-tegra/
sudo touch rootfs/usr/share/doc/nvidia-tegra/L4T_End_User_License_Agreement.txt
sudo ./tools/l4t_create_default_user.sh -u nvidia -p novideo --accept-license

This creates the used nvidia with password novideo.

3. apply binaries (this installs some deb packages and pre-populates some files)

sudo ./apply_binaries.sh

4. flash the OS

sudo ./flash.sh jetson-tx1 mmcblk1p1

5. Copy the filesystem to the SD card, because apparently the flashing script does not do that. why would it?

sudo mkfs.ext4 /dev/sdb1   # adjust as needed
sudo cp -r rootfs/* wherever-you-mounted-sd-card/
sudo sync

The board failed to boot, booted up to the bash initrd.

Now do you wanna know why? Upon inspecting the available files in /dev/ from the initrd shell, I found that there is no /dev/mmcblk1p1, nor /dev/mmcblk1, which is the default root= parameter for SD card boot.

There is /dev/mmcblk2p1 and /dev/mmcblk2. So the current L4T distro as installed by ./flash.sh is BROKEN on TX1.

In U-boot shell over UART, I edited the cbootargs variable and added root=/dev/mmcblk2p1 at the end, then it booted correctly to the Ubuntu desktop. Good job nvidia.

To set this fix permanently, edit /boot/extlinux/extlinux.conf and set the APPEND line accordingly. I decided to remove "quiet" and place root=/dev/mmcblk2p1

TIMEOUT 30
DEFAULT primary-fixed

MENU TITLE L4T boot options

LABEL primary-fixed
      MENU LABEL primary kernel
      LINUX /boot/Image
      INITRD /boot/initrd
      APPEND ${cbootargs} root=/dev/mmcblk2p1

Now you need to connect the display and keyboard + mouse, boot the OS, and accept the EULA again in the first-run config wizard.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment