[U-Boot] [PATCH 01/34] Add target to generate initial environment

The initial environment is linked to the u-boot binary. Modifying the environment from User Space with the env tools requires that the tools are always built together with the bootloader to be sure that they contain the initial environment in case no environment is stored into persistent storage or when a board boots with just the default environment. This makes difficult for distros to provide a general package to access the environment. A simpler way is if the tools are generic for all boards and a configuration file is given to provide the initial environment.
The patch just generates the initial environment by extracting it from the compiled object. This file can then be used for tools in user space to initialize the environment.
Signed-off-by: Stefano Babic sbabic@denx.de --- Makefile | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/Makefile b/Makefile index 26db4e7b59..74e48ae9dc 100644 --- a/Makefile +++ b/Makefile @@ -1932,6 +1932,13 @@ endif $(build)=$(build-dir) $(@:.ko=.o) $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
+quiet_cmd_genenv = GENENV $@ +cmd_genenv = $(OBJCOPY) --dump-section .rodata.default_environment=$@ env/common.o; \ + sed --in-place -e 's/\x00/\x0A/g' $@ + +u-boot-initial-env: u-boot.bin + $(call if_changed,genenv) + # Consistency checks # ---------------------------------------------------------------------------

On Wed, Mar 13, 2019 at 8:47 AM Stefano Babic sbabic@denx.de wrote:
The initial environment is linked to the u-boot binary. Modifying the environment from User Space with the env tools requires that the tools are always built together with the bootloader to be sure that they contain the initial environment in case no environment is stored into persistent storage or when a board boots with just the default environment. This makes difficult for distros to provide a general package to access the environment. A simpler way is if the tools are generic for all boards and a configuration file is given to provide the initial environment.
The patch just generates the initial environment by extracting it from the compiled object. This file can then be used for tools in user space to initialize the environment.
Signed-off-by: Stefano Babic sbabic@denx.de
Makefile | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/Makefile b/Makefile index 26db4e7b59..74e48ae9dc 100644 --- a/Makefile +++ b/Makefile @@ -1932,6 +1932,13 @@ endif $(build)=$(build-dir) $(@:.ko=.o) $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
+quiet_cmd_genenv = GENENV $@ +cmd_genenv = $(OBJCOPY) --dump-section .rodata.default_environment=$@ env/common.o; \
sed --in-place -e 's/\x00/\x0A/g' $@
Really an observation rather than an objection - there are boards which have newlines embedded in their compiled in environments - ge_bx50v3 and mx53ppd (the failbootcmd variable) are the two I know of.
+u-boot-initial-env: u-boot.bin
$(call if_changed,genenv)
# Consistency checks # ---------------------------------------------------------------------------
-- 2.17.1
U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
-- Alex Kiernan

Hi Alex,
On 13/03/19 10:31, Alex Kiernan wrote:
On Wed, Mar 13, 2019 at 8:47 AM Stefano Babic sbabic@denx.de wrote:
The initial environment is linked to the u-boot binary. Modifying the environment from User Space with the env tools requires that the tools are always built together with the bootloader to be sure that they contain the initial environment in case no environment is stored into persistent storage or when a board boots with just the default environment. This makes difficult for distros to provide a general package to access the environment. A simpler way is if the tools are generic for all boards and a configuration file is given to provide the initial environment.
The patch just generates the initial environment by extracting it from the compiled object. This file can then be used for tools in user space to initialize the environment.
Signed-off-by: Stefano Babic sbabic@denx.de
Makefile | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/Makefile b/Makefile index 26db4e7b59..74e48ae9dc 100644 --- a/Makefile +++ b/Makefile @@ -1932,6 +1932,13 @@ endif $(build)=$(build-dir) $(@:.ko=.o) $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
+quiet_cmd_genenv = GENENV $@ +cmd_genenv = $(OBJCOPY) --dump-section .rodata.default_environment=$@ env/common.o; \
sed --in-place -e 's/\x00/\x0A/g' $@
Really an observation rather than an objection - there are boards which have newlines embedded in their compiled in environments - ge_bx50v3 and mx53ppd (the failbootcmd variable) are the two I know of.
Right - but I guess that this could be better handled by external scripts else here in U-Boot. The target simply dumps the compiled in environment to be available t oexternal tools. For your use cases, it is required a more sophisticated logic that checks for newlines if they are surrounded by ".
Regards, Stefano
+u-boot-initial-env: u-boot.bin
$(call if_changed,genenv)
# Consistency checks # ---------------------------------------------------------------------------
-- 2.17.1
U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
-- Alex Kiernan

On Wed, Mar 13, 2019 at 09:46:45AM +0100, Stefano Babic wrote:
The initial environment is linked to the u-boot binary. Modifying the environment from User Space with the env tools requires that the tools are always built together with the bootloader to be sure that they contain the initial environment in case no environment is stored into persistent storage or when a board boots with just the default environment. This makes difficult for distros to provide a general package to access the environment. A simpler way is if the tools are generic for all boards and a configuration file is given to provide the initial environment.
The patch just generates the initial environment by extracting it from the compiled object. This file can then be used for tools in user space to initialize the environment.
Signed-off-by: Stefano Babic sbabic@denx.de
Applied to u-boot/master, thanks!
participants (3)
-
Alex Kiernan
-
Stefano Babic
-
Tom Rini