[U-Boot] script: Make the get_default_envs.sh script working with newest u-boot

Message ID 20180213220113.14600-1-lukma@denx.de
State Superseded
Delegated to: Tom Rini
Headers show
Series
  • [U-Boot] script: Make the get_default_envs.sh script working with newest u-boot
Related show

Commit Message

Lukasz Majewski Feb. 13, 2018, 10:01 p.m.
This commit fixes several issues:

- After moving env related code to ./env directory the env_common.o file
is no longer present in the system (has been replaced with built-in.o).

- Use ${OBJCOPY} if available, fallback to system default's objcopy if not
present.

- Extend the script to accept different build directory than current one.
It is extremely handy with OE usage, where source code is separated from
build.

Signed-off-by: Lukasz Majewski <lukma@denx.de>
---

 scripts/get_default_envs.sh | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

Comments

Alex Kiernan Feb. 13, 2018, 10:54 p.m. | #1
On Tue, Feb 13, 2018 at 10:01 PM, Lukasz Majewski <lukma@denx.de> wrote:
> This commit fixes several issues:
>
> - After moving env related code to ./env directory the env_common.o file
> is no longer present in the system (has been replaced with built-in.o).
>
> - Use ${OBJCOPY} if available, fallback to system default's objcopy if not
> present.
>
> - Extend the script to accept different build directory than current one.
> It is extremely handy with OE usage, where source code is separated from
> build.
>
> Signed-off-by: Lukasz Majewski <lukma@denx.de>
> ---
>
>  scripts/get_default_envs.sh | 19 ++++++++++++++-----
>  1 file changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/scripts/get_default_envs.sh b/scripts/get_default_envs.sh
> index 7955db60e5..bbb6d0a6ef 100755
> --- a/scripts/get_default_envs.sh
> +++ b/scripts/get_default_envs.sh
> @@ -6,16 +6,24 @@
>  #
>
>  # This file extracts default envs from built u-boot
> -# usage: get_default_envs.sh > u-boot-env-default.txt
> +# usage: get_default_envs.sh [build dir] > u-boot-env-default.txt
>  set -ue
>
> -ENV_OBJ_FILE="env_common.o"
> +: "${OBJCOPY:=objcopy}"
> +
> +ENV_OBJ_FILE="built-in.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/*" \
> +if [ "$#" -eq 1 ]; then
> +    path=${1}
> +else
> +    path=$(readlink -f $0)
> +    path=${path%/scripts*}
> +fi
> +
> +env_obj_file_path=$(find ${path} -path "*/env/*" -not -path "*/spl/*" \
>                          -name "${ENV_OBJ_FILE}")
>  [ -z "${env_obj_file_path}" ] && \
>      { echoerr "File '${ENV_OBJ_FILE}' not found!"; exit 1; }
> @@ -24,7 +32,8 @@ 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}
> +
> +${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

Tested-by: Alex Kiernan <alex.kiernan@gmail.com>
Tuomas Tynkkynen Feb. 14, 2018, 1:25 a.m. | #2
Hi,

On Tue, 13 Feb 2018 23:01:13 +0100
Lukasz Majewski <lukma@denx.de> wrote:

> This commit fixes several issues:
> 
> - After moving env related code to ./env directory the env_common.o file
> is no longer present in the system (has been replaced with built-in.o).
> 
> - Use ${OBJCOPY} if available, fallback to system default's objcopy if not
> present.
> 
> - Extend the script to accept different build directory than current one.
> It is extremely handy with OE usage, where source code is separated from
> build.
> 
> Signed-off-by: Lukasz Majewski <lukma@denx.de>
> ---
> 
>  scripts/get_default_envs.sh | 19 ++++++++++++++-----
>  1 file changed, 14 insertions(+), 5 deletions(-)
> 
> diff --git a/scripts/get_default_envs.sh b/scripts/get_default_envs.sh
> index 7955db60e5..bbb6d0a6ef 100755
> --- a/scripts/get_default_envs.sh
> +++ b/scripts/get_default_envs.sh
> @@ -6,16 +6,24 @@
>  #
>  
>  # This file extracts default envs from built u-boot
> -# usage: get_default_envs.sh > u-boot-env-default.txt
> +# usage: get_default_envs.sh [build dir] > u-boot-env-default.txt
>  set -ue
>  
> -ENV_OBJ_FILE="env_common.o"
> +: "${OBJCOPY:=objcopy}"

Maybe "${CROSS_COMPILE}objcopy" would be a better default as that's what
the build system uses.
Lukasz Majewski Feb. 14, 2018, 8:50 a.m. | #3
On Wed, 14 Feb 2018 03:25:58 +0200
Tuomas Tynkkynen <tuomas@tuxera.com> wrote:

> Hi,
> 
> On Tue, 13 Feb 2018 23:01:13 +0100
> Lukasz Majewski <lukma@denx.de> wrote:
> 
> > This commit fixes several issues:
> > 
> > - After moving env related code to ./env directory the env_common.o
> > file is no longer present in the system (has been replaced with
> > built-in.o).
> > 
> > - Use ${OBJCOPY} if available, fallback to system default's objcopy
> > if not present.
> > 
> > - Extend the script to accept different build directory than
> > current one. It is extremely handy with OE usage, where source code
> > is separated from build.
> > 
> > Signed-off-by: Lukasz Majewski <lukma@denx.de>
> > ---
> > 
> >  scripts/get_default_envs.sh | 19 ++++++++++++++-----
> >  1 file changed, 14 insertions(+), 5 deletions(-)
> > 
> > diff --git a/scripts/get_default_envs.sh
> > b/scripts/get_default_envs.sh index 7955db60e5..bbb6d0a6ef 100755
> > --- a/scripts/get_default_envs.sh
> > +++ b/scripts/get_default_envs.sh
> > @@ -6,16 +6,24 @@
> >  #
> >  
> >  # This file extracts default envs from built u-boot
> > -# usage: get_default_envs.sh > u-boot-env-default.txt
> > +# usage: get_default_envs.sh [build dir] > u-boot-env-default.txt
> >  set -ue
> >  
> > -ENV_OBJ_FILE="env_common.o"
> > +: "${OBJCOPY:=objcopy}"  
> 
> Maybe "${CROSS_COMPILE}objcopy" would be a better default as that's
> what the build system uses.

Unfortunately not with OE builds. In OE, the OBJCOPY is set to arm
specific objcopy.

With fallback (objcopy) from your local machine - it depends if it
supports multi arch or not.

A side note:

I do use this script with /tools/mkenvimage to generate default main
and redundant envs.


Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
Tuomas Tynkkynen Feb. 14, 2018, 10:01 a.m. | #4
On Wed, 14 Feb 2018 09:50:17 +0100
Lukasz Majewski <lukma@denx.de> wrote:

> On Wed, 14 Feb 2018 03:25:58 +0200
> Tuomas Tynkkynen <tuomas@tuxera.com> wrote:
> 
> > Hi,
> > 
> > On Tue, 13 Feb 2018 23:01:13 +0100
> > Lukasz Majewski <lukma@denx.de> wrote:
> > 
> > > This commit fixes several issues:
> > > 
> > > - After moving env related code to ./env directory the env_common.o
> > > file is no longer present in the system (has been replaced with
> > > built-in.o).
> > > 
> > > - Use ${OBJCOPY} if available, fallback to system default's objcopy
> > > if not present.
> > > 
> > > - Extend the script to accept different build directory than
> > > current one. It is extremely handy with OE usage, where source code
> > > is separated from build.
> > > 
> > > Signed-off-by: Lukasz Majewski <lukma@denx.de>
> > > ---
> > > 
> > >  scripts/get_default_envs.sh | 19 ++++++++++++++-----
> > >  1 file changed, 14 insertions(+), 5 deletions(-)
> > > 
> > > diff --git a/scripts/get_default_envs.sh
> > > b/scripts/get_default_envs.sh index 7955db60e5..bbb6d0a6ef 100755
> > > --- a/scripts/get_default_envs.sh
> > > +++ b/scripts/get_default_envs.sh
> > > @@ -6,16 +6,24 @@
> > >  #
> > >  
> > >  # This file extracts default envs from built u-boot
> > > -# usage: get_default_envs.sh > u-boot-env-default.txt
> > > +# usage: get_default_envs.sh [build dir] > u-boot-env-default.txt
> > >  set -ue
> > >  
> > > -ENV_OBJ_FILE="env_common.o"
> > > +: "${OBJCOPY:=objcopy}"  
> > 
> > Maybe "${CROSS_COMPILE}objcopy" would be a better default as that's
> > what the build system uses.
> 
> Unfortunately not with OE builds. In OE, the OBJCOPY is set to arm
> specific objcopy.
> 
> With fallback (objcopy) from your local machine - it depends if it
> supports multi arch or not.

No, I meant that instead of having a fallback of "objcopy", have a 
fallback of "${CROSS_COMPILE}objcopy". I.e. squashing this change:

diff --git a/scripts/get_default_envs.sh b/scripts/get_default_envs.sh
index 3e532d12c4..184cc19ab7 100755
--- a/scripts/get_default_envs.sh
+++ b/scripts/get_default_envs.sh
@@ -9,7 +9,7 @@
 # usage: get_default_envs.sh [build dir] > u-boot-env-default.txt
 set -ue
 
-: "${OBJCOPY:=objcopy}"
+: "${OBJCOPY:=${CROSS_COMPILE:-}objcopy}"
 
 ENV_OBJ_FILE="built-in.o"
 ENV_OBJ_FILE_COPY="copy_${ENV_OBJ_FILE}"

That way the script works out-of-the-box for people who do the usual

export CROSS_COMPILE=aarch64-linux-gnu- (or whatever)

when building U-Boot.
Lukasz Majewski Feb. 14, 2018, 10:35 a.m. | #5
Hi Tuomas,

> On Wed, 14 Feb 2018 09:50:17 +0100
> Lukasz Majewski <lukma@denx.de> wrote:
> 
> > On Wed, 14 Feb 2018 03:25:58 +0200
> > Tuomas Tynkkynen <tuomas@tuxera.com> wrote:
> >   
> > > Hi,
> > > 
> > > On Tue, 13 Feb 2018 23:01:13 +0100
> > > Lukasz Majewski <lukma@denx.de> wrote:
> > >   
> > > > This commit fixes several issues:
> > > > 
> > > > - After moving env related code to ./env directory the
> > > > env_common.o file is no longer present in the system (has been
> > > > replaced with built-in.o).
> > > > 
> > > > - Use ${OBJCOPY} if available, fallback to system default's
> > > > objcopy if not present.
> > > > 
> > > > - Extend the script to accept different build directory than
> > > > current one. It is extremely handy with OE usage, where source
> > > > code is separated from build.
> > > > 
> > > > Signed-off-by: Lukasz Majewski <lukma@denx.de>
> > > > ---
> > > > 
> > > >  scripts/get_default_envs.sh | 19 ++++++++++++++-----
> > > >  1 file changed, 14 insertions(+), 5 deletions(-)
> > > > 
> > > > diff --git a/scripts/get_default_envs.sh
> > > > b/scripts/get_default_envs.sh index 7955db60e5..bbb6d0a6ef
> > > > 100755 --- a/scripts/get_default_envs.sh
> > > > +++ b/scripts/get_default_envs.sh
> > > > @@ -6,16 +6,24 @@
> > > >  #
> > > >  
> > > >  # This file extracts default envs from built u-boot
> > > > -# usage: get_default_envs.sh > u-boot-env-default.txt
> > > > +# usage: get_default_envs.sh [build dir] >
> > > > u-boot-env-default.txt set -ue
> > > >  
> > > > -ENV_OBJ_FILE="env_common.o"
> > > > +: "${OBJCOPY:=objcopy}"    
> > > 
> > > Maybe "${CROSS_COMPILE}objcopy" would be a better default as
> > > that's what the build system uses.  
> > 
> > Unfortunately not with OE builds. In OE, the OBJCOPY is set to arm
> > specific objcopy.
> > 
> > With fallback (objcopy) from your local machine - it depends if it
> > supports multi arch or not.  
> 
> No, I meant that instead of having a fallback of "objcopy", have a 
> fallback of "${CROSS_COMPILE}objcopy". I.e. squashing this change:
> 
> diff --git a/scripts/get_default_envs.sh b/scripts/get_default_envs.sh
> index 3e532d12c4..184cc19ab7 100755
> --- a/scripts/get_default_envs.sh
> +++ b/scripts/get_default_envs.sh
> @@ -9,7 +9,7 @@
>  # usage: get_default_envs.sh [build dir] > u-boot-env-default.txt
>  set -ue
>  
> -: "${OBJCOPY:=objcopy}"
> +: "${OBJCOPY:=${CROSS_COMPILE:-}objcopy}"

Yes, you are obviously right. I've misunderstood you, sorry.

I will prepare v3 immediately.

Thanks.

>  
>  ENV_OBJ_FILE="built-in.o"
>  ENV_OBJ_FILE_COPY="copy_${ENV_OBJ_FILE}"
> 
> That way the script works out-of-the-box for people who do the usual
> 
> export CROSS_COMPILE=aarch64-linux-gnu- (or whatever)
> 
> when building U-Boot.




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de

Patch

diff --git a/scripts/get_default_envs.sh b/scripts/get_default_envs.sh
index 7955db60e5..bbb6d0a6ef 100755
--- a/scripts/get_default_envs.sh
+++ b/scripts/get_default_envs.sh
@@ -6,16 +6,24 @@ 
 #
 
 # This file extracts default envs from built u-boot
-# usage: get_default_envs.sh > u-boot-env-default.txt
+# usage: get_default_envs.sh [build dir] > u-boot-env-default.txt
 set -ue
 
-ENV_OBJ_FILE="env_common.o"
+: "${OBJCOPY:=objcopy}"
+
+ENV_OBJ_FILE="built-in.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/*" \
+if [ "$#" -eq 1 ]; then
+    path=${1}
+else
+    path=$(readlink -f $0)
+    path=${path%/scripts*}
+fi
+
+env_obj_file_path=$(find ${path} -path "*/env/*" -not -path "*/spl/*" \
 			 -name "${ENV_OBJ_FILE}")
 [ -z "${env_obj_file_path}" ] && \
     { echoerr "File '${ENV_OBJ_FILE}' not found!"; exit 1; }
@@ -24,7 +32,8 @@  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}
+
+${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