mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
linux: amend uimage load address for proper decompression
When kernel image is compressed, it is first loaded to RAM at load address specified in command line, then unpacks to loadaddr provided by uImage. For decompressed image not to overwrite compressed data, uncompressed image load address needs to be shifted by compressed image size + 1 MiB alignment.
This commit is contained in:
parent
2fb1df6623
commit
69f3db483e
@ -243,8 +243,19 @@ make_target() {
|
||||
fi
|
||||
|
||||
if [ -n "$KERNEL_UIMAGE_TARGET" ] ; then
|
||||
# determine compression used for kernel image
|
||||
KERNEL_UIMAGE_COMP=${KERNEL_UIMAGE_TARGET:7}
|
||||
KERNEL_UIMAGE_COMP=${KERNEL_UIMAGE_COMP:-none}
|
||||
|
||||
# calculate new load address to make kernel Image unpack to memory area after compressed image
|
||||
if [ "$KERNEL_UIMAGE_COMP" != "none" ] ; then
|
||||
COMPRESSED_SIZE=$(stat -t "arch/$TARGET_KERNEL_ARCH/boot/$KERNEL_TARGET" | awk '{print $2}')
|
||||
# align to 1 MiB
|
||||
COMPRESSED_SIZE=$(( (($COMPRESSED_SIZE - 1 >> 20) + 1) << 20 ))
|
||||
KERNEL_UIMAGE_LOADADDR=$(printf '%X' "$(( $KERNEL_UIMAGE_LOADADDR + $COMPRESSED_SIZE ))")
|
||||
KERNEL_UIMAGE_ENTRYADDR=$(printf '%X' "$(( $KERNEL_UIMAGE_ENTRYADDR + $COMPRESSED_SIZE ))")
|
||||
fi
|
||||
|
||||
mkimage -A $TARGET_KERNEL_ARCH \
|
||||
-O linux \
|
||||
-T kernel \
|
||||
|
Loading…
x
Reference in New Issue
Block a user