[PATCH v3 24/31] bootstd: Add an implementation of EFI bootmgr
Simon Glass
sjg at chromium.org
Sun Mar 6 04:08:24 CET 2022
Hi Heinrich,
On Wed, 19 Jan 2022 at 04:47, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>
> On 1/19/22 02:43, Simon Glass wrote:
> > Add a bootmeth driver which handles EFI boot manager, using EFI_LOADER.
> >
> > In effect, this provides the same functionality as the 'bootefi bootmgr'
> > command and shares the same code. But the interface into it is via a
> > bootmeth, so it does not require any special scripts, etc.
> >
> > For now this requires the 'bootefi' command be enabled. Future work may
> > tidy this up so that it can be used without CONFIG_CMDLINE being enabled.
> >
> > Signed-off-by: Simon Glass <sjg at chromium.org>
> > ---
> >
> > Changes in v3:
> > - Add a log category
> >
> > boot/Makefile | 3 ++
> > boot/bootmeth_efi_mgr.c | 86 +++++++++++++++++++++++++++++++++++++++++
> > 2 files changed, 89 insertions(+)
> > create mode 100644 boot/bootmeth_efi_mgr.c
> >
> > diff --git a/boot/Makefile b/boot/Makefile
> > index 795665f7ce5..38b10d81f0d 100644
> > --- a/boot/Makefile
> > +++ b/boot/Makefile
> > @@ -31,6 +31,9 @@ obj-$(CONFIG_$(SPL_TPL_)BOOTSTD) += bootstd-uclass.o
> > obj-$(CONFIG_$(SPL_TPL_)BOOTMETH_DISTRO) += bootmeth_distro.o
> > obj-$(CONFIG_$(SPL_TPL_)BOOTMETH_DISTRO_PXE) += bootmeth_pxe.o
> > obj-$(CONFIG_$(SPL_TPL_)BOOTMETH_EFILOADER) += bootmeth_efi.o
> > +ifdef CONFIG_$(SPL_TPL_)BOOTSTD_FULL
> > +obj-$(CONFIG_$(SPL_TPL_)CMD_BOOTEFI_BOOTMGR) += bootmeth_efi_mgr.o
> > +endif
> >
> > obj-$(CONFIG_$(SPL_TPL_)OF_LIBFDT) += image-fdt.o
> > obj-$(CONFIG_$(SPL_TPL_)FIT_SIGNATURE) += fdt_region.o
> > diff --git a/boot/bootmeth_efi_mgr.c b/boot/bootmeth_efi_mgr.c
> > new file mode 100644
> > index 00000000000..a6914466db7
> > --- /dev/null
> > +++ b/boot/bootmeth_efi_mgr.c
> > @@ -0,0 +1,86 @@
> > +// SPDX-License-Identifier: GPL-2.0+
> > +/*
> > + * Bootmethod for EFI boot manager
> > + *
> > + * Copyright 2021 Google LLC
> > + * Written by Simon Glass <sjg at chromium.org>
> > + */
> > +
> > +#define LOG_CATEGORY UCLASS_BOOTSTD
> > +
> > +#include <common.h>
> > +#include <bootdev.h>
> > +#include <bootflow.h>
> > +#include <bootmeth.h>
> > +#include <command.h>
> > +#include <dm.h>
> > +
> > +static int efi_mgr_check(struct udevice *dev, struct bootflow_iter *iter)
> > +{
> > + int ret;
> > +
> > + /* Must be an bootstd device */
> > + ret = bootflow_iter_uses_system(iter);
> > + if (ret)
> > + return log_msg_ret("net", ret);
> > +
> > + return 0;
> > +}
> > +
> > +static int efi_mgr_read_bootflow(struct udevice *dev, struct bootflow *bflow)
> > +{
> > + /*
> > + * Just assume there is something to boot since we don't have any way
> > + * of knowing in advance
> > + */
> > + bflow->state = BOOTFLOWST_READY;
> > +
> > + return 0;
> > +}
> > +
> > +static int efi_mgr_read_file(struct udevice *dev, struct bootflow *bflow,
> > + const char *file_path, ulong addr, ulong *sizep)
> > +{
> > + /* Files are loaded by the 'bootefi bootmgr' command */
> > +
> > + return -ENOSYS;
> > +}
> > +
> > +static int efi_mgr_boot(struct udevice *dev, struct bootflow *bflow)
> > +{
> > + int ret;
> > +
> > + /* Booting is handled by the 'bootefi bootmgr' command */
> > + ret = run_command("bootefi bootmgr", 0);
>
> You are missing to provide the device tree.
OK well I can deal with that when I get to it, I suppose. Which distro
can I try with?
Regards,
Simon
More information about the U-Boot
mailing list