[U-Boot] [PATCH v2] Allow providing default environment from file

Lukasz Majewski lukma at denx.de
Tue Mar 20 14:20:46 UTC 2018


Hi Rasmus,

> Modifying the default environment via CONFIG_EXTRA_ENV_SETTINGS is
> somewhat inflexible, partly because the cpp language does not allow
> appending to an existing macro. This prevents reuse of "environment
> fragments" for different boards, which in turn makes maintaining that
> environment consistently tedious and error-prone.

It is also possible to build boot.scr image, which is afterwards read
from e.g. vfat, from text file.

As a reference and example please look
into ./boards/samsung/common/bootscripts/*.cmd

> 
> This implements a Kconfig option for allowing one to define the entire
> default environment in an external file, which can then, for example,
> be generated programmatically as part of a Yocto recipe, 

Is this yocto generation upstreamed? Or this is some kind of internal
patch?

> or simply be
> kept in version control separately from the U-boot repository.
> 
> Tested-by: Sean Nyekjaer <sean.nyekjaer at prevas.dk>
> Signed-off-by: Rasmus Villemoes <rasmus.villemoes at prevas.dk>
> ---
> v2:
> * rename CONFIG_DEFAULT_ENV_FROM_FILE -> CONFIG_USE_DEFAULT_ENV_FILE
> * add Tested-by
> * provide a little more rationale (example use case instead of just
>   "sometimes be useful")
> * rebase to current master (v2018.03-189-gda773532cd)
> 
> This adds xxd as a build-time requirement. Not sure whether that needs
> mentioning in the Kconfig help text. On my Ubuntu 16.04, it is
> provided by the vim-common package, while more recent Ubuntu and
> Debian seem to have split it to a separate package.
> 
>  Makefile              | 16 ++++++++++++++++
>  env/Kconfig           | 18 ++++++++++++++++++
>  include/env_default.h |  4 ++++
>  3 files changed, 38 insertions(+)
> 
> diff --git a/Makefile b/Makefile
> index 5fa14789d9..867b189c41 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -423,6 +423,7 @@ endif
>  
>  version_h := include/generated/version_autogenerated.h
>  timestamp_h := include/generated/timestamp_autogenerated.h
> +defaultenv_h := include/generated/defaultenv_autogenerated.h
>  
>  no-dot-config-targets := clean clobber mrproper distclean \
>  			 help %docs check% coccicheck \
> @@ -1387,6 +1388,10 @@ ifeq ($(wildcard $(LDSCRIPT)),)
>  	@/bin/false
>  endif
>  
> +ifeq ($(CONFIG_USE_DEFAULT_ENV_FILE),y)
> +prepare1: $(defaultenv_h)
> +endif
> +
>  archprepare: prepare1 scripts_basic
>  
>  prepare0: archprepare FORCE
> @@ -1434,12 +1439,23 @@ define filechk_timestamp.h
>  	fi)
>  endef
>  
> +define filechk_defaultenv.h
> +	(grep -v '^#' | \
> +	 grep -v '^$$' | \
> +	 tr '\n' '\0' | \
> +	 sed -e 's/\\\x0/\n/' | \
> +	 xxd -i ; echo ", 0x00" ; )
> +endef
> +
>  $(version_h): include/config/uboot.release FORCE
>  	$(call filechk,version.h)
>  
>  $(timestamp_h): $(srctree)/Makefile FORCE
>  	$(call filechk,timestamp.h)
>  
> +$(defaultenv_h): $(CONFIG_DEFAULT_ENV_FILE:"%"=%) FORCE
> +	$(call filechk,defaultenv.h)
> +
>  #
> ---------------------------------------------------------------------------
> quiet_cmd_cpp_lds = LDS     $@ cmd_cpp_lds = $(CPP)
> -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) \ diff --git
> a/env/Kconfig b/env/Kconfig index a3c6298273..e8e21dcfc6 100644
> --- a/env/Kconfig
> +++ b/env/Kconfig
> @@ -486,4 +486,22 @@ config ENV_SIZE
>  
>  endif
>  
> +config USE_DEFAULT_ENV_FILE
> +	bool "Create default environment from file"
> +	help
> +	  Normally, the default environment is automatically
> generated
> +	  based on the settings of various CONFIG_* options, as well
> +	  as the CONFIG_EXTRA_ENV_SETTINGS. By selecting this option,
> +	  you can instead define the entire default environment in an
> +	  external file.
> +
> +config DEFAULT_ENV_FILE
> +	string "Path to default environment file"
> +	depends on USE_DEFAULT_ENV_FILE
> +	help
> +	  The path containing the default environment. The format is
> +	  the same as accepted by the mkenvimage tool: lines
> +	  containing key=value pairs, blank lines and lines beginning
> +	  with # are ignored.
> +
>  endmenu
> diff --git a/include/env_default.h b/include/env_default.h
> index b574345af2..1fbeb92f38 100644
> --- a/include/env_default.h
> +++ b/include/env_default.h
> @@ -22,6 +22,7 @@ static char default_environment[] = {
>  #else
>  const uchar default_environment[] = {
>  #endif
> +#ifndef CONFIG_USE_DEFAULT_ENV_FILE
>  #ifdef	CONFIG_ENV_CALLBACK_LIST_DEFAULT
>  	ENV_CALLBACK_VAR "=" CONFIG_ENV_CALLBACK_LIST_DEFAULT "\0"
>  #endif
> @@ -108,6 +109,9 @@ const uchar default_environment[] = {
>  	CONFIG_EXTRA_ENV_SETTINGS
>  #endif
>  	"\0"
> +#else /* CONFIG_USE_DEFAULT_ENV_FILE */
> +#include "generated/defaultenv_autogenerated.h"
> +#endif
>  #ifdef DEFAULT_ENV_INSTANCE_EMBEDDED
>  	}
>  #endif

The patch looks ok.

Reviewed-by: Lukasz Majewski <lukma at denx.de>


Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180320/50d34f4e/attachment.sig>


More information about the U-Boot mailing list