Booting TX1 and TX2 from the same SD-Card (L4T R28.1)

I have read some other threads grazing this topic, however I am still in need of some clarification. I’m wondering if it possible to boot a TX1 module and a TX2 module both from the same SD-Card with L4T R28.1 on it.
Both modules would have R28.1 flashed via JetPack on their EMMC. I know that the bootloaders are different between the TX1 and TX2 (, but the bootloaders should just remain on the EMMC and load the rootfs.

For the TX1, the process for booting from SD is pretty simple: Cloning the rootfs onto it, then changing the extlinux.conf on the SD so that it loads the rootfs from SD. The bootloader would then, by default, first look at the extlinux.conf on the SD, if it was available. The TX1 would then boot from SD when a card was plugged in, and from EMMC if there wasn’t.

From what I’ve read thus far this process isn’t possible on the TX2. Judging by this thread, it seems that the bootloader on the TX2 doesn’t look at the SD-card first like it did on the TX1, but at the EMMC. Thus the extlinux.conf on the EMMC has to be changed to boot from SD. This however makes it impossible to boot from the EMMC when no SD-card is plugged in and no serial-console is available.
I am fine with this limitation on the TX2 as long as I can still boot from SD on it - since I can then change the contents of the EMMC-extlinux.conf when booted, to allow for booting from the EMMC.

However I found the following:
When I plug in a SD-card with a valid rootfs used to boot on the TX1 to the TX2, the TX2 will not boot. It will boot when the SD-card is not plugged in. I have done no further investigation on this, but it is apparent that the plugged-in SD indeed affects the boot-process, which I (according to the above paragraph) didn’t think it should.

Can someone please clarify my assumptions I’ve gathered so far? And by that, answer the question whether it is possible to boot both modules from the same SD-card. Are there any other differences between the TX1- and the TX2-version of L4T that may prohibit this?

The short answer is “probably not”.

The root partition of R28.1 is shared between a TX1 and TX2, but the NVIDIA-specific files installed through are probably quite different. If you go to the driver package for the TX1 and TX2 and unpack the content of “nv_tegra/nvidia_drivers.tbz2” for each you can see where collisions occur…assuming the tx1 and tx2 versions were unpacked side by side in “unpack/tx1/” and “unpack/tx2/”, compare the following:

cd /where/ever/it/is/unpack/tx1
sha1sum `find . -type f` | tee summary_tx1.txt
cd /where/ever/it/is/unpack/tx2
sha1sum `find . -type f` | tee summary_tx2.txt
cd ..
diff -c tx1/summary_tx1.txt tx2/summary_tx2.txt

Anywhere a library is used which differs from what was expected you’ll get a link error if you are lucky…if you don’t get a link error you might get something more subtle and perhaps not easily traced. If the difference accesses hardware you will probably get a kernel panic and crash.

Just for perspective consider in the PC world there are builds for Intel CPUs and builds for AMD CPUs…you have to install for the correct CPU even though the two have much in common. Regardless of the parts a TX1 and TX2 have in common the differences mean they do not have completely interchangeable root file systems.

On a desktop system you could dual boot and have the boot loader point at alternate rootfs partitions…but I think Jetsons only enable boot to the first partition of a device for its rootfs (unless that changed…I have not checked in a long time).