From: "Ard Biesheuvel" <ard.biesheuvel@linaro.org>
To: edk2-devel-groups-io <devel@edk2.groups.io>
Cc: Laszlo Ersek <lersek@redhat.com>,
Leif Lindholm <leif@nuviainc.com>,
Liming Gao <liming.gao@intel.com>
Subject: Re: [PATCH v4 0/7] OvmfPkg: implement initrd shell command and mixed mode loader
Date: Wed, 4 Mar 2020 10:29:51 +0100 [thread overview]
Message-ID: <CAKv+Gu8WWX-K0zqUkVmSGCMbK62HjFSdEF=Rz9Ny=kFNDh02ZQ@mail.gmail.com> (raw)
In-Reply-To: <20200303140117.7288-1-ard.biesheuvel@linaro.org>
On Tue, 3 Mar 2020 at 15:01, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
>
> This series is part of my effort to define a generic EFI boot protocol for
> Linux, i.e,. one that is the same across all different architectures that
> are able to boot Linux from EFI, and naturally reused the firmware's
> infrastructure for authenticated boot and measured boot.
>
> Path #1 ... #4 implement the 'initrd' dynamic shell command, which takes a
> file and exposes it via the LoadFile2 protocol installed on a vendor media
> device path with guid LINUX_EFI_INITRD_MEDIA_GUID. This is a Linux specific,
> but arch-agnostic way for the OS loader to load an initial ramdisk, while
> leaving the firmware (or bootloader) in charge of where the file contents
> are served from. This supersedes the currently existing solutions on Linux,
> which are either limited to loading from the same volume that the OS loader
> was loaded from, or load the initrd into memory first, and use architecture
> specific data structures to pass on the information regarding base and size.
>
> Patch #5 is an update to the integration of the PE/COFF emulator protocol,
> to align it more closely with how LoadImage() and StartImage() behave today:
> LoadImage() is not restricted to images that can execute natively on the
> platform, but also permits loading of cross-type supported images. This means
> that any judgement on whether an image can be *started* needs to be deferred
> until StartImage(), which is why the invocation of the RegisterImage()
> callback needs to be deferred as well.
>
> Patch #6 implements the PE/COFF emulator protocol so it can start X64 images
> that have been loaded on IA32 firmware. This is needed for Linux's so-called
> 'mixed mode', which is an elaborate scheme of on-the-fly translation of data
> structures and thunking into 32-bit compat mode, allowing X64 Linux kernels
> to be used on X64 capable hardware that shipped with IA32 firmware. This
> needs support from the loader, and is currently implemented in GRUB (and
> OVMF's command line kernel loader) using the EFI handover protocol, which
> relies far too much on knowledge of kernel internal data structures, and
> circumvents LoadImage and StartImage entirely.
> (Note: mixed mode support is mainly targeted at cheap Atom tablets that
> shipped with a [cheaper] 32-bit version of Windows, and so this particular
> patch is unlikely to help that use case, but it is useful for validation.)
>
> Patch #7 is new in v4, and modified the initrd Shell command so it aborts
> immediately if the Linux initrd media GUID device path already has the
> LoadFile2 protocol installed in the protocol database.
>
> With these changes in place, we can boot x86 mixed-mode Linux straight from
> the UEFI Shell
>
> Shell>initrd fs0:\initrd.img
> Shell>fs0:\bzImage root=/dev/vda2
>
> Another benefit of this approach is that we can exit cleanly from the loader
> (and back to the shell) using the Exit() boot service if any errors occur,
> whereas the EFI handover protocol enters a deadloop upon any error that
> occurs during execution of the EFI stub.
>
> Changes since v3:
> - pick up some acks
> - update patch #6 to sanity check the contents of the .compat section so
> we don't overrun the end of the section looking for a compatible entrypoint
> - add patch #7
>
> Changes since v2:
> - incorporate Laszlo's feedback, and add R-b's - I have incorporated all the
> feedback given, except for the structure of the shell command implementation:
> it is not my preferred style, but it is correct, and idiomatic for the shell
> commands I could find in the tree.
>
> Changes from v1:
> - Use a dynamic UEFI shell command, which is the recommended way of implementing
> new shell commands that are not covered by the UEFI shell specification. It
> also makes the command more easily usable on existing platforms, since the
> driver can be loaded as an ordinary driver.
> - split initrd patch into 4, as requested by Laszlo
> - add patch to tweak the LoadImage/StartImage behavior wrt the PE/COFF emulator
> protocol
> - return EFI_UNSUPPORTED from PeCoffEmu::RegisterImage() if the image does not
> have the required .compat section
>
> [0] https://edk2.groups.io/g/devel/topic/rfc_patch_1_1_ovmfpkg_add/71177416
> [1] https://edk2.groups.io/g/devel/topic/patch_1_1_ovmfpkg_ia32_add/71272266
>
> v2: https://edk2.groups.io/g/devel/topic/patch_v2_0_6_ovmfpkg/71530294
> v3: https://edk2.groups.io/g/devel/message/54932
>
> Cc: lersek@redhat.com
> Cc: leif@nuviainc.com
> Cc: Liming Gao <liming.gao@intel.com>
>
> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=2564
>
> Ard Biesheuvel (7):
> OvmfPkg: add definition of LINUX_EFI_INITRD_MEDIA_GUID
> OvmfPkg: add 'initrd' shell command to expose Linux initrd via device
> path
> ArmVirtPkg: add the 'initrd' dynamic shell command
> OvmfPkg: add the 'initrd' dynamic shell command
> MdeModulePkg/DxeCore: defer PE/COFF emulator registration to
> StartImage
> OvmfPkg IA32: add support for loading X64 images
> OvmfPkg/LinuxInitrdDynamicShellCommand: bail if initrd already exists
>
Merged as 0980779a9ddc..ecb30848fdc9
(after incorporating Laszlo's final review comments)
Thanks all!
prev parent reply other threads:[~2020-03-04 9:30 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-03 14:01 [PATCH v4 0/7] OvmfPkg: implement initrd shell command and mixed mode loader Ard Biesheuvel
2020-03-03 14:01 ` [PATCH v4 1/7] OvmfPkg: add definition of LINUX_EFI_INITRD_MEDIA_GUID Ard Biesheuvel
2020-03-03 14:01 ` [PATCH v4 2/7] OvmfPkg: add 'initrd' shell command to expose Linux initrd via device path Ard Biesheuvel
2020-03-03 14:01 ` [PATCH v4 3/7] ArmVirtPkg: add the 'initrd' dynamic shell command Ard Biesheuvel
2020-03-03 14:01 ` [PATCH v4 4/7] OvmfPkg: " Ard Biesheuvel
2020-03-03 14:01 ` [PATCH v4 5/7] MdeModulePkg/DxeCore: defer PE/COFF emulator registration to StartImage Ard Biesheuvel
2020-03-03 14:01 ` [PATCH v4 6/7] OvmfPkg IA32: add support for loading X64 images Ard Biesheuvel
2020-03-03 20:54 ` [edk2-devel] " Laszlo Ersek
2020-03-03 21:53 ` Ard Biesheuvel
2020-03-03 14:01 ` [PATCH v4 7/7] OvmfPkg/LinuxInitrdDynamicShellCommand: bail if initrd already exists Ard Biesheuvel
2020-03-03 21:03 ` [edk2-devel] " Laszlo Ersek
2020-03-03 21:08 ` Laszlo Ersek
2020-03-03 21:53 ` Ard Biesheuvel
2020-03-04 9:29 ` Ard Biesheuvel [this message]
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-list 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='CAKv+Gu8WWX-K0zqUkVmSGCMbK62HjFSdEF=Rz9Ny=kFNDh02ZQ@mail.gmail.com' \
--to=devel@edk2.groups.io \
/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