On Thu, 18 Aug 2022 at 10:55, Ard Biesheuvel <ardb@xxxxxxxxxx> 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@xxxxxxx When cc'ing to this series, please note that i included an incorrect grub-devel@ address too - please remove. > Cc: Daniel Kiper <daniel.kiper@xxxxxxxxxx> > Cc: Nikita Ermakov <arei@xxxxxxxxxxxx> > Cc: Atish Patra <atishp@xxxxxxxxxxxxxx> > Cc: Huacai Chen <chenhuacai@xxxxxxxxxxx> > Cc: Heinrich Schuchardt <heinrich.schuchardt@xxxxxxxxxxxxx> > Cc: dann frazier <dann.frazier@xxxxxxxxxxxxx> > Cc: Julian Andres Klode <julian.klode@xxxxxxxxxxxxx> > > 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 >