
Hi Simon
On Sun, 6 Mar 2022 at 05:08, Simon Glass sjg@chromium.org wrote:
Hi Heinrich,
On Wed, 19 Jan 2022 at 04:47, Heinrich Schuchardt xypron.glpk@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@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@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?
Any recent distro would work. If you try to run an installer keep in mind setting up grub will fail (since runtime variable support isn't yet supported). You can find more info on installing fedora here[1] just skip the security and encryption parts
[1] https://www.linaro.org/blog/securing-a-device-with-trusted-substrate/
Cheers /Ilias
Regards, Simon