[U-Boot] [PATCH v2 00/21] efi_loader: enough UEFI for standard distro boot

Rob Clark
2017-09-10T11:38:14Z

Blerg.. pls ignore the resend of "readdir" patchset which hitched a
ride on the git-send-email train.. apparently I should not send
patches in the morning before coffee..

BR,
-R

On Sun, Sep 10, 2017 at 7:21 AM, Rob Clark <robdclark@gmail.com> wrote:
> This patchset fleshes out EFI_LOADER enough to support booting an
> upstream \EFI\BOOT\bootaa64.efi (which then loads fallback.efi and
> then eventually the per-distro shim.efi which loads the per-distro
> grubaa64.efi) without resorting to hacks to hard-code u-boot to load
> a particular distro's grub, or other hacks like setting up the
> distro installation as live-media.
>
> Background: with a normal UEFI implementation, the boot process is:
>
> a) firmware (u-boot) looks at BootOrder and the BootXXXX variables
> to try to determine what to boot.
> b) the firmware will look at the BootXXXX variables (which contain
> an EFI_LOAD_OPTION "struct" in order specified by BootOrder, and
> will boot the first bootable option.
> c) The EFI_LOAD_OPTION specifies a device-path which identifies the
> device and file path of the .efi payload to exectute.
>
> This is implemented with the 'bootefi bootmgr' command.
>
> If there are no bootable options the firmware falls back to loading
> \EFI\BOOT\bootaa64.efi (exact name varies depending on arch), which
> for distro's using fallback/shim (which should include most modern
> linux distros) then loads fallback.efi which uses the
> EFI_SIMPLE_FILE_SYSTEM_PROTCOL and EFI_FILE_PROTOCOL to search for
> any \EFI\*\boot.csv, and will then set BootOrder and BootXXXX EFI
> variables accordingly so that on next boot fallback.efi is not
> necessary.
>
> The last 5 patches are a bit unrelated, just pulling forward some of
> the patches I have from the next patchset, to get Shell.efi and SCT
> working.
>
> Peter Jones (2):
> part: extract MBR signature from partitions
> efi: add some more device path structures
>
> Rob Clark (19):
> part: move efi_guid_t
> efi: add some missing __packed
> efi_loader: add device-path utils
> efi_loader: drop redundant efi_device_path_protocol
> efi_loader: flesh out device-path to text
> efi_loader: use proper device-paths for partitions
> efi_loader: use proper device-paths for net
> efi_loader: refactor boot device and loaded_image handling
> efi_loader: add file/filesys support
> efi_loader: support load_image() from a file-path
> efi_loader: make pool allocations cacheline aligned
> efi_loader: efi variable support
> efi_loader: add bootmgr
> efi_loader: file_path should be variable length
> efi_loader: set loaded image code/data type properly
> efi_loader: print GUIDs
> efi_loader: split out escape sequence based size query
> efi_loader: Correctly figure out size for vidconsole
> efi_loader: Some console improvements for vidconsole
>
> cmd/bootefi.c | 249 ++++++--------
> disk/part_dos.c | 12 +-
> disk/part_efi.c | 20 ++
> include/blk.h | 15 +
> include/config_distro_bootcmd.h | 5 +
> include/efi.h | 25 ++
> include/efi_api.h | 162 ++++++++-
> include/efi_loader.h | 62 +++-
> include/part.h | 3 +-
> include/part_efi.h | 4 -
> include/pe.h | 6 +
> lib/efi_loader/Makefile | 3 +-
> lib/efi_loader/efi_bootmgr.c | 169 ++++++++++
> lib/efi_loader/efi_boottime.c | 162 +++++++--
> lib/efi_loader/efi_console.c | 123 ++++---
> lib/efi_loader/efi_device_path.c | 563 +++++++++++++++++++++++++++++++
> lib/efi_loader/efi_device_path_to_text.c | 242 +++++++++----
> lib/efi_loader/efi_disk.c | 86 +++--
> lib/efi_loader/efi_file.c | 556 ++++++++++++++++++++++++++++++
> lib/efi_loader/efi_image_loader.c | 26 ++
> lib/efi_loader/efi_memory.c | 5 +-
> lib/efi_loader/efi_net.c | 24 +-
> lib/efi_loader/efi_runtime.c | 17 +-
> lib/efi_loader/efi_variable.c | 335 ++++++++++++++++++
> 24 files changed, 2520 insertions(+), 354 deletions(-)
> create mode 100644 lib/efi_loader/efi_bootmgr.c
> create mode 100644 lib/efi_loader/efi_device_path.c
> create mode 100644 lib/efi_loader/efi_file.c
> create mode 100644 lib/efi_loader/efi_variable.c
>
> --
> 2.13.5
>