[PATCH v8 3/8] efi: Move default filename to a function

Ilias Apalodimas ilias.apalodimas at linaro.org
Fri Oct 25 11:52:59 CEST 2024


Hi Simon,

On Tue, 22 Oct 2024 at 15:00, Simon Glass <sjg at chromium.org> wrote:
>
> Use a function to obtain the device EFI filename, so that we can control
> how sandbox behaves.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> Changes in v8:
> - Add new patch to move default filename to a function
>
>  boot/Makefile                                      |  4 +++-
>  boot/bootmeth_efi.c                                |  4 ++--
>  include/efi_default_filename.h => boot/efi_fname.c | 11 +++++------
>  include/efi.h                                      |  9 +++++++++
>  lib/efi_loader/efi_bootmgr.c                       | 10 +++++++---
>  test/boot/bootflow.c                               |  6 +++---
>  6 files changed, 29 insertions(+), 15 deletions(-)
>  rename include/efi_default_filename.h => boot/efi_fname.c (93%)

Let's not spread efi files all around the place. Can you add the
function you want in lib/efi_loader/efi_helped.c which is there to add
helper files?


>
> diff --git a/boot/Makefile b/boot/Makefile
> index b24f806d5bf..d3f2c02068c 100644
> --- a/boot/Makefile
> +++ b/boot/Makefile
> @@ -28,7 +28,7 @@ obj-$(CONFIG_$(PHASE_)BOOTSTD_PROG) += prog_boot.o
>
>  obj-$(CONFIG_$(PHASE_)BOOTMETH_EXTLINUX) += bootmeth_extlinux.o
>  obj-$(CONFIG_$(PHASE_)BOOTMETH_EXTLINUX_PXE) += bootmeth_pxe.o
> -obj-$(CONFIG_$(PHASE_)BOOTMETH_EFILOADER) += bootmeth_efi.o
> +obj-$(CONFIG_$(PHASE_)BOOTMETH_EFILOADER) += bootmeth_efi.o efi_fname.o
>  obj-$(CONFIG_$(PHASE_)BOOTMETH_CROS) += bootm.o bootm_os.o bootmeth_cros.o
>  obj-$(CONFIG_$(PHASE_)BOOTMETH_QFW) += bootmeth_qfw.o
>  obj-$(CONFIG_$(PHASE_)BOOTMETH_SANDBOX) += bootmeth_sandbox.o
> @@ -40,6 +40,8 @@ obj-$(CONFIG_$(PHASE_)EXPO) += bootflow_menu.o
>  obj-$(CONFIG_$(PHASE_)BOOTSTD) += bootflow_menu.o
>  endif
>
> +obj-$(CONFIG_EFI_LOADER) += efi_fname.o
> +
>  obj-$(CONFIG_$(PHASE_)OF_LIBFDT) += fdt_support.o
>  obj-$(CONFIG_$(PHASE_)FDT_SIMPLEFB) += fdt_simplefb.o
>
> diff --git a/boot/bootmeth_efi.c b/boot/bootmeth_efi.c
> index 2ad6d3b4ace..371b36d550b 100644
> --- a/boot/bootmeth_efi.c
> +++ b/boot/bootmeth_efi.c
> @@ -13,7 +13,7 @@
>  #include <bootmeth.h>
>  #include <command.h>
>  #include <dm.h>
> -#include <efi_default_filename.h>
> +#include <efi.h>
>  #include <efi_loader.h>
>  #include <fs.h>
>  #include <malloc.h>
> @@ -168,7 +168,7 @@ static int distro_efi_try_bootflow_files(struct udevice *dev,
>         }
>
>         strcpy(fname, EFI_DIRNAME);
> -       strcat(fname, BOOTEFI_NAME);
> +       strcat(fname, efi_get_basename());
>
>         if (bflow->blk)
>                  desc = dev_get_uclass_plat(bflow->blk);
> diff --git a/include/efi_default_filename.h b/boot/efi_fname.c
> similarity index 93%
> rename from include/efi_default_filename.h
> rename to boot/efi_fname.c
> index 77932984b55..a6b11383bba 100644
> --- a/include/efi_default_filename.h
> +++ b/boot/efi_fname.c
> @@ -8,13 +8,9 @@
>   * Copyright (c) 2022, Linaro Limited
>   */
>
> -#ifndef _EFI_DEFAULT_FILENAME_H
> -#define _EFI_DEFAULT_FILENAME_H
> -
> +#include <efi.h>
>  #include <host_arch.h>
>
> -#undef BOOTEFI_NAME
> -
>  #ifdef CONFIG_SANDBOX
>
>  #if HOST_ARCH == HOST_ARCH_X86_64
> @@ -53,4 +49,7 @@
>
>  #endif
>
> -#endif
> +const char *efi_get_basename(void)
> +{
> +       return BOOTEFI_NAME;
> +}
> diff --git a/include/efi.h b/include/efi.h
> index 84640cf7b25..1b8093bd4d3 100644
> --- a/include/efi.h
> +++ b/include/efi.h
> @@ -669,4 +669,13 @@ int efi_get_mmap(struct efi_mem_desc **descp, int *sizep, uint *keyp,
>   */
>  void efi_show_tables(struct efi_system_table *systab);
>
> +/**
> + * efi_get_basename() - Get the default filename to use when loading
> + *
> + * E.g. this returns BOOTAA64.EFI for an aarch target
> + *
> + * Return: Default EFI filename
> + */
> +const char *efi_get_basename(void);
> +
>  #endif /* _LINUX_EFI_H */
> diff --git a/lib/efi_loader/efi_bootmgr.c b/lib/efi_loader/efi_bootmgr.c
> index a3aa2b8d1b9..cb9664c91a2 100644
> --- a/lib/efi_loader/efi_bootmgr.c
> +++ b/lib/efi_loader/efi_bootmgr.c
> @@ -11,10 +11,10 @@
>  #include <blkmap.h>
>  #include <charset.h>
>  #include <dm.h>
> +#include <efi.h>
>  #include <log.h>
>  #include <malloc.h>
>  #include <net.h>
> -#include <efi_default_filename.h>
>  #include <efi_loader.h>
>  #include <efi_variable.h>
>  #include <asm/unaligned.h>
> @@ -82,8 +82,12 @@ struct efi_device_path *expand_media_path(struct efi_device_path *device_path)
>                                  &efi_simple_file_system_protocol_guid, &rem);
>         if (handle) {
>                 if (rem->type == DEVICE_PATH_TYPE_END) {
> -                       full_path = efi_dp_from_file(device_path,
> -                                                    "/EFI/BOOT/" BOOTEFI_NAME);
> +                       char fname[30];
> +
> +                       snprintf(fname, sizeof(fname), "/EFI/BOOT/%s",
> +                                efi_get_basename());
> +                       full_path = efi_dp_from_file(device_path, fname);
> +
>                 } else {
>                         full_path = efi_dp_dup(device_path);
>                 }
> diff --git a/test/boot/bootflow.c b/test/boot/bootflow.c
> index cc894e804a4..539abe63ebe 100644
> --- a/test/boot/bootflow.c
> +++ b/test/boot/bootflow.c
> @@ -12,7 +12,7 @@
>  #include <bootstd.h>
>  #include <cli.h>
>  #include <dm.h>
> -#include <efi_default_filename.h>
> +#include <efi.h>
>  #include <expo.h>
>  #ifdef CONFIG_SANDBOX
>  #include <asm/test.h>
> @@ -184,8 +184,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/"
> -                          BOOTEFI_NAME);
> +       ut_assert_nextline("  5  efi          fs      mmc          1  mmc1.bootdev.part_1       /EFI/BOOT/%s",
> +                          efi_get_basename());
>
>         ut_assert_skip_to_line("Scanning bootdev 'mmc0.bootdev':");
>         ut_assert_skip_to_line(
> --
> 2.43.0
>

Thanks
/Ilias


More information about the U-Boot mailing list