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

Heinrich Schuchardt xypron.glpk at gmx.de
Thu Sep 24 00:17:02 CEST 2020


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.


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



More information about the U-Boot mailing list