diff mbox

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

Message ID 1474088259-10095-1-git-send-email-l.majewski@majess.pl
State Accepted
Commit 27229b2a4caf60ef685f8b9d1a3f6304487b18c7
Delegated to: Tom Rini
Headers show

Commit Message

Lukasz Majewski Sept. 17, 2016, 4:57 a.m. UTC
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

Comments

Simon Glass Sept. 27, 2016, 12:33 a.m. UTC | #1
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
Lukasz Majewski Sept. 27, 2016, 1:37 p.m. UTC | #2
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
Simon Glass Sept. 28, 2016, 3:46 p.m. UTC | #3
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

[...]
Lukasz Majewski Sept. 28, 2016, 8:33 p.m. UTC | #4
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
> 
> [...]
Tom Rini Oct. 8, 2016, 5:06 p.m. UTC | #5
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!
diff mbox

Patch

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