I can’t answer it all, but basically the work flow goes like this (run on the host PC)…
First, the TX1 supports R28.2, but not R28.2.1 (though it would probably work on R28.2.1). R28.3 seems to be supported on a TX1 as well. See:
https://developer.nvidia.com/embedded/linux-tegra-archive
The short answer is that you should download the R28.3 driver package (looks like it is called “BSP” under TX1 on the above web page) and the sample rootfs. Then follow directions:
- Make sure you have a lot of disk space wherever you are flashing from (perhaps 25GB).
- Unpack the driver package with your regular user.
- cd to "Linux_for_Tegra/rootfs/"
- Use sudo to unpack the sample rootfs:
sudo tar xvfj tx1-Tegra_Linux_Sample-Root-Filesystem_R28.3.0_aarch64.tbz2
- cd back one directory to "Linux_for_Tegra/":
cd ..
- Connect the TX1 to the host with the micro-B USB cable.
- Put the TX1 in recovery mode (hold the recovery button down while either turning power on or hitting the power reset button).
- Verify the TX1 is visible to the host. You should see something from this:
lsusb -d 0955:7721
- Flash with sudo. I'm going to recommend logging the flash (and if it works you can delete the log):
sudo ./flash.sh jetson-tx1 mmcblk0p1 2>&1 | tee flash_log.txt
The driver package produces the “Linux_for_Tegra/” directory. The driver package itself is unpacked as a regular user, and if using JetPack, then JetPack runs those steps.
Within “Linux_for_Tegra/” will be a subdirectory “rootfs/”. The sample rootfs is unpacked there using sudo. This is now a purely Ubuntu root file system (most everything except for boot files should exist the same as if a brand new Ubuntu flash had occurred). If using JetPack, then this step would have been performed by JetPack after asking for your password to use sudo.
Next the “apply_binaries.sh” script (part of the driver package in “Linux_for_Tegra/”) would be run with sudo. This overlays a number of direct hardware access drivers onto the “rootfs/” content. “rootfs/” is still Ubuntu, but could also now be called “Linux for Tegra” (“L4T”) as well. JetPack would have performed this step if done through JetPack.
During the actual flash bootloader content is added in “rootfs/boot/”. Then an exact file system image is created…this results in “bootloader/system.img.raw”. That image is made smaller (changed from “raw” to “sparse”) and creates “bootloader/system.img”. It is “bootloader/system.img” which is flashed (the end result is that the Jetson has an exact copy of “bootloader/system.img.raw” as the root file system).
Other partitions are also flashed for boot content.
In theory, if you already ran R28.2, then you might (and this is not guaranteed) be able to unpack the “rootfs/” content (which has included the apply_binaries.sh step, but prior to flash adding boot content) on top of an existing R28.2 install and get R28.3. On the other hand, a running system will lock out access to certain files and this is bound to fail unless you are running on a rescue SD card and not actually using the eMMC disk.
If you look at releases up through R28.2 there will probably be both a “/home/nvidia/” and “/home/ubuntu/” directory. In R32.1 this seems to no longer be the case. Not sure if R28.3 is missing that content or not.