So I have an Apalis iMX6Q IT 2GB on a custom carrier board running a custom distribution of OpenEmbedded built Linux. This carrier board does not have WiFi or USB. It does have an Ethernet port and an SD-Card slot. My question is, what is the best way to install a new OS on these modules remotely, without having to swap the SD-Card with one with the Toradex Easy Installer on it.
At the moment the only update mechanisms we officially support is with our Torizon platform: Torizon Platform Services Overview | Toradex Developer Center
Though this is only on TorizonCore which doesn’t really help you since you’re on a custom built OE distro.
As for updating your OS there’s a lot of variables here. For example how much of the system are you trying to update? Can you do so by just replacing some files, or are you truly trying to update the entire OS?
Since it sounds like there’s no built-in update mechanism in your system you’ll proabbly need to re-flash the eMMC. Though the only mechanism we support with this is Easy Installer which you already said you prefer not to do.
I’m not seeing a lot of options on how you could go about this. Since you don’t want to swap the SD-Card is Ethernet really the only interface you have to perform this update then?
Basically what I want to accomplish is complete fresh install of a new OS remotely. Essentially the way TEZI does it but without having to physically swap the SD-Card for one with TEZI on it.
I do not mind using TEZI (I just don’t want to have to send someone to the system to swap the SD-Card). Is there a way to load in to a permanent spot in memory? Can it be done over Ethernet?
SWUpdate works nicely. There is recipe for Yocto, though you it is not like just add recipe and voila. You need to adjust your partitions for A/B update, perhaps adjust U-Boot configuration, configure some details, etc.
SWUpdate: software update for embedded system — Embedded Software Update Documentation 2023.05 documentation (sbabic.github.io)
Using torizon core builder, would unpacking and remote SSH help? See link from unpacking images below.
SWUpdate looks promising. I take it that you have gotten this to work with Toradex modules. Can you provide any insight as to what you had to do to make this work? Or any particular things to watch out for?
I am not using Torizon. I have a custom OpenEmbedded build.
Is there a way to load in to a permanent spot in memory? Can it be done over Ethernet?
Well you can load Easy Installer into memory, that’s what we do during our recovery process, but that utilizes the UUU tool from NXP: GitHub - nxp-imx/mfgtools: Freescale/NXP I.MX Chip image deploy tools.
But this loading is only over USB not Ethernet, so that doesn’t really help you either. Unfortunately, I don’t see a good way you can update/re-flash your board with just Ethernet, unless you already have some kind of updating framework present on your system.
SWUpdate is quite flexible and answer depends on what update needs are you going to implement.
Clearly you need to get meta-swupdate and add it to your Yocto layers. Clearly your image recipe should IMAGE_INCLUDE swupdate, as well swupdate-www if www interface is required.
Next required step is partitions/volumes for inactive rootfs, kernel and dtb. Since you get Tezi out of factory, you need custom Tezi image to apply your custom partitions/volumes and swupdate for the first time. Custom image_type_tezi.bbclass should do it.
Once you have swupdate installed and custom partitions available for overwrite, you may try creating your first *.swu update files. It could include just sw-description file with few commands just like set some U-Boot variable. To generate complete *.swu follow this chapter
meta-swupdate: building with Yocto — Embedded Software Update Documentation 2020.11 documentation (sbabic.github.io)
Having *.swu file just launch swupdate on target supplying your custom HW name and version, which swupdate will need to recognise in sw_description provided in *.swu; and your *.swu file. Trial and error the rest.
SWUpdate is certainly a proven stack that allows you to do remote updates.
As mentioned previously it may also be good to take a look at our Torizon Platform and the whole suite of features there that allow for you to do remote updates, remote access and debugging, as well as device monitoring, fleet management and more.
The Torizon Platform is built following the Uptane framework and we also made some other choices of SW to make available something we think brings a lot of peace of mind in terms of safe, secure, reliable, and power-cut-tolerant update process. So take a look at that too.
I also should mention Torizon Platform works right out of the box with our TorizonCore OS but also works with a Yocto build you may be using, simply add in some layers that we make available and you should also be able to quickly add a device.