[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