[U-Boot] [PATCHv2] scripts: Add script to extract default environment

This script looks for env_common.o object file and extracts from it default u-boot environment, which is afterwards printed on standard output.
Usage example: get_default_envs.sh > u-boot-env-default.txt
The generated text file can be used as input for mkenvimage.
Signed-off-by: Lukasz Majewski l.majewski@majess.pl
--- Changes for v2: - Sort uniquely entries - Exclude env_common.o generated for SPL --- scripts/get_default_envs.sh | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100755 scripts/get_default_envs.sh
diff --git a/scripts/get_default_envs.sh b/scripts/get_default_envs.sh new file mode 100755 index 0000000..7955db6 --- /dev/null +++ b/scripts/get_default_envs.sh @@ -0,0 +1,34 @@ +#! /bin/bash +# +# Copyright (C) 2016, Lukasz Majewski l.majewski@majess.pl +# +# SPDX-License-Identifier: GPL-2.0+ +# + +# This file extracts default envs from built u-boot +# usage: get_default_envs.sh > u-boot-env-default.txt +set -ue + +ENV_OBJ_FILE="env_common.o" +ENV_OBJ_FILE_COPY="copy_${ENV_OBJ_FILE}" + +echoerr() { echo "$@" 1>&2; } + +path=$(readlink -f $0) +env_obj_file_path=$(find ${path%/scripts*} -not -path "*/spl/*" \ + -name "${ENV_OBJ_FILE}") +[ -z "${env_obj_file_path}" ] && \ + { echoerr "File '${ENV_OBJ_FILE}' not found!"; exit 1; } + +cp ${env_obj_file_path} ${ENV_OBJ_FILE_COPY} + +# NOTE: objcopy saves its output to file passed in +# (copy_env_common.o in this case) +objcopy -O binary -j ".rodata.default_environment" ${ENV_OBJ_FILE_COPY} + +# Replace default '\0' with '\n' and sort entries +tr '\0' '\n' < ${ENV_OBJ_FILE_COPY} | sort -u + +rm ${ENV_OBJ_FILE_COPY} + +exit 0

Hi Lukasz,
On 16 September 2016 at 22:57, Lukasz Majewski l.majewski@majess.pl wrote:
This script looks for env_common.o object file and extracts from it default u-boot environment, which is afterwards printed on standard output.
Usage example: get_default_envs.sh > u-boot-env-default.txt
The generated text file can be used as input for mkenvimage.
Signed-off-by: Lukasz Majewski l.majewski@majess.pl
Changes for v2:
- Sort uniquely entries
- Exclude env_common.o generated for SPL
scripts/get_default_envs.sh | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100755 scripts/get_default_envs.sh
Reviewed-by: Simon Glass sjg@chromium.org
But why is this needed?
diff --git a/scripts/get_default_envs.sh b/scripts/get_default_envs.sh new file mode 100755 index 0000000..7955db6 --- /dev/null +++ b/scripts/get_default_envs.sh @@ -0,0 +1,34 @@ +#! /bin/bash +# +# Copyright (C) 2016, Lukasz Majewski l.majewski@majess.pl +# +# SPDX-License-Identifier: GPL-2.0+ +#
+# This file extracts default envs from built u-boot +# usage: get_default_envs.sh > u-boot-env-default.txt +set -ue
+ENV_OBJ_FILE="env_common.o" +ENV_OBJ_FILE_COPY="copy_${ENV_OBJ_FILE}"
+echoerr() { echo "$@" 1>&2; }
+path=$(readlink -f $0) +env_obj_file_path=$(find ${path%/scripts*} -not -path "*/spl/*" \
-name "${ENV_OBJ_FILE}")
+[ -z "${env_obj_file_path}" ] && \
- { echoerr "File '${ENV_OBJ_FILE}' not found!"; exit 1; }
+cp ${env_obj_file_path} ${ENV_OBJ_FILE_COPY}
+# NOTE: objcopy saves its output to file passed in +# (copy_env_common.o in this case) +objcopy -O binary -j ".rodata.default_environment" ${ENV_OBJ_FILE_COPY}
+# Replace default '\0' with '\n' and sort entries +tr '\0' '\n' < ${ENV_OBJ_FILE_COPY} | sort -u
+rm ${ENV_OBJ_FILE_COPY}
+exit 0
This isn't needed.
-- 2.1.4
Regards, Simon

Hi Simon,
Hi Lukasz,
On 16 September 2016 at 22:57, Lukasz Majewski l.majewski@majess.pl wrote:
This script looks for env_common.o object file and extracts from it default u-boot environment, which is afterwards printed on standard output.
Usage example: get_default_envs.sh > u-boot-env-default.txt
The generated text file can be used as input for mkenvimage.
Signed-off-by: Lukasz Majewski l.majewski@majess.pl
Changes for v2:
- Sort uniquely entries
- Exclude env_common.o generated for SPL
scripts/get_default_envs.sh | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100755 scripts/get_default_envs.sh
Reviewed-by: Simon Glass sjg@chromium.org
But why is this needed?
Some boards for production u-boot have all the envs hardcoded in their ./include/configs/<board>.h file.
Also, they support envs stored on persistent memory - like eMMC.
During flashing both u-boot and envs are stored on the target memory. Such script allows having the same data in both places.
I do know that I could also use external file, which I could include to u-boot during compilation and compile the boot.scr file with mkimage.
Or maybe there is any other way?
Best regards, Łukasz Majewski
diff --git a/scripts/get_default_envs.sh b/scripts/get_default_envs.sh new file mode 100755 index 0000000..7955db6 --- /dev/null +++ b/scripts/get_default_envs.sh @@ -0,0 +1,34 @@ +#! /bin/bash +# +# Copyright (C) 2016, Lukasz Majewski l.majewski@majess.pl +# +# SPDX-License-Identifier: GPL-2.0+ +#
+# This file extracts default envs from built u-boot +# usage: get_default_envs.sh > u-boot-env-default.txt +set -ue
+ENV_OBJ_FILE="env_common.o" +ENV_OBJ_FILE_COPY="copy_${ENV_OBJ_FILE}"
+echoerr() { echo "$@" 1>&2; }
+path=$(readlink -f $0) +env_obj_file_path=$(find ${path%/scripts*} -not -path "*/spl/*" \
-name "${ENV_OBJ_FILE}")
+[ -z "${env_obj_file_path}" ] && \
- { echoerr "File '${ENV_OBJ_FILE}' not found!"; exit 1; }
+cp ${env_obj_file_path} ${ENV_OBJ_FILE_COPY}
+# NOTE: objcopy saves its output to file passed in +# (copy_env_common.o in this case) +objcopy -O binary -j ".rodata.default_environment" ${ENV_OBJ_FILE_COPY} + +# Replace default '\0' with '\n' and sort entries +tr '\0' '\n' < ${ENV_OBJ_FILE_COPY} | sort -u
+rm ${ENV_OBJ_FILE_COPY}
+exit 0
This isn't needed.
-- 2.1.4
Regards, Simon

Hi,
On 27 September 2016 at 07:37, Lukasz Majewski l.majewski@majess.pl wrote:
Hi Simon,
Hi Lukasz,
On 16 September 2016 at 22:57, Lukasz Majewski l.majewski@majess.pl wrote:
This script looks for env_common.o object file and extracts from it default u-boot environment, which is afterwards printed on standard output.
Usage example: get_default_envs.sh > u-boot-env-default.txt
The generated text file can be used as input for mkenvimage.
Signed-off-by: Lukasz Majewski l.majewski@majess.pl
Changes for v2:
- Sort uniquely entries
- Exclude env_common.o generated for SPL
scripts/get_default_envs.sh | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100755 scripts/get_default_envs.sh
Reviewed-by: Simon Glass sjg@chromium.org
But why is this needed?
Some boards for production u-boot have all the envs hardcoded in their ./include/configs/<board>.h file.
Also, they support envs stored on persistent memory - like eMMC.
During flashing both u-boot and envs are stored on the target memory. Such script allows having the same data in both places.
I do know that I could also use external file, which I could include to u-boot during compilation and compile the boot.scr file with mkimage.
Or maybe there is any other way?
Seems OK to me, I was just curious.
Best regards, Łukasz Majewski
[...]

Hi Simon,
Hi,
On 27 September 2016 at 07:37, Lukasz Majewski l.majewski@majess.pl wrote:
Hi Simon,
Hi Lukasz,
On 16 September 2016 at 22:57, Lukasz Majewski l.majewski@majess.pl wrote:
This script looks for env_common.o object file and extracts from it default u-boot environment, which is afterwards printed on standard output.
Usage example: get_default_envs.sh > u-boot-env-default.txt
The generated text file can be used as input for mkenvimage.
Signed-off-by: Lukasz Majewski l.majewski@majess.pl
Changes for v2:
- Sort uniquely entries
- Exclude env_common.o generated for SPL
scripts/get_default_envs.sh | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100755 scripts/get_default_envs.sh
Reviewed-by: Simon Glass sjg@chromium.org
But why is this needed?
Some boards for production u-boot have all the envs hardcoded in their ./include/configs/<board>.h file.
Also, they support envs stored on persistent memory - like eMMC.
During flashing both u-boot and envs are stored on the target memory. Such script allows having the same data in both places.
I do know that I could also use external file, which I could include to u-boot during compilation and compile the boot.scr file with mkimage.
Or maybe there is any other way?
Seems OK to me, I was just curious.
I was afraid that similar functionality was already provided for e.g. sandbox :-).
Thanks for review.
Best regards, Łukasz Majewski
Best regards, Łukasz Majewski
[...]

On Sat, Sep 17, 2016 at 06:57:39AM +0200, Lukasz Majewski wrote:
This script looks for env_common.o object file and extracts from it default u-boot environment, which is afterwards printed on standard output.
Usage example: get_default_envs.sh > u-boot-env-default.txt
The generated text file can be used as input for mkenvimage.
Signed-off-by: Lukasz Majewski l.majewski@majess.pl Reviewed-by: Simon Glass sjg@chromium.org
Applied to u-boot/master, thanks!
participants (3)
-
Lukasz Majewski
-
Simon Glass
-
Tom Rini