Am 23. September 2020 23:15:50 MESZ schrieb Michael Walle <mich...@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 <mich...@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.


>                       "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.

Best regards

Heinrich

            \
>-              "fi;"                                                     \
>+              "fi\0"                                                    \
>+      \
>+      "boot_efi_binary="                                                \
>               "load ${devtype} ${devnum}:${distro_bootpart} "           \
>                       "${kernel_addr_r} efi/boot/"BOOTEFI_NAME"; "      \
>               "if fdt addr ${fdt_addr_r}; then "                        \
>@@ -152,6 +154,7 @@
>                               "run load_efi_dtb; "                      \
>                       "fi;"                                             \
>               "done;"                                                   \
>+              "run boot_efi_bootmgr;"                                   \
>               "if test -e ${devtype} ${devnum}:${distro_bootpart} "     \
>                                       "efi/boot/"BOOTEFI_NAME"; then "  \
>                               "echo Found EFI removable media binary "  \

Reply via email to