[PATCH] bootm: fix boot failure from compressed image for IH_OS_EFI

Heinrich Schuchardt xypron.glpk at gmx.de
Fri Nov 21 09:41:23 CET 2025


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 <kojima.masahisa at socionext.com>

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,



More information about the U-Boot mailing list