[PATCH 1/1] bootm: pass kernel load address not entry point for IH_OS_EFI

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Wed Apr 30 17:17:05 CEST 2025


On 30.04.25 17:01, Simon Glass wrote:
> Hi Heinrich,
> 
> On Wed, 30 Apr 2025 at 08:04, Heinrich Schuchardt
> <heinrich.schuchardt at canonical.com> wrote:
>>
>> On 30.04.25 15:54, Simon Glass wrote:
>>> Hi Heinrich,
>>>
>>> On Wed, 30 Apr 2025 at 04:55, Heinrich Schuchardt
>>> <heinrich.schuchardt at canonical.com> wrote:
>>>>
>>>> The EFI sub-system needs the load address and not the entry point
>>>> to boot the binary passed from the bootm command. The entry point
>>>> is derived from the PE-COFF header of the binary.
>>>>
>>>> Fixes: ecc7fdaa9ef1 ("bootm: Add a bootm command for type IH_OS_EFI")
>>>> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
>>>> ---
>>>>    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 dc9d3e61fca..a3c7cb5332e 100644
>>>> --- a/boot/bootm_os.c
>>>> +++ b/boot/bootm_os.c
>>>> @@ -498,11 +498,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->ep, images->os.image_len);
>>>> +       image_buf = map_sysmem(images->os.image_start, images->os.image_len);
>>>>
>>>>           /* Run EFI image */
>>>>           printf("## Transferring control to EFI (at address %08lx) ...\n",
>>>> -              images->ep);
>>>> +              images->os.image_start);
>>>>           bootstage_mark(BOOTSTAGE_ID_RUN_OS);
>>>>
>>>>           ret = efi_binary_run(image_buf, images->os.image_len,
>>>
>>> In this case ep should be set to image_start as it is with many
>>> methods. How come it isn't in this case?
>>
>> As described above the entry point is encoded in the PE-COFF header.
>>
>> What makes you think that a user would set it in an its file containing
>> an EFI binary?
>>
>> If it where set, it would point to an address after the load address and
>> not to the start of the PE-COFF header.
>>
>> The proper design would completely remove load and entry addresses in
>> FIT images and use LMB for memory allocation.
> 
> You are missing the point entirely.
> 
> However the image calculates the entry point is up to that image. But
> the correct entry point should be put into ->ep
> 
> We can't have some OS--booting functions using ->ep and some using ->os.load
> 
> So please dig in a little more and fix whatever is going wrong here
> and ensure that ->ep is set correctly. If you need help, please ask.

The only information that the EFI sub-system cares about is the start of 
the image. That information is in os.start_image.

Field ep is for the entry point and not for the start of the image and 
EFI should never take it from the FIT meta-information.

This is why whatever value I put into the field entry of my handcrafted 
its file is completely irrelevant.

Best regards

Heinrich



More information about the U-Boot mailing list