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

Lukasz Majewski lukma at denx.de
Thu Jan 25 09:30:37 UTC 2018


Hi Rasmus,

> It is sometimes useful to be able to define the entire default
> environment in an external file.

There is already available script for extracting the environment.

Please look into:
./scripts/get_default_envs.sh

Maybe you can reuse it in this patch?

> This implements a Kconfig option for
> allowing that.
> 
> It is somewhat annoying to have two visible Kconfig options; it would
> probably be more user-friendly to just have the string option (with
> empty string obviously meaning not to use this feature). But then we'd
> also need a hidden CONFIG that we can use in the #ifdef in
> env_default.h, and I don't think one can set a def_bool based on
> whether a string-valued config is empty or not.
> 
> I've tried to make the accepted format the same as the one the
> mkenvimage tool accepts. I have no idea how portable the sed script
> implementing the "allow embedded newlines in values" is. Nor do I know
> if one can expect xxd to be available.
> 
> Signed-off-by: Rasmus Villemoes <rasmus.villemoes at prevas.dk>
> ---
>  Makefile              | 16 ++++++++++++++++
>  env/Kconfig           | 18 ++++++++++++++++++
>  include/env_default.h |  4 ++++
>  3 files changed, 38 insertions(+)
> 
> diff --git a/Makefile b/Makefile
> index 4981a2ed6f..e5ba5213fd 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 \
> @@ -1366,6 +1367,10 @@ ifeq ($(wildcard $(LDSCRIPT)),)
>  	@/bin/false
>  endif
>  
> +ifeq ($(CONFIG_DEFAULT_ENV_FROM_FILE),y)
> +prepare1: $(defaultenv_h)
> +endif
> +
>  archprepare: prepare1 scripts_basic
>  
>  prepare0: archprepare FORCE
> @@ -1413,12 +1418,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 a24370786b..1baebd743b 100644
> --- a/env/Kconfig
> +++ b/env/Kconfig
> @@ -482,4 +482,22 @@ config ENV_SIZE
>  
>  endif
>  
> +config DEFAULT_ENV_FROM_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 DEFAULT_ENV_FROM_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..656d202cc7 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_DEFAULT_ENV_FROM_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_DEFAULT_ENV_FROM_FILE */
> +#include "generated/defaultenv_autogenerated.h"
> +#endif
>  #ifdef DEFAULT_ENV_INSTANCE_EMBEDDED
>  	}
>  #endif



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/20180125/eeedb078/attachment.sig>


More information about the U-Boot mailing list