[PATCH] distro_bootcmd: call EFI bootmgr even without having /EFI/boot

Michael Walle michael at walle.cc
Fri Sep 25 11:20:47 CEST 2020


Am 2020-09-24 00:17, schrieb Heinrich Schuchardt:
> Am 23. September 2020 23:15:50 MESZ schrieb Michael Walle 
> <michael at walle.cc>:
>> Currently, the EFI bootmgr is only called if there is a EFI binary
>> inside the path for removable media is found, i.e. /EFI/boot/. This
>> doesn't make sense. It is the duty of the bootmgr to find out the
>> path and name of the EFI binary to boot. It should be called even
>> if there is no /EFI/boot directory.
> 
> Yes, UEFI variables indicating the boot binary take precedence.
> \EFI\boot\ is the fallback.
> 
>> 
>> Thus, call the bootmgr before we try to boot the EFI binary inside
>> the removable media path.
>> 
>> Signed-off-by: Michael Walle <michael at walle.cc>
>> ---
>> include/config_distro_bootcmd.h | 7 +++++--
>> 1 file changed, 5 insertions(+), 2 deletions(-)
>> 
>> diff --git a/include/config_distro_bootcmd.h
>> b/include/config_distro_bootcmd.h
>> index fc0935fa21..c745f115f8 100644
>> --- a/include/config_distro_bootcmd.h
>> +++ b/include/config_distro_bootcmd.h
>> @@ -123,12 +123,14 @@
>> 
>> 
>> #define BOOTENV_SHARED_EFI
>>  \
>> -	"boot_efi_binary="                                                \
>> +	"boot_efi_bootmgr="                                               \
>> 		"if fdt addr ${fdt_addr_r}; then "                        \
> 
> The problem here is that we don't have a clue which device tree we
> should load to $fdt_addr_r to make this true.

The one specified in $fdtfile is loaded in the previous step if it
exists, just like in the removable media case. So I'm not sure I
what you mean.

But that raises the question how does the device tree end up in the
ESP. And I guess there can be only one set of device trees. For example
if you have two different kernel versions installed you'd have two
sets of device trees available, but only one can be put in //ESP/dtb
or //ESP/dtb/current).

>> 			"bootefi bootmgr ${fdt_addr_r};"                  \
>> 		"else "                                                   \
>> 			"bootefi bootmgr ${fdtcontroladdr};"
> 
> Don't pass an fdt address in the else path. Some boards use ACPI. If
> ACPI is not used we have a fallback logic in cmd/bootefi.c.

Ok.

-michael


More information about the U-Boot mailing list