[PATCH v3 1/2] efi_loader: bootbin: do not load an initrd if none is provided

Heinrich Schuchardt xypron.glpk at gmx.de
Wed Apr 30 13:30:52 CEST 2025


On 30.04.25 13:00, Heinrich Schuchardt wrote:
> On 30.04.25 09:03, Heinrich Schuchardt wrote:
>> On 4/29/25 15:27, Adriano Cordova wrote:
>>> Do not try to create an initrd device path nor try to register
>>> an initrd with the EFI_LOAD_FILE2_PROTOCOL if none is provided.
>>>
>>> Handle initrd installation in efi_binary_run_dp with
>>> efi_install_initrd, imitating what is done for the fdt.
>>>
>>> Fixes: 36835a9105c ("efi_loader: binary_run: register an initrd")
>>> Reported-by: Weizhao Ouyang <o451686892 at gmail.com>
>>> Signed-off-by: Adriano Cordova <adriano.cordova at canonical.com>
>>> Tested-by: Weizhao Ouyang <o451686892 at gmail.com>
>>
>> I built and installed U-Boot for the StarFive VisionFive 2 based on 
>> origin/master plus this series.
>>
>> I created a FIT images using the its file listed below.
>>
>> I loaded and tried to run the FIT image:
>>
>> StarFive # load nvme 0:1 $kernel_addr_r initrd.itb
>> StarFive # bootm $kernel_addr_r
>>
>> and saw the following failure:
>>
>> ## Transferring control to EFI (at address 00000000) ...
>> Card did not respond to voltage select! : -110
>> Booting /initrd.itb
>> Not a PE-COFF file
>> Loading image failed
>>
>> We use the entry point instead of the load address when transferring 
>> control to the EFI sub-system.
>>
>> This bug was introduced by ecc7fdaa9ef1 ("bootm: Add a bootm command 
>> for type IH_OS_EFI") and is not related to your patches but we still 
>> need to fix it.
> 
> Addressed by:
> bootm: pass kernel load address not entry point for IH_OS_EFI
> https://patchwork.ozlabs.org/project/uboot/ 
> patch/20250430105546.327442-1-heinrich.schuchardt at canonical.com/
> 
>>
>> Afterwards I tried to boot into Ubuntu and got:
>>
>>    Loading Linux 6.14.0-13-generic ...
>>    Loading initial ramdisk ...
>>    error: failed to install protocols.
>>    Loading device tree blob...
>>
>>    Press any key to continue...
>>
>> It seems that U-Boot did not uninstall the LoadFile2 protocol when 
>> discovering that the EFI image was invalid. We should have a look at 
>> the error handling.
> 
> This issue still has to be resolved.

For FIT images we don't trigger the event group related to 
efi_guid_event_group_return_to_efibootmgr which calls event 
efi_initrd_return_notify() which in turn calls efi_initrd_deregister().

A call to efi_initrd_deregister() is missing in do_bootm_efi().

Maybe adding the call to efi_binary_run() and getting rid of the event 
group would be preferable.

@Ilias, @Masahisa
Any preferences?

Best regards

Heinrich

> 
>>
>> The initrd for my test case can be created with:
>>
>> echo 'hello world' > hello
>> echo hello | cpio -o -H newc > initrd
>>
> 
> Reviewed-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> 



More information about the U-Boot mailing list