[PATCH v3 0/2] bootstd: New bootmeth for RAUC A/B systems
Simon Glass
sjg at chromium.org
Thu Jun 5 19:29:04 CEST 2025
Hi Martin,
On Wed, 4 Jun 2025 at 06:16, Martin Schwan <m.schwan at phytec.de> wrote:
>
> This series implements a new bootmeth for RAUC A/B systems. RAUC (Robust
> Auto Update Controller) is a lightweight update client, providing "Safe
> and Secure OTA Updates for Embedded Linux". See the following links for
> more information about RAUC:
>
> https://rauc.io/
> https://rauc.readthedocs.io/en/latest/
>
> PHYTEC uses RAUC in its Yocto based distribution "Ampliphy" as the
> default way of updating embedded devices based on PHYTEC hardware. So
> far, the logic selecting the correct partitions and files to boot was
> being implemented in the U-Boot environment. While this is a
> straightforward way to do it, adding and supporting new platforms became
> somewhat tedious and is platform-specific. The introduction of U-Boot's
> "Standard Boot" provided a convincing alternative, promising a simpler
> and more portable way of booting, even for RAUC systems. This led me to
> implement a new bootmeth supporting RAUC A/B systems. Note, that this
> new bootmeth is not proprietary to PHYTEC products and is designed to
> work on other hardware with a RAUC A/B system, too.
>
> The bootmeth currently only supports symmetric A/B partitioning layouts.
> E.g. A/rescue is not (yet) supported. The partition indexes and default
> slot tries can be specified via configuration options.
>
> For now, the bootmeth_rauc uses a similar approach for loading the
> Kernel and device tree as the bootmeth_script, in that it requires a FIT
> containing a U-Boot script loading the desired distro. It could be
> possible to support booting without a script and load the Kernel and DT
> directly with this bootmeth, but I found the script method to be very
> flexible for now, in letting the distro decide what to load.
>
> The bootmeth_rauc was tested on a phyBOARD-Pollux i.MX8M Plus [1] with
> BSP-Yocto-Ampliphy-i.MX8MP-PD24.1.2 [2].
>
> Supported boot devices are currently only MMC devices, but it should be
> possible to add SPI flashes in the future.
>
> To test this patch stack with PHYTEC's phyBOARD-Pollux i.MX8M Plus
> board, you need to adjust the boot files to include the boot.scr.uimg
> containing the distro's boot script and set "optargs" to "${raucargs}"
> in it. Also disable any legacyboot in the U-Boot environment and simply
> boot with Standard Boot:
>
> bootmeth order rauc
> bootflow scan -lb
>
> Regards,
> Martin
>
> [1]: https://www.phytec.eu/en/produkte/single-board-computer/phyboard-pollux/
> [2]: https://download.phytec.de/Software/Linux/BSP-Yocto-i.MX8MP/BSP-Yocto-Ampliphy-i.MX8MP-PD24.1.2/
>
> ---
> Changes in v3:
> - Invert if-statement check for setting default value of BOOT_*_LEFT env
> variables. This would falsely trigger an error message before.
> - Link to v2: https://lore.kernel.org/r/20250602-wip-bootmeth-rauc-v2-0-9d2384131486@phytec.de
>
> Changes in v2:
> - Remove LOG_DEBUG from boot/bootmeth_rauc.c
> - Reorder asm/cache.h include to be last
> - Do not check for RAUC-specific files in the rootfs anymore. This does
> not work on encrypted root filesystems and is not a stable indicator
> for a functioning RAUC system.
> - Add a description of the term "slot" in the corresponding private
> struct.
> - Remove boot tries left from struct distro_rauc_slot. The boot tries
> are read directly from the environment, as that's the only correct
> source RAUC is relying on.
> - Remove the current boot_order from struct distro_rauc_priv, for the
> same reason as above (env is correct source).
> - Add function for retrieving a slot struct, to ease finding the right
> one when e.g. iterating or getting by name.
> - Fix multiline comments.
> - Fix various if-statements which were explicitly comparing to 0 or
> NULL.
> - Free various, temporary instances of allocated string lists.
> - Set default env values for BOOT_ORDER and associated BOOT_*_LEFT
> variables. These variables are mandatory for RAUC to work.
> - Use calloc() instead of malloc() for allocating the private slots.
> - Use config options for configuring the partitions and default boot
> order, instead of setting them via the U-Boot env.
> - Use bootstd_get_prefixes()'s return value and check all available
> prefixes for the boot script.
> - Add a proper boot order selection logic for the rauc bootmeth, similar
> to the previous environment scripting, with fallbacks and slot try
> checks.
> - Introduce config option for resetting all slot tries in case they are
> all zero. This may prevent a system from locking up in the bootloader.
> - Rename env variable "mmcroot" to "distro_rootpart", to be in line with
> "distro_bootpart".
> - Change the bootmeth flag to "global", as the rauc bootmeth does not
> work for individual partitions.
> - Update documentation accordingly.
> - Link to v1: https://lore.kernel.org/r/20250129-wip-bootmeth-rauc-v1-0-6308e732f314@phytec.de
>
> ---
> Martin Schwan (2):
> bootstd: Add implementation for bootmeth rauc
> doc: Add description for bootmeth rauc
>
> boot/Kconfig | 51 +++++
> boot/Makefile | 1 +
> boot/bootmeth_rauc.c | 432 +++++++++++++++++++++++++++++++++++++++
> doc/develop/bootstd/index.rst | 1 +
> doc/develop/bootstd/overview.rst | 1 +
> doc/develop/bootstd/rauc.rst | 56 +++++
> 6 files changed, 542 insertions(+)
> ---
> base-commit: b22a276f039f818d5564bec6637071cfc8a7e432
> change-id: 20250129-wip-bootmeth-rauc-03b5e2dd88f4
>
> Best regards,
> --
> Martin Schwan <m.schwan at phytec.de>
>
Great to see this. Could you please add a test, e.g. to
test/boot/bootflow.c ? Let me know if you need help.
Regards,
Simon
More information about the U-Boot
mailing list