From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lukasz Majewski Date: Thu, 25 Jan 2018 10:30:37 +0100 Subject: [U-Boot] [RFC PATCH] Allow providing default environment from file In-Reply-To: <20180124095559.28317-1-rasmus.villemoes@prevas.dk> References: <20180124095559.28317-1-rasmus.villemoes@prevas.dk> Message-ID: <20180125103037.1ca9fa1e@jawa> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > --- > 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: