[OE-core] [PATCH v2] u-boot: Generate default U-Boot environment images

Stefano Babic sbabic at denx.de
Fri Jul 26 16:09:50 UTC 2019


Hi Lukasz,

On 26/07/19 09:40, Lukasz Majewski wrote:
> This change provides tasks to generate default U-Boot environment images
> from built U-Boot (via. get_default_envs.sh script).
> 
> Those images then can be used to generate wic images (with e.g. eMMC layout).
> With such approach the end user doesn't see the "CRC environment" error
> after the first boot.
> 
> Moreover, those are built per MACHINE (as u-boot itself is) so then could
> be used in SWUpdate scenarios with single tar'ed archive with multiple
> MACHINE specific *.swu images.

By working together with SWUpdate, I am just wondering why this is
necessary. I guess that "default" U-Boot environment images means
"initial" environment. The issue I think you see is if there is no
environment in the storage and boards boot with the linked-in
environment. SWUpdate cannot find such as an environment.

For that, there is a target in u-boot: make u-boot-initial-env. This
generates an ASCII file that can be used by SWUpdate if no environment
is stored and U-Boot starts with the linked-in environemnt. It is enough
to put this file into rootfs and to enable SWUpdate (and libubootenv) to
use it. Create specific image to be stored into a .wic seems
overkilling, and it does not help if for some reason the board comes up
without environment in the flash.

Best regards,
Stefano Babic

> 
> The UBOOT_ENVS_SIZE must be defined in machine specific conf file as well
> as it is also possible to adjust (optionally) the *_ENVS_* variables.
> 
> Test:
> Newest master-next for poky repo - SHA1: eb5b0a0b5e53a6e55a09e66489d3f24d0c6232ee
> MACHINE = "beaglebone-yocto" in local.conf
> bitbake virtual/bootloader
> 
> 
> As a result following links are available in deploy directory:
> u-boot-env.img{_r}.
> 
> Signed-off-by: Lukasz Majewski <lukma at denx.de>
> 
> ---
> Changes for v2:
> 
> - Move the content of deploy_default_envs task to do_deploy
> - Move the content of gen_default_envs task to do_compile
> - Create the u-boot-env.img{r} conditionally, only when UBOOT_ENVS_SIZE is
>   defined
> - Change the commit title to reflect changes done for v2
> ---
>  meta/recipes-bsp/u-boot/u-boot.inc | 34 ++++++++++++++++++++++++++++++++++
>  1 file changed, 34 insertions(+)
> 
> diff --git a/meta/recipes-bsp/u-boot/u-boot.inc b/meta/recipes-bsp/u-boot/u-boot.inc
> index 9a754fd09b..7ede2da0eb 100644
> --- a/meta/recipes-bsp/u-boot/u-boot.inc
> +++ b/meta/recipes-bsp/u-boot/u-boot.inc
> @@ -68,6 +68,13 @@ UBOOT_EXTLINUX_INSTALL_DIR ?= "/boot/extlinux"
>  UBOOT_EXTLINUX_CONF_NAME ?= "extlinux.conf"
>  UBOOT_EXTLINUX_SYMLINK ?= "${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE}-${PR}"
>  
> +# U-Boot variables necessary for extracting default envs from build U-Boot
> +DEFAULT_UBOOT_ENVS_FILE ?= "u-boot-env"
> +DEFAULT_ENVS ?= "${DEFAULT_UBOOT_ENVS_FILE}.txt"
> +UBOOT_ENVS_DEFAULT ?= "${DEFAULT_UBOOT_ENVS_FILE}-${MACHINE}-${PV}-${PR}.img"
> +# The UBOOT_ENVS_SIZE needs to defined in the <machine>.conf file
> +# UBOOT_ENVS_SIZE = "65536"
> +
>  # returns all the elements from the src uri that are .cfg files
>  def find_cfgs(d):
>      sources=src_patches(d, True)
> @@ -132,6 +139,19 @@ do_compile () {
>          oe_runmake -C ${S} O=${B} ${UBOOT_MAKE_TARGET}
>      fi
>  
> +    # Generate default environment
> +    if [ -n "${UBOOT_ENVS_SIZE}" ]
> +    then
> +        ${B}/source/scripts/get_default_envs.sh ${B} > ${B}/${DEFAULT_ENVS}
> +
> +        # Generate env image
> +        ${B}/tools/mkenvimage -s ${UBOOT_ENVS_SIZE} -o ${B}/${UBOOT_ENVS_DEFAULT} ${B}/${DEFAULT_ENVS}
> +
> +        # Generate redundant env image
> +        ${B}/tools/mkenvimage -r -s ${UBOOT_ENVS_SIZE} -o ${B}/${UBOOT_ENVS_DEFAULT}_r ${B}/${DEFAULT_ENVS}
> +
> +        rm ${B}/${DEFAULT_ENVS}
> +    fi
>  }
>  
>  do_install () {
> @@ -328,6 +348,20 @@ do_deploy () {
>          ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE}
>          ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME}
>      fi
> +
> +    if [ -n "${UBOOT_ENVS_SIZE}" ]
> +    then
> +        install -d ${DEPLOYDIR}
> +        install ${B}/${UBOOT_ENVS_DEFAULT} ${DEPLOYDIR}/${UBOOT_ENVS_DEFAULT}
> +        install ${B}/${UBOOT_ENVS_DEFAULT}_r ${DEPLOYDIR}/${UBOOT_ENVS_DEFAULT}_r
> +
> +        cd ${DEPLOYDIR}
> +        ln -sf ${UBOOT_ENVS_DEFAULT} ${DEFAULT_UBOOT_ENVS_FILE}.img
> +        ln -sf ${UBOOT_ENVS_DEFAULT}_r ${DEFAULT_UBOOT_ENVS_FILE}.img_r
> +
> +        rm ${B}/${UBOOT_ENVS_DEFAULT}
> +        rm ${B}/${UBOOT_ENVS_DEFAULT}_r
> +    fi
>  }
>  
>  addtask deploy before do_build after do_compile
> 

-- 
=====================================================================
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================


More information about the Openembedded-core mailing list