From: Simon Glass <simon.glass@canonical.com> The bootstd developer docs are missing a page for the EFI bootmeth. Add one describing the discovery and boot phases for both block and network devices, and link it from the toctree and overview. Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Simon Glass <simon.glass@canonical.com> --- doc/develop/bootstd/efi.rst | 25 +++++++++++++++++++++++++ doc/develop/bootstd/index.rst | 1 + doc/develop/bootstd/overview.rst | 2 +- doc/develop/uefi/uefi.rst | 3 +++ 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 doc/develop/bootstd/efi.rst diff --git a/doc/develop/bootstd/efi.rst b/doc/develop/bootstd/efi.rst new file mode 100644 index 00000000000..abd1ab158aa --- /dev/null +++ b/doc/develop/bootstd/efi.rst @@ -0,0 +1,25 @@ +.. SPDX-License-Identifier: GPL-2.0+: + +EFI Bootmeth +============= + +The EFI bootmeth allows U-Boot to boot an operating system by loading and +running an EFI application from a disk or network device. This follows the +approach used by many Linux distributions to provide a standard boot path. + +When invoked on a block device, ``distro_efi_try_bootflow_files()`` searches for +the architecture-specific EFI binary in ``/EFI/BOOT/`` (e.g. +``bootaa64.efi``). If found, the bootflow is marked as ready. The function also +tries to locate a matching device tree using ``efi_get_distro_fdt_name()``. + +When invoked on a network device, ``distro_efi_read_bootflow_net()`` performs a +DHCP request with PXE vendor-class and architecture identifiers, then retrieves +the EFI binary via TFTP. A device tree is also fetched if available. + +At boot time, ``distro_efi_boot()`` loads the EFI binary into memory (for block +devices) and calls ``efi_bootflow_run()`` to execute it via the EFI loader. + +The compatible string "u-boot,distro-efi" is used for the driver. It is present +if `CONFIG_BOOTMETH_EFI` is enabled. + +See :doc:`/develop/uefi/uefi` for general UEFI implementation details. diff --git a/doc/develop/bootstd/index.rst b/doc/develop/bootstd/index.rst index cee792ffc98..bbdcb154724 100644 --- a/doc/develop/bootstd/index.rst +++ b/doc/develop/bootstd/index.rst @@ -10,6 +10,7 @@ Standard Boot extlinux pxelinux bls + efi pxe_api qfw android diff --git a/doc/develop/bootstd/overview.rst b/doc/develop/bootstd/overview.rst index 34ee42c79e0..60ba247e005 100644 --- a/doc/develop/bootstd/overview.rst +++ b/doc/develop/bootstd/overview.rst @@ -440,7 +440,7 @@ Bootmeth drivers are provided for booting from various media: - :doc:`Android <android>` bootflow (boot image v4) - :doc:`BLS <bls>` Boot Loader Specification Type #1 entries - :doc:`ChromiumOS <cros>` ChromiumOS boot from a disk - - EFI boot using bootefi from disk + - :doc:`EFI <efi>` boot using bootefi from disk or network - EFI boot using boot manager - :doc:`extlinux / syslinux <extlinux>` boot from a storage device - :doc:`extlinux / syslinux <extlinux>` boot from a network (PXE) diff --git a/doc/develop/uefi/uefi.rst b/doc/develop/uefi/uefi.rst index ef53c4c35dd..a5131fa2d49 100644 --- a/doc/develop/uefi/uefi.rst +++ b/doc/develop/uefi/uefi.rst @@ -64,6 +64,9 @@ Therefore the bootefi command uses the device path of the block device partition or the network adapter and the file name of the most recently loaded PE-COFF file when setting up the loaded image protocol. +See :doc:`/develop/bootstd/efi` for how standard boot discovers and launches +EFI binaries automatically. + Launching a UEFI binary from a FIT image ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- 2.43.0