Allow providing default environment from file
authorRasmus Villemoes <rasmus.villemoes@prevas.dk>
Tue, 20 Mar 2018 10:38:45 +0000 (11:38 +0100)
committerTom Rini <trini@konsulko.com>
Sat, 7 Apr 2018 00:45:28 +0000 (20:45 -0400)
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.

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, or simply be kept
in version control separately from the U-boot repository.

Tested-by: Sean Nyekjaer <sean.nyekjaer@prevas.dk>
Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Reviewed-by: Lukasz Majewski <lukma@denx.de>
Makefile
env/Kconfig
include/env_default.h

index 034e5aadce5c5296ceb8265f2a45ac8ed808972b..bfe115cf18de0e2b2460f5435404c995cdea8952 100644 (file)
--- 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 \
@@ -1391,6 +1392,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
@@ -1438,12 +1443,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) \
index 3bc1a35f658b0db7c1d2d18f7ec8d2c1bcbd78ef..680441c74c70da36a214603b4719144f81c555dd 100644 (file)
@@ -479,4 +479,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
index dd741315ba4e0a6f1dd794abda7a81a1e1f55b2e..ba1c3c0d74dee4d2333f9ff74e05d716732eb367 100644 (file)
@@ -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