Direct flash has no substitute. However, if you arrange an update as a live Over The Air (OTA) update, then the Jetson can update itself. OTA updates have dangers, and you’d have to test, but an x86 Linux host is otherwise mandatory. An OTA update has only a networking requirement (and if you had to you could use the host ARM system as a web server and/or NFS server).
This is likely to be unacceptable, but if you have a small x86 Linux host PC appliance, then that could be used with flash. Some appliances don’t work for this, so you’d have to test, and I have no doubt that packaging that with your Jetson would be a major problem, but the possibility is there.
The main things to consider:
- The flash program must be on an x86 Linux system, preferably the correct Ubuntu (command line works on some other distros, but not JetPack/SDK Manager).
- If you are building from the “
Linux_for_Tegra/rootfs/”, then that must be an ext4 filesystem.
- True flash means you have to control the recovery mode pin while rebooting or powering on (there are ways to go into recovery mode during a reboot via a command, but once such a thing is started, then there is no going back should there be an error during the process).
- OTA does not have such requirements, but has its own risks. You would need extra caution surrounding any customizations, e.g., device tree, kernel, partition backup or encryption, so on.
- Right now QEMU is used on the x86 host PC to modify the “
Linux_for_Tegra/rootfs/” (such as changing a password), and if you got it working correctly, then maybe the reverse could be performed. This would not be simple, but maybe (with a lot of work) you could use QEMU to emulate x86 on the ARM system to run flash; then the modification by QEMU of anything in “Linux_for_Tegra/rootfs/” could be modified to be native, or oddly enough, use QEMU from the x86 QEMU to emulate ARMv8 from the “fake” Linux x86 host PC.
If you look at the script l4t_create_default_user.sh, then you get a human-readable example of how QEMU is used to emulate ARM. If you are considering feasibility, then try to do the reverse to set up very simple use of Linux commands which are binary x86 on the Jetson. One tool to consider while testing or imagining if this will work (a pretty big "if"™) is “ldd”. On your host PC, if you find a binary executable, then you could directly copy it to your control Jetson running QEMU and test with that command if the file itself has no linkage (it is statically linked). If not static, and if linked to other libraries, then your QEMU will need those libraries (and linker) installed to test (in the end you’d need to do this anyway, but QEMU has some linker ability I think…not positive, I’ve never done this).
Most of the Linux host PC binaries I’ve looked at link to a very minimum of other files, but if you were to build your own “hello, world” application which is statically linked (very simple to do), then you could try to run that x86 app on QEMU. Once it runs, you could then try a binary copy of simple commands which are binary executable, but have minimal linking. Examples to copy are “whoami” and “ls”. On one Ubuntu host PC I see this linkage when I run ldd on them:
# ldd /usr/bin/pwd
linux-vdso.so.1 (0x00007ffd441a5000)
libc.so.6 => /usr/lib/x86_64-linux-gnu/libc.so.6 (0x00007f88b441c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f88b467b000)
# ldd /usr/bin/whoami
linux-vdso.so.1 (0x00007ffc3a0f1000)
libc.so.6 => /usr/lib/x86_64-linux-gnu/libc.so.6 (0x00007f3fb9932000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3fb9b90000)
If you do manage to set up QEMU, then there is very little you couldn’t do on command line. GUI apps might be a different story. In the downloads for a release the “driver package” is the actual flash software, and this contains the actual binary tegrarcm_v2 and everything needed for flash. SDK manager is the “smart network” layer which you don’t need, and this in turn runs the JetPack application; this is just a GUI on top of the driver package and is also not needed. JetPack does offer download and post flash optional package install, but all of that can be skipped if you already know what packages you want: Just use the apt mechanism when the proper repository is listed in “/etc/apt/”.