Thanks Pierre-loup for the patch. This is going to be very useful.

Reviewed-by: Martin Schwan <[email protected]>

Regards,
Martin

On Fri, 2025-11-21 at 09:49 +0100, Pierre-loup GOSSE via
lists.openembedded.org wrote:
> From: Pierre-Loup GOSSE <[email protected]>
> 
> Build the U-Boot initial environment binary image if
> UBOOT_INITIAL_ENV_BINARY is set to "1". The environment partition
> size
> (in bytes, hexadecimal or decimal) must be defined using
> UBOOT_INITIAL_ENV_BINARY_SIZE.
> 
> If U-Boot environment redundancy is enabled,
> UBOOT_INITIAL_ENV_BINARY_REDUND must be set to "1".
> 
> The resulting binary can be flashed using WIC at the environment
> offset,
> overriding any existing environment if present, for example:
> 
>   part --source rawcopy --sourceparams="file=u-boot-initial-env-
> sd.bin" --ondisk sda --no-table --offset 4096
> 
> Signed-off-by: Pierre-Loup GOSSE <[email protected]>
> ---
> Note: Once merged, a patch with the new variables will be submitted
> to the
>       documentation mailing list.
> 
> changes in v2:
> - fix uboot_deploy_config (builddir was missing)
> 
> no changes in v3
> ---
>  meta/classes-recipe/uboot-config.bbclass | 11 +++++++++
>  meta/recipes-bsp/u-boot/u-boot.inc       | 30
> ++++++++++++++++++++++++
>  2 files changed, 41 insertions(+)
> 
> diff --git a/meta/classes-recipe/uboot-config.bbclass b/meta/classes-
> recipe/uboot-config.bbclass
> index fd6c045142..81057b5cad 100644
> --- a/meta/classes-recipe/uboot-config.bbclass
> +++ b/meta/classes-recipe/uboot-config.bbclass
> @@ -71,6 +71,14 @@ UBOOT_ENV_BINARY ?=
> "${UBOOT_ENV}.${UBOOT_ENV_SUFFIX}"
>  UBOOT_ENV_IMAGE ?= "${UBOOT_ENV}-${MACHINE}-
> ${UBOOT_VERSION}.${UBOOT_ENV_SUFFIX}"
>  UBOOT_ENV_SYMLINK ?= "${UBOOT_ENV}-${MACHINE}.${UBOOT_ENV_SUFFIX}"
>  
> +# Enable the build of the U-Boot initial env binary image. The
> binary size is
> +# required (i.e. the U-Boot partition environment size). Since the
> environment
> +# layout with multiple copies is different, set
> UBOOT_INITIAL_ENV_BINARY_REDUND
> +# to "1" if the U-Boot environment redundancy is enabled.
> +UBOOT_INITIAL_ENV_BINARY ?= "0"
> +UBOOT_INITIAL_ENV_BINARY_SIZE ?= ""
> +UBOOT_INITIAL_ENV_BINARY_REDUND ?= "0"
> +
>  # U-Boot EXTLINUX variables. U-Boot searches for
> /boot/extlinux/extlinux.conf
>  # to find EXTLINUX conf file.
>  UBOOT_EXTLINUX_INSTALL_DIR ?= "/boot/extlinux"
> @@ -100,6 +108,9 @@ UBOOT_DTB_BINARY ??= ""
>  UBOOT_FIT_CHECK_SIGN ?= "uboot-fit_check_sign"
>  
>  python () {
> +    if bb.utils.to_boolean(d.getVar('UBOOT_INITIAL_ENV_BINARY')) and
> d.getVar('UBOOT_INITIAL_ENV_BINARY_SIZE') == "":
> +        bb.fatal("UBOOT_INITIAL_ENV_BINARY requires setting the U-
> Boot partition environment size with the
> UBOOT_INITIAL_ENV_BINARY_SIZE variable")
> +
>      ubootmachine = d.getVar("UBOOT_MACHINE")
>      ubootconfigflags = d.getVarFlags('UBOOT_CONFIG')
>      ubootbinary = d.getVar('UBOOT_BINARY')
> diff --git a/meta/recipes-bsp/u-boot/u-boot.inc b/meta/recipes-bsp/u-
> boot/u-boot.inc
> index 16c9836508..ffa9ef2d59 100644
> --- a/meta/recipes-bsp/u-boot/u-boot.inc
> +++ b/meta/recipes-bsp/u-boot/u-boot.inc
> @@ -4,6 +4,7 @@ PROVIDES = "virtual/bootloader"
>  PACKAGE_ARCH = "${MACHINE_ARCH}"
>  
>  DEPENDS += "${@bb.utils.contains('UBOOT_ENV_SUFFIX', 'scr', 'u-boot-
> mkimage-native', '', d)}"
> +DEPENDS += "${@ 'u-boot-mkenvimage-native' if
> bb.utils.to_boolean(d.getVar('UBOOT_INITIAL_ENV_BINARY')) else ''}"
>  
>  inherit uboot-config uboot-extlinux-config uboot-sign deploy
> python3native kernel-arch
>  
> @@ -104,6 +105,10 @@ uboot_compile_config () {
>      if [ -n "${UBOOT_INITIAL_ENV}" ]; then
>          oe_runmake -C ${S} O=${B}/${builddir} u-boot-initial-env
>          cp ${B}/${builddir}/u-boot-initial-env ${B}/${builddir}/u-
> boot-initial-env-${type}
> +        if [ "${UBOOT_INITIAL_ENV_BINARY}" = "1" ] ; then
> +            uboot_compile_initial_env_binary
> +            cp ${B}/${builddir}/u-boot-initial-env.bin
> ${B}/${builddir}/u-boot-initial-env-${type}.bin
> +        fi
>      fi
>  }
>  
> @@ -123,7 +128,18 @@ uboot_compile () {
>      # Generate the uboot-initial-env
>      if [ -n "${UBOOT_INITIAL_ENV}" ]; then
>          oe_runmake -C ${S} O=${B} u-boot-initial-env
> +        if [ "${UBOOT_INITIAL_ENV_BINARY}" = "1" ] ; then
> +            uboot_compile_initial_env_binary
> +        fi
> +    fi
> +}
> +
> +uboot_compile_initial_env_binary() {
> +    redund=""
> +    if [ "${UBOOT_INITIAL_ENV_BINARY_REDUND}" = "1" ] ; then
> +        redund="-r"
>      fi
> +    uboot-mkenvimage -s ${UBOOT_INITIAL_ENV_BINARY_SIZE} ${redund} -
> o ${B}/${builddir}/u-boot-initial-env.bin ${B}/${builddir}/u-boot-
> initial-env
>  }
>  
>  do_install () {
> @@ -388,9 +404,16 @@ uboot_deploy_config () {
>      # Deploy the uboot-initial-env
>      if [ -n "${UBOOT_INITIAL_ENV}" ]; then
>          install -D -m 644 ${B}/${builddir}/u-boot-initial-env-
> ${type} ${DEPLOYDIR}/${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-
> ${UBOOT_VERSION}
> +        if [ "${UBOOT_INITIAL_ENV_BINARY}" = "1" ]; then
> +            install -D -m 644 ${B}/${builddir}/u-boot-initial-env-
> ${type}.bin ${DEPLOYDIR}/${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-
> ${UBOOT_VERSION}.bin
> +        fi
>          cd ${DEPLOYDIR}
>          ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-
> ${UBOOT_VERSION} ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}
>          ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-
> ${UBOOT_VERSION} ${UBOOT_INITIAL_ENV}-${type}
> +        if [ "${UBOOT_INITIAL_ENV_BINARY}" = "1" ]; then
> +            ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-
> ${UBOOT_VERSION}.bin ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}.bin
> +            ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-
> ${UBOOT_VERSION}.bin ${UBOOT_INITIAL_ENV}-${type}.bin
> +        fi
>      fi
>  }
>  
> @@ -405,9 +428,16 @@ uboot_deploy () {
>      # Deploy the uboot-initial-env
>      if [ -n "${UBOOT_INITIAL_ENV}" ]; then
>          install -D -m 644 ${B}/u-boot-initial-env
> ${DEPLOYDIR}/${UBOOT_INITIAL_ENV}-${MACHINE}-${UBOOT_VERSION}
> +        if [ "${UBOOT_INITIAL_ENV_BINARY}" = "1" ]; then
> +            install -D -m 644 ${B}/u-boot-initial-env.bin
> ${DEPLOYDIR}/${UBOOT_INITIAL_ENV}-${MACHINE}-${UBOOT_VERSION}.bin
> +        fi
>          cd ${DEPLOYDIR}
>          ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${UBOOT_VERSION}
> ${UBOOT_INITIAL_ENV}-${MACHINE}
>          ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${UBOOT_VERSION}
> ${UBOOT_INITIAL_ENV}
> +        if [ "${UBOOT_INITIAL_ENV_BINARY}" = "1" ]; then
> +            ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-
> ${UBOOT_VERSION}.bin ${UBOOT_INITIAL_ENV}-${MACHINE}.bin
> +            ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-
> ${UBOOT_VERSION}.bin ${UBOOT_INITIAL_ENV}.bin
> +        fi
>      fi
>  }
>  
> 
> 
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#227577): 
https://lists.openembedded.org/g/openembedded-core/message/227577
Mute This Topic: https://lists.openembedded.org/mt/116405112/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to