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

Lukasz Majewski l.majewski at majess.pl
Tue Sep 27 15:37:24 CEST 2016


Hi Simon,

> Hi Lukasz,
> 
> On 16 September 2016 at 22:57, Lukasz Majewski <l.majewski at 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 at 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 at 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 at 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

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160927/d47c2111/attachment.sig>


More information about the U-Boot mailing list