Until recently there wasn’t any ability to use the “sudo do-release-upgrade
” mechanism (Jetsons and many embedded systems don’t have a BIOS, and each boot setup is custom…a bit like flashing the BIOS and bootloader every time you flash; such an upgrade gets complicated). I don’t know which release this actually started with, but it was somewhere in the L4T R32.x series. I can see though the possibility that such an upgrade would in some way work less efficiently than directly installing a new release. Still, it is hard to say without actually performing a fresh install (it is worth trying).
You can keep a clone though in case anything goes wrong. Details differ between SD card and eMMC models, but for the SD card model it might be as simple as using a new SD card and not touching the old one once the dev kit itself has had QSPI flashed (the QSPI has boot content on it, and an SD card might be modified by booting to a different QSPI release…thus, once QSPI has been flashed, if you might want to revert, then make sure the old SD card is not used without flashing the QSPI back to the original release from when it most recently functioned).
The combination of “sudo apt update
” and “sudo apt-get upgrade
” will itself not be a major issue since the release stays the same and only packages are updated. “Theory” says that if you were to fresh install and run “sudo apt update
” and “sudo apt-get upgrade
” once, then you’d have the same result as periodically running those commands over time until reaching today’s package releases. In theory, but glitches happen, so it might help to fresh install even in that case.
Boot args is an interesting (and extensive) topic. Once in the Linux kernel though most arguments, when listed twice, won’t matter; only the most recent argument will be used. Some, like consoles, can actually have and use more than one instance (e.g., serial console plus regular console are possible). Why this happens in a Jetson gets more complicated.
Note that in any computer the drivers (and boot stages have drivers too) must be able to find the device and use the correct driver. That means that either the device has to be able to “self report” (be “plug-n-play”), or else be blindly told to use a given driver at a given physical address (along with arguments to the driver). This latter method is exactly what the device tree is for since it allows avoiding putting every variation of a driver and its physical address into the kernel source code.
Take a look at “/boot/extlinux/extlinux.conf
”. You’ll see in the APPEND
key/value pair (the arguments passed to the Linux kernel), that part of it is usually “${cbootargs}
”. This is a node within the device tree. If an argument to the kernel is listed twice in the device tree’s “chosen->bootargs
” node, then most of the time that argument will appear twice in the Linux kernel command line as well. This is inherited as an environment variable. Then there is the rest of the APPEND
key/value pair in extlinux.conf
, and this too has the ability to duplicate something. Only in rare cases would previous values matter, and almost always the most recent value is used. If a value is present which the kernel and drivers are not coded for, then it is ignored.
The reason this exists in the device tree is that the initial hardware setup (including clocks and power rails which might have optional uses, but need to know their specific setup for the given carrier board) can’t query the devices to find out what they are or where they are. In a PC most of this would be part of the BIOS, but there is no BIOS. In a PC the BIOS itself has the equivalent of a custom device tree and small CPU. We get back to the idea that without the device tree there would need to be a BIOS. There would be extra hardware, and that content would still exist, but it’d be updated by BIOS flash instead of boot stages. The device tree “chosen->bootargs
” is used for this, possibly edited (the minor possibility of the Linux kernel seeing something different is because of this), and then passed on as the “${cbootargs}
” environment variable. I doubt this would have any effect on boot or performance, but it is worth considering that Linux inherits the boot state, and if the boot state differs between a clean install and several updates, such that the rootfs partition is still using 100% exact matches, that it is still possible the inherited boot state will change performance. Not likely much of a change, and it is a slim possibility, but it is possible.