From: Ard Biesheuvel <ardb@kernel.org>
To: grub-devel@nongnu.org
Cc: linux-efi@vger.kernel.org, Ard Biesheuvel <ardb@kernel.org>,
grub-devel@gnu.org, Daniel Kiper <daniel.kiper@oracle.com>,
Nikita Ermakov <arei@altlinux.org>,
Atish Patra <atishp@atishpatra.org>,
Huacai Chen <chenhuacai@loongson.cn>,
Heinrich Schuchardt <heinrich.schuchardt@canonical.com>,
dann frazier <dann.frazier@canonical.com>,
Julian Andres Klode <julian.klode@canonical.com>
Subject: [PATCH resend 0/9] linux: implement LoadFile2 initrd loading
Date: Thu, 18 Aug 2022 10:55:30 +0200 [thread overview]
Message-ID: <20220818085540.2075028-1-ardb@kernel.org> (raw)
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
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
next reply other threads:[~2022-08-18 8:55 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-18 8:55 Ard Biesheuvel [this message]
2022-08-18 8:55 ` [PATCH resend 1/9] loader: drop argv[] argument in grub_initrd_load() Ard Biesheuvel
2022-08-18 8:55 ` [PATCH resend 2/9] efi: move MS-DOS stub out of generic PE header definition Ard Biesheuvel
2022-08-18 8:55 ` [PATCH resend 3/9] arm64/linux: Remove magic number header field check Ard Biesheuvel
2022-08-18 8:55 ` [PATCH resend 4/9] linux/arm: unify ARM/arm64 vs Xen PE/COFF header handling Ard Biesheuvel
2022-08-18 8:55 ` [PATCH resend 5/9] linux/arm: account for COFF headers appearing at unexpected offsets Ard Biesheuvel
2022-08-18 8:55 ` [PATCH resend 6/9] efi: add definition of LoadFile2 protocol Ard Biesheuvel
2022-08-18 8:55 ` [PATCH resend 7/9] efi/efinet: Don't close connections at fini_hw() time Ard Biesheuvel
2022-08-18 8:55 ` [PATCH resend 8/9] efi: implement LoadFile2 initrd loading protocol for Linux Ard Biesheuvel
2022-09-08 7:29 ` Ilias Apalodimas
2022-08-18 8:55 ` [PATCH resend 9/9] linux: ignore FDT unless we need to modify it Ard Biesheuvel
2022-08-18 8:58 ` [PATCH resend 0/9] linux: implement LoadFile2 initrd loading Ard Biesheuvel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220818085540.2075028-1-ardb@kernel.org \
--to=ardb@kernel.org \
--cc=arei@altlinux.org \
--cc=atishp@atishpatra.org \
--cc=chenhuacai@loongson.cn \
--cc=daniel.kiper@oracle.com \
--cc=dann.frazier@canonical.com \
--cc=grub-devel@gnu.org \
--cc=grub-devel@nongnu.org \
--cc=heinrich.schuchardt@canonical.com \
--cc=julian.klode@canonical.com \
--cc=linux-efi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox