|
[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 8/24/23 19:19, Stefano Stabellini wrote:
> 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?
Yes
> 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)
od seems to output a varying amount of whitespace between the address and
value. In this case, the cut command would seem to want to become cut -d" "
-f14 to account for the whitespace. awk is more predictable here, so I will
keep awk.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |