public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
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!

      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