|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [ImageBuilder PATCH] uboot-script-gen: use size from arm64 Image header
On Thu, 24 Aug 2023, Stewart Hildebrand wrote:
> There is a corner case where the filesizes of the xen and Linux kernel images
> are not sufficient. These binaries likely contain .NOLOAD sections, which are
> not accounted in the filesize.
>
> Check for the presence of an arm64 kernel image header, and get the effective
> image size from the header. Use the effective image size for calculating the
> next load address and for populating the size in the /chosen/dom*/reg
> property.
>
> Signed-off-by: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>
> ---
> scripts/uboot-script-gen | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/uboot-script-gen b/scripts/uboot-script-gen
> index 9656a458ac00..50fe525e7145 100755
> --- a/scripts/uboot-script-gen
> +++ b/scripts/uboot-script-gen
> @@ -2,7 +2,7 @@
>
> offset=$((2*1024*1024))
> filesize=0
> -prog_req=(mkimage file fdtput mktemp awk)
> +prog_req=(mkimage file fdtput mktemp awk od)
>
> function cleanup_and_return_err()
> {
> @@ -435,6 +435,17 @@ function add_size()
> {
> local filename=$1
> local size=`stat -L --printf="%s" $filename`
> +
> + if [ "$(od -j 56 -N 4 -t x4 ${filename} | head -n 1 | awk -F' ' '{ print
> $2 }')" = "644d5241" ]
> + then
> + local size_header=$(od -j 16 -N 8 -t u8 ${filename} | head -n 1 |
> awk -F' ' '{ print $2 }')
> +
> + if [ "${size_header}" -gt "${size}" ]
> + then
> + size=${size_header}
> + fi
> + fi
Thanks Stewart this is great! Can you please add a good in-code comment
to explain what field you are reading of the header exactly and what is
the value 644d5241 you are comparing against?
Also I think it would be easier to read if you used "cut" instead of
awk and split the line a bit more like this:
# read header field XXX
local field_xxx =$(od -j 56 -N 4 -t x4 ${filename} | head -n 1 | cut -d " "
-f2)
# comparing against XXX
if [ $field_xxx = "644d5241" ]
then
# read header field "size" which indicates ....
local size_header=$(od -j 16 -N 8 -t u8 ${filename} | head -n 1 | cut
-d " " -f2)
if [ "${size_header}" -gt "${size}" ]
then
size=${size_header}
fi
fi
> memaddr=$(( $memaddr + $size + $offset - 1))
> memaddr=$(( $memaddr & ~($offset - 1) ))
> memaddr=`printf "0x%X\n" $memaddr`
> --
> 2.42.0
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |