grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH resend 0/9] linux: implement LoadFile2 initrd loading


From: Ard Biesheuvel
Subject: Re: [PATCH resend 0/9] linux: implement LoadFile2 initrd loading
Date: Thu, 18 Aug 2022 10:58:36 +0200

On Thu, 18 Aug 2022 at 10:55, Ard Biesheuvel <ardb@kernel.org> wrote:
>
> This implements the LoadFile2 initrd loading protocol, which is
> essentially a callback interface into the bootloader to load the initrd
> data into a caller provided buffer. This means the bootloader no longer
> has to contain any policy regarding where to load the initrd (which
> differs between architectures and kernel versions) and no longer has to
> manipulate arch specific data structures such as DT or struct bootparams
> to inform the OS where the initrd resides in memory. This is especially
> relevant for the upcoming LoongArch support, which does not use either
> DT or struct bootparams, and would have to rely on the initrd= command
> line interface, which is deprecated and of limited utility [0].
>
> Sample output from booting a recent Linux/arm64 kernel:
>
>   grub> insmod part_msdos
>   grub> linux (hd0,msdos1)/Image
>   grub> initrd (hd0,msdos1)/initrd.img
>   grub> boot
>   EFI stub: Booting Linux Kernel...
>   EFI stub: EFI_RNG_PROTOCOL unavailable, KASLR will be disabled
>   EFI stub: Generating empty DTB
>   EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path
>   EFI stub: Exiting boot services and installing virtual address map...
>   [    0.000000] Booting Linux on physical CPU 0x0000000000 [0x411fd070]
>
> This is mostly a resend of my original v2 [1], although I did
> cherry-pick Nikita's version of the first patch, which incorporates
> Heinrich's suggestion to simply drop the argv[] argument from
> grub_initrd_load(). I also included the patch I sent out the other day
> to remove the pointless header magic number check, and included a fix
> for the PXE boot issue reported by dann [2].
>
> [0] The initrd= command line loader can only access files that reside on
> the same volume as the loaded image, which means GRUB would have to
> present this volume abstraction in order to serve the initrd file.
> Another reason why this method is problematic is generic EFI zboot,
> which is being added to Linux, and which calls loadimage on another,
> embedded PE/COFF image which would also need to expose this volume
> abstraction.
>
> [1] https://lists.gnu.org/archive/html/grub-devel/2020-10/msg00124.html
> [2] https://lists.gnu.org/archive/html/grub-devel/2022-04/msg00055.html
>
> Cc: grub-devel@gnu.org

When cc'ing to this series, please note that i included an incorrect
grub-devel@ address too - please remove.

> Cc: Daniel Kiper <daniel.kiper@oracle.com>
> Cc: Nikita Ermakov <arei@altlinux.org>
> Cc: Atish Patra <atishp@atishpatra.org>
> Cc: Huacai Chen <chenhuacai@loongson.cn>
> Cc: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
> Cc: dann frazier <dann.frazier@canonical.com>
> Cc: Julian Andres Klode <julian.klode@canonical.com>
>
> Ard Biesheuvel (8):
>   efi: move MS-DOS stub out of generic PE header definition
>   arm64/linux: Remove magic number header field check
>   linux/arm: unify ARM/arm64 vs Xen PE/COFF header handling
>   linux/arm: account for COFF headers appearing at unexpected offsets
>   efi: add definition of LoadFile2 protocol
>   efi/efinet: Don't close connections at fini_hw() time
>   efi: implement LoadFile2 initrd loading protocol for Linux
>   linux: ignore FDT unless we need to modify it
>
> Nikita Ermakov (1):
>   loader: drop argv[] argument in grub_initrd_load()
>
>  grub-core/commands/efi/lsefi.c            |   1 +
>  grub-core/kern/efi/efi.c                  |   5 +-
>  grub-core/loader/arm/linux.c              |   2 +-
>  grub-core/loader/arm64/linux.c            | 181 +++++++++++++++++---
>  grub-core/loader/arm64/xen_boot.c         |  23 +--
>  grub-core/loader/efi/fdt.c                |   7 +-
>  grub-core/loader/i386/linux.c             |   2 +-
>  grub-core/loader/i386/pc/linux.c          |   2 +-
>  grub-core/loader/i386/xen.c               |   3 +-
>  grub-core/loader/ia64/efi/linux.c         |   2 +-
>  grub-core/loader/linux.c                  |   4 +-
>  grub-core/loader/mips/linux.c             |   2 +-
>  grub-core/loader/powerpc/ieee1275/linux.c |   2 +-
>  grub-core/loader/sparc64/ieee1275/linux.c |   2 +-
>  grub-core/net/drivers/efi/efinet.c        |  10 +-
>  grub-core/net/net.c                       |   2 +-
>  include/grub/arm/linux.h                  |   7 +-
>  include/grub/arm64/linux.h                |   5 +-
>  include/grub/efi/api.h                    |  15 ++
>  include/grub/efi/efi.h                    |   4 +-
>  include/grub/efi/pe32.h                   |   5 +-
>  include/grub/linux.h                      |   2 +-
>  include/grub/net.h                        |   3 +-
>  23 files changed, 226 insertions(+), 65 deletions(-)
>
> --
> 2.35.1
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]