On 11/21/25 00:38, Masahisa Kojima wrote:
The bootm command can handle the compressed image, but current
code fails to boot from it.
## Loading kernel (any) from FIT Image at a8000000 ...
<snip>
Compression: gzip compressed
Data Start: 0xa80000d4
Data Size: 10114520 Bytes = 9.6 MiB
Architecture: AArch64
OS: EFI Firmware
Load Address: 0x90000000
<snip>
Uncompressing Kernel Image to 90000000
## Transferring control to EFI (at address a80000d4) ...
Booting <NULL>
Not a PE-COFF file
Loading image failed
To take care of the compressed image, the load address needs
to be passed instead of the original compressed image address.
Signed-off-by: Masahisa Kojima <[email protected]>
Hello Masahisa,
Thank you for diving into this problem.
In test/py/tests/test_efi_fit.py we are testing on the sandbox with and
without compression. Why would the problem not show up in the test?
539 # Run tests
540 # - fdt OFF, initrd OFF, gzip OFF
541 launch_efi(False, False, False)
542 # - fdt ON, initrd OFF, gzip OFF
543 launch_efi(True, False, False)
544 # - fdt OFF, initrd ON, gzip OFF
545 launch_efi(False, True, False)
546
547 if is_sandbox:
548 # - fdt OFF, initrd OFF, gzip ON
549 launch_efi(False, False, True)
550 # - fdt ON, initrd OFF, gzip ON
551 launch_efi(True, False, True)
552 # - fdt OFF, initrd ON, gzip ON
553 launch_efi(False, True, True)
The test should be corrected to show you issue.
Best regards
Heinrich
---
boot/bootm_os.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/boot/bootm_os.c b/boot/bootm_os.c
index 88f7c183867..ae20b555f5c 100644
--- a/boot/bootm_os.c
+++ b/boot/bootm_os.c
@@ -509,11 +509,11 @@ static int do_bootm_efi(int flag, struct bootm_info *bmi)
/* We expect to return */
images->os.type = IH_TYPE_STANDALONE;
- image_buf = map_sysmem(images->os.image_start, images->os.image_len);
+ image_buf = map_sysmem(images->os.load, images->os.image_len);
/* Run EFI image */
printf("## Transferring control to EFI (at address %08lx) ...\n",
- images->os.image_start);
+ images->os.load);
bootstage_mark(BOOTSTAGE_ID_RUN_OS);
ret = efi_binary_run(image_buf, images->os.image_len,