Generate "golden image" for TX2

Hello,

I would like to be able to flash a TX2 module with a certain version of jetpack and a series of software that I need in a quick and easy way.
What would be the easiest way to do this? Could I somehow store the whole filesystem of a TX2 module where all my software has been installed and then just flash that to the new TX2 modules? would that work? how could I do that?

There are a lot of boot related partitions which won’t matter to you, and there will be the root filesystem (“rootfs”). It is this latter you can easily clone and use during a flash, but the JetPack/L4T/SDK Manager release used to flash will need to be from the same release as the rootfs clone. All of your content goes in the rootfs, and the only reason you’d ever care about the other partitions is if you had some sort of modified boot, e.g., encryption or signing. Exact instructions depend on which L4T release you are using.

Depending on which release you have, one of these will tell you your current release:
head -n 1 /etc/nv_tegra_release
dpkg -l | grep 'nvidia-l4t-core'

Which release are you working with, and are you concerned only with the running operating system rootfs, or are you customizing something in the boot environment?

We can add more details later, but basically if you were to flash a unit on command line and not using a clone, then this would fully flash with a brand new stock rootfs (executed from the “Linux_for_Tegra/” directory):
sudo ./flash.sh jetson-txt2 mmcblk0p1

As soon as you add the “-r” option the rootfs image is no longer generated fresh, and you reuse whatever is there (which can conveniently be a clone of your “golden image”):
sudo ./flash.sh -r jetson-tx2 mmcblk0p1

The clone is a very big file though, so you have to prepare. This is also where different releases may differ in instructions to clone.

So basically all I do with a TX2 module is install a bunch of software (python, opencv, and other stuff) and also customize the device-tree. I don’t change any of the boot settings or anything like that.

nvidia@tegra-ubuntu:~$ head -n 1 /etc/nv_tegra_release
R28 (release), REVISION: 2.0, GCID: 10567845, BOARD: t186ref, EABI: aarch64, DATE: Fri Mar 2 04:57:01 UTC 2018

(the dpkg command did not returns any results)

I wanna avoid updating as we are too far along in our project and we don’t want any unnecessary changes.
I just flashed a module and I did use the “-r” options to the flash.sh script. This is part of the procedure we have right now and it involves going into a system where jetpack (3.2.1 afaik) has been installed/unpacked and flashing the module from there. However after doing that I still have to install all that software I just mentioned which I would like to automate somehow…

What do you think is my best option?

The device tree, except on older releases, will require extra steps. On R28.2 (which is what you have), can you post the content of the file “/boot/extlinux/extlinux.conf”? And can you say if the updated tree is pointed to from this file via the “FTD” entry? If so, then you this is probably enough to use just the rootfs clone.

Once you get to the R32.x+ device tree will not be found in the rootfs clone, and in some cases if you’ve modified other parts of boot (even in R28.x), then more would also be required. Knowing the above question about the FTD entry should be good enough to answer from for R28.2.

Incidentally, even if the FTD entry does not point to your device tree, then you can still save a copy of the correct tree within the rootfs for later reference. The later releases would have you place a copy of the device tree in the flash software instead of in the rootfs, but the rootfs is a convenient place to save this for later use. The saved copy in that case would not be signed, and when copied into the flash software, the flash process would simultaneously sign the content and probably create a partition from it (for later releases a signed partition is created from a default unsigned file, and you can replace the default with yours).