[PATCH v2 4/4] boot: correct finding the default EFI binary
Ilias Apalodimas
ilias.apalodimas at linaro.org
Thu Apr 4 16:46:28 CEST 2024
Hi Heinrich,
FWIW reading at this, I don't see a point of having it overall. It has
a nice feature of trying to load external DTBs from a path though.
I think in the future we can move the dtb selection in
bootmeth_efi_mgr.c and delete this one
On Thu, 4 Apr 2024 at 14:49, Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
> * The sandbox must not use an arbitrary file name bootsbox.efi but the
> file name matching the host architecture to properly boot the respective
> file. We already have an include which provides a macro with the name of
> the EFI binary. Use it.
>
> * The path to the EFI binary should be absolute.
>
> * The path and the file name must be capitalized to conform to the UEFI
> specification. This is important when reading from case sensitive
> file systems.
>
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
> ---
> v2:
> new patch
> ---
> boot/bootmeth_efi.c | 44 +++-----------------------------------------
> test/boot/bootflow.c | 4 +++-
> 2 files changed, 6 insertions(+), 42 deletions(-)
>
> diff --git a/boot/bootmeth_efi.c b/boot/bootmeth_efi.c
> index a46b6c9c805..aebc5207fc0 100644
> --- a/boot/bootmeth_efi.c
> +++ b/boot/bootmeth_efi.c
> @@ -14,6 +14,7 @@
> #include <bootmeth.h>
> #include <command.h>
> #include <dm.h>
> +#include <efi_default_filename.h>
> #include <efi_loader.h>
> #include <fs.h>
> #include <malloc.h>
> @@ -23,43 +24,7 @@
> #include <pxe_utils.h>
> #include <linux/sizes.h>
>
> -#define EFI_DIRNAME "efi/boot/"
> -
> -/**
> - * get_efi_leafname() - Get the leaf name for the EFI file we expect
> - *
> - * @str: Place to put leaf name for this architecture, e.g. "bootaa64.efi".
> - * Must have at least 16 bytes of space
> - * @max_len: Length of @str, must be >=16
> - */
> -static int get_efi_leafname(char *str, int max_len)
> -{
> - const char *base;
> -
> - if (max_len < 16)
> - return log_msg_ret("spc", -ENOSPC);
> - if (IS_ENABLED(CONFIG_ARM64))
> - base = "bootaa64";
> - else if (IS_ENABLED(CONFIG_ARM))
> - base = "bootarm";
> - else if (IS_ENABLED(CONFIG_X86_RUN_32BIT))
> - base = "bootia32";
> - else if (IS_ENABLED(CONFIG_X86_RUN_64BIT))
> - base = "bootx64";
> - else if (IS_ENABLED(CONFIG_ARCH_RV32I))
> - base = "bootriscv32";
> - else if (IS_ENABLED(CONFIG_ARCH_RV64I))
> - base = "bootriscv64";
> - else if (IS_ENABLED(CONFIG_SANDBOX))
> - base = "bootsbox";
> - else
> - return -EINVAL;
> -
> - strcpy(str, base);
> - strcat(str, ".efi");
> -
> - return 0;
> -}
> +#define EFI_DIRNAME "/EFI/BOOT/"
>
> static int get_efi_pxe_arch(void)
> {
> @@ -259,10 +224,7 @@ static int distro_efi_try_bootflow_files(struct udevice *dev,
> return -ENOENT;
>
> strcpy(fname, EFI_DIRNAME);
> - ret = get_efi_leafname(fname + strlen(fname),
> - sizeof(fname) - strlen(fname));
> - if (ret)
> - return log_msg_ret("leaf", ret);
> + strcat(fname, BOOTEFI_NAME);
>
> if (bflow->blk)
> desc = dev_get_uclass_plat(bflow->blk);
> diff --git a/test/boot/bootflow.c b/test/boot/bootflow.c
> index e60e9309fa9..674d4c05f83 100644
> --- a/test/boot/bootflow.c
> +++ b/test/boot/bootflow.c
> @@ -13,6 +13,7 @@
> #include <bootstd.h>
> #include <cli.h>
> #include <dm.h>
> +#include <efi_default_filename.h>
> #include <expo.h>
> #ifdef CONFIG_SANDBOX
> #include <asm/test.h>
> @@ -179,7 +180,8 @@ static int bootflow_cmd_scan_e(struct unit_test_state *uts)
> ut_assert_nextline(" 3 efi media mmc 0 mmc1.bootdev.whole ");
> ut_assert_nextline(" ** No partition found, err=-2: No such file or directory");
> ut_assert_nextline(" 4 extlinux ready mmc 1 mmc1.bootdev.part_1 /extlinux/extlinux.conf");
> - ut_assert_nextline(" 5 efi fs mmc 1 mmc1.bootdev.part_1 efi/boot/bootsbox.efi");
> + ut_assert_nextline(" 5 efi fs mmc 1 mmc1.bootdev.part_1 /EFI/BOOT/"
> + BOOTEFI_NAME);
>
> ut_assert_skip_to_line("Scanning bootdev 'mmc0.bootdev':");
> ut_assert_skip_to_line(
> --
> 2.43.0
>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
Tested-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
More information about the U-Boot
mailing list