Install JetPack 4.2 SDK Components w/o Micro USB Port

Using the JetPack 4.2 SDK Manager I successfully flashed my TX2 and while the installation of the SDK components was happening I accidentally jostled the micro USB cord and broke the the micro USB port. So now I need to install the components (CUDA 10.0, Nsight, etc.) without having a micro USB port on the TX2. How can I do that?

You’re in luck. During a normal flash plus package operation flash occurs first over the micro-B USB. Then the TX2 reboots, and package addition goes purely over the wired ethernet (you only need the micro-USB for flash). There is no mechanism to automatically report IP address if you don’t go immediately from flash to packages, so you’ll have to tell JetPack what IP address to use (see eth0 in the “ifconfig” output on the TX2).

On the other hand, you will not be able to flash a new L4T/Ubuntu version to the TX2. Without that connector flash cannot work, and the Ubuntu mechanism of upgrading from Ubuntu 16.04 to 18.04 will break the Jetson with no means of access. One thing you might consider is keeping a backup copy of the rootfs on SD card as an alternate boot medium, and then adjusting the extlinux.conf to make it easier for serial console to name SD card or eMMC boot.

As an example, you would edit to add a second entry on the eMMC “/boot/extlinux/extlinux.conf” like this:

LABEL primary
      MENU LABEL primary kernel
      LINUX /boot/Image
      APPEND ${cbootargs} root=/dev/mmcblk<b>0</b>p1 rw rootwait rootfstype=ext4

LABEL sdcard
      MENU LABEL SD Card
      LINUX /boot/Image
      APPEND ${cbootargs} root=/dev/mmcblk<b>1</b>p1 rw rootwait rootfstype=ext4

Once you replicate this onto the SD card first GPT partition, the “/boot/extlinux/extlinux.conf” edit of the SD card would go like this:

LABEL primary
      MENU LABEL primary kernel
      LINUX /boot/Image
      APPEND ${cbootargs} root=/dev/mmcblk<b>1</b>p1 rw rootwait rootfstype=ext4

LABEL emmc
      MENU LABEL eMMC
      LINUX /boot/Image
      APPEND ${cbootargs} root=/dev/mmcblk<b>0</b>p1 rw rootwait rootfstype=ext4

What this does is give you some options in case the rest of the system works, but the root partition gets messed up. A serial console can be used to manually pick boot options. In the edits “mmcblk0p1” is the eMMC rootfs partition, and “mmcblk1p1” is the SD card first GPT partition.

Tears of Joy. THANK YOU SO MUCH! Just did what you suggested and it worked perfectly for installing the components. I will follow your suggestions regarding the SD Card as well. I hope it’s possible for the TX2 in the future to be flashed some other way other than micro USB but for now I’m happy I’m on the latest JetPack 4.2.

In case you are curious, here is some info about why micro-USB is mandatory: USB is either host or device depending on which end of the cable you are talking about. A device can only talk to a host, and a host can talk only to a device. When the Jetson is booted normally it is a host (you can make the micro-USB port act as various virtual devices as well, but that’s up to what you put in the software of the booted system). When a Jetson is in recovery mode the Jetson becomes a custom USB device. If the system cannot boot to an operating system, then this custom USB device is the only access to eMMC. At the very least you have to be able to reach U-Boot to access eMMC outside of the micro-USB port, and preferably a full operating system. Be very careful to never interfere with the parts of the system which exist during boot but prior to Linux running.