We are currently developing our update strategy for our device, which runs on a Zynq UltraScale+. We would like to manage the update of the kernel and rootfs with Mender. As we also need to be able to update the first stage bootloader, the FPGA bitstream and the second stage bootloader (which is U-Boot), we are envisioning a two-step update strategy. As mentioned before, the rootfs should be managed with Mender, the FSBL and U-Boot should be managed using the multiboot functionality of the Zynq board.
I have no experience with Mender so far, therefore I do not know if such a setup is possible. I think the main problem would arise, when updating U-Boot. Does updating the bootloader remove some vital information for Mender or is all necessary information decoupled from the bootloader?
Thanks in advance!
Hi @sfun, welcome to Mender community.
I do not see any immediate problems with your setup, the rootfs + kernel A/B updates are obviously the “core” functionality of Mender and this is well supported.
Updates of the FSBL and U-Boot could be implemented using a custom Update Module. Do you intend to update the FSBL and U-Boot independently of the rootfs + kernel?
the FSBL and U-Boot should be managed using the multiboot functionality of the Zynq board.
What does this mean? Do you intend to update FSBL & U-Boot using a separate tool?
Does updating the bootloader remove some vital information for Mender or is all necessary information decoupled from the bootloader?
There is no persistent information stored in the bootloader binaries. Mender utilizes the U-Boot environment, where it stores variables to mark which of A/B to boot etc.
Hi @mirzak and thank you for the fast response!
Yes, we do intend to update FSBL and U-Boot separately, although with a much lower frequency than the rootfs + kernel.
As for the mutliboot functionality: We would update FSBL and U-Boot by updating the complete boot image file on the Zynq. Zynq offers the functionality of having multiple boot images in QSPI. This would allow us to fall back to the previous boot image, if the new image is corrupted for some reason, so in the end we would also have an A/B update scheme for the boot image.
I will have a look at the Update Modules, maybe we can also implement the FSBL/U-Boot update using Mender.
Have you managed to update U-Boot with an update module? If so, are you able to share the script?
Thanks in adance!