R28.3 nvidia's Deskptop

Hi:

I’m using R28.3.
When I extract the sample-file-system, there’re no necessary folders, such Desktop, downloads … & etc.

Hence, I install the image to the target,

The TX1 will not show anything on screen when its first boot. (at the meanwhile, I cannot find any folders in /home/nvidia through the tty console).

If I reboot the TX1, TX1 can show the Ubuntu Desktop then. And all the folders are there.

My questions are

  1. Could I copy those folder from R28.2?
  2. How does Ubuntu establish those folders?

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:

  1. Make sure you have a lot of disk space wherever you are flashing from (perhaps 25GB).
  2. Unpack the driver package with your regular user.
  3. cd to "Linux_for_Tegra/rootfs/"
  4. Use sudo to unpack the sample rootfs:
    sudo tar xvfj tx1-Tegra_Linux_Sample-Root-Filesystem_R28.3.0_aarch64.tbz2
    
  5. cd back one directory to "Linux_for_Tegra/":
    cd ..
    
  6. Connect the TX1 to the host with the micro-B USB cable.
  7. Put the TX1 in recovery mode (hold the recovery button down while either turning power on or hitting the power reset button).
  8. Verify the TX1 is visible to the host. You should see something from this:
    lsusb -d 0955:7721
    
  9. 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.

Hi linuxdev:

Thanks for a great tutorial.

And I’m curious what the mechanism to produce those folders after the TX1 is flashed and booted.

I don’t know if I understand the question correctly, but JetPack or SDK Manager produce those folders upon execution. Prior to actual flash or package addition a manifest file is downloaded and the URLs in the manifest are used to download the driver package and sample rootfs, plus extract those (it is the downloading of the manifest which allows current content and web location of content to change without involving the end user doing the downloading). Unless those directories have been deleted (either by you or by the installer) you will find they still exist as a subdirectory of your JetPack or SDKM’s “~nvidia/” directories. I haven’t paid much attention to removal of content, but there is probably an option to delete temporary files after a flash. I would have always checked to not delete temporary content after a flash (I don’t remember if there was such an option). For the most part I do as much as I can on command line and there wouldn’t be a need for SDKM or JetPack beyond the first use for those working on command line.

Note: The R28.3 release is unusual in the sense that it did not come with a JetPack release. The reason this is possible is that the sample rootfs is the only thing that changed between R28.2.1 and R28.3. In most other cases mixing the rootfs of one release and the other content of the driver package would cause problems…in this case the two releases are 100% compatible between R28.2.1 and R28.3. Thus you must manually download and there is no manifest. Even so, you can run JetPack3.3 (designed for R28.2.1) later, and if you uncheck flash as a step, then the extra program installs will work on R28.3 root file systems.

Note 2: I think R28.2.1 was advertised only for TX2, but this too was a minor release over R28.2. R28.2 works with TX1 (though not advertised I think R28.2.1 works with a TX1). R28.3 should be compatible with R28.2 as well.

Hi:
When flashing to TX1, TX1 will acts a storage and shows its roofs on my Ubuntu PC.
At that time, I checked the content in /home/nvidia,
it still lacks of those folders.

now, I copy those from R28.2,
And it seems working well (hopefully) .

There is a common misconception that using an OTG cable (micro-B USB) causes a device to appear as mass storage. This would be a common convention for smart phones, music devices, and perhaps tablets, but in the case of any Jetson being in recovery mode is not the same as storage. It is true that there is an example mass storage from “/opt/nvidia/l4t-usb-device-mode/” for a fully booted Jetson, but this is fairly useless unless you edit this.

To create those folders you have to actually flash (or at least tell it you are going to flash, but not continue at the actual flash stage), and make sure you are not set up to remove temporary files after the flash. Also, the location is not “/home/nvidia/”. If you flashed from user “nvidia” on the host system, then it would be “/home/nvidia/nvidia/” ("~nvidia/""~nvidia/nvidia/" via user nvidia). If you flashed from user “ubuntu” on the host, then the directory would become “/home/ubuntu/nvidia/” ("~nvidia""~ubuntu/nvidia/" via user ubuntu). There will be a different subdirectory within “~nvidia/” which depends on the particular Jetson model number/carrier board you flashed (there will be a name such as “_Pxxxx” where “xxxx” is a four digit numeric designation of the Jetson variant…the one with the “Linux_for_Tegra/rootfs/” having lots of content is the one you want).

For R28.2 under JetPack there will be a similar “~JetPack/” style subdirectory instead of “~nvidia/"”~/nvidia/".

If you are manually installing without JetPack or SDKM, then you must manually unpack the driver package, then unpack the sample rootfs with sudo within the resulting “Linux_for_Tegra/rootfs/” directory, followed by using the “Linux_for_Tegra/” script “sudo ./apply_binaries.sh”.

EDIT: The “~name” convention is a shortcut for the home directory of “name”. If you cd “~/nvidia”, and you are logged in as user ubuntu, then you will end up at “/home/ubuntu/nvidia/”. The “~” without a name is the same as your home directory, but a “~” with a name is the same as the other user name home directory. So if I am logged in as user “ubuntu”, and I “cd ~nvidia”, then I will end up in “/home/nvidia/” if I have permission to do so.

Hi linuxdev:

got it.

Thanks for the great explanation.

I made some corrections to the above (I lacked a “/” between “~” and “name” in some cases…"~" is your home directory, “~name” is the home directory of “name”, and “~/name/” is subdirectory “name” of your home directory…the end goal is to point out “~nameOfWhoeverRanJetPackOrSDKM/nvidia/”).