
On 24-01-2018 10:55, Rasmus Villemoes wrote:
It is sometimes useful to be able to define the entire default environment in an external file. 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@prevas.dk
Tested-by: Sean Nyekjaer sean.nyekjaer@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