From: "Henrik Rydberg" <rydberg@euromail.se>
To: Matt Fleming <matt@console-pimps.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org,
Andi Kleen <andi@firstfloor.org>,
Maarten Lankhorst <m.b.lankhorst@gmail.com>,
Matt Fleming <matt.fleming@intel.com>,
"H. Peter Anvin" <hpa@linux.intel.com>,
Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
MikeWaychiso@bitmath.org
Subject: Re: [PATCH v3 10/10] x86, efi: EFI boot stub support
Date: Thu, 29 Sep 2011 12:14:18 +0200 [thread overview]
Message-ID: <20110929101418.GA2215@polaris.bitmath.org> (raw)
In-Reply-To: <1316607036-9235-1-git-send-email-matt@console-pimps.org>
On Wed, Sep 21, 2011 at 01:10:36PM +0100, Matt Fleming wrote:
> From: Matt Fleming <matt.fleming@intel.com>
>
> There is currently a large divide between kernel development and the
> development of EFI boot loaders. The idea behind this patch is to give
> the kernel developers full control over the EFI boot process. As
> H. Peter Anvin put it,
>
> "The 'kernel carries its own stub' approach been very successful in
> dealing with BIOS, and would make a lot of sense to me for EFI as
> well."
>
> This patch introduces an EFI boot stub that allows an x86 bzImage to
> be loaded and executed by EFI firmware. The bzImage appears to the
> firmware as an EFI application. Luckily there are enough free bits
> within the bzImage header so that it can masquerade as an EFI
> application, thereby coercing the EFI firmware into loading it and
> jumping to its entry point. The beauty of this masquerading approach
> is that both BIOS and EFI boot loaders can still load and run the same
> bzImage, thereby allowing a single kernel image to work in any boot
> environment.
>
> The EFI boot stub supports multiple initrds, but they must exist on
> the same partition as the bzImage. Command-line arguments for the
> kernel can be appended after the bzImage name when run from the EFI
> shell, e.g.
>
> Shell> bzImage console=ttyS0 root=/dev/sdb initrd=initrd.img
>
> Cc: H. Peter Anvin <hpa@linux.intel.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Ingo Molnar <mingo@elte.hu>
> Cc: Mike Waychison <mikew@google.com>
> Cc: Matthew Garrett <mjg@redhat.com>
> Signed-off-by: Matt Fleming <matt.fleming@intel.com>
> ---
>
> v3:
> - Fix following warnings when compiling CONFIG_EFI_STUB=n
>
> arch/x86/boot/tools/build.c: In function ‘main’:
> arch/x86/boot/tools/build.c:138:24: warning: unused variable ‘pe_header’
> arch/x86/boot/tools/build.c:138:15: warning: unused variable ‘file_sz’
>
> - As reported by Matthew Garrett, some Apple machines have GOPs that
> don't have hardware attached. We need to weed these out by
> searching for ones that handle the PCIIO protocol.
>
> - Don't allocate memory if no initrds are on cmdline
> - Don't trust image->load_options_size
>
> - Maarten Lankhorst suggested:
> - Don't strip first argument when booted from efibootmgr
> - Don't allocate too much memory for cmdline
> - Don't update cmdline_size, the kernel considers it read-only
> - Don't accept '\n' for initrd names
>
> v2:
>
> - File alignment was too large, was 8192 should be 512. Reported by
> Maarten Lankhorst on LKML.
> - Added UGA support for graphics
> - Use VIDEO_TYPE_EFI instead of hard-coded number.
> - Move linelength assignment until after we've assigned depth
> - Dynamically fill out AddressOfEntryPoint in tools/build.c
> - Don't use magic number for GDT/TSS stuff. Requested by Andi Kleen
> - The bzImage may need to be relocated as it may have been loaded at
> a high address address by the firmware. This was required to get my
> macbook booting because the firmware loaded it at 0x7cxxxxxx, which
> triggers this error in decompress_kernel(),
>
> if (heap > ((-__PAGE_OFFSET-(128<<20)-1) & 0x7fffffff))
> error("Destination address too large");
>
> arch/x86/Kconfig | 7 +
> arch/x86/boot/compressed/Makefile | 10 +-
> arch/x86/boot/compressed/eboot.c | 974 ++++++++++++++++++++++++++++++++
> arch/x86/boot/compressed/efi_stub_32.S | 87 +++
> arch/x86/boot/compressed/efi_stub_64.S | 1 +
> arch/x86/boot/compressed/head_32.S | 22 +
> arch/x86/boot/compressed/head_64.S | 20 +
> arch/x86/boot/compressed/string.c | 9 +
> arch/x86/boot/header.S | 158 ++++++
> arch/x86/boot/string.c | 35 ++
> arch/x86/boot/tools/build.c | 39 ++
> arch/x86/kernel/asm-offsets.c | 2 +
> 12 files changed, 1363 insertions(+), 1 deletions(-)
> create mode 100644 arch/x86/boot/compressed/eboot.c
> create mode 100644 arch/x86/boot/compressed/efi_stub_32.S
> create mode 100644 arch/x86/boot/compressed/efi_stub_64.S
Using this version 3 of the patch, and a builtin commandline, I am
able to boot a MacBookAir3,1 directly into a blessed bzImage. The
screen comes up correctly.
Tested-by: Henrik Rydberg <rydberg@euromail.se>
As a side note, resume from suspend seems to leave the screen blank.
Thanks,
Henrik
next prev parent reply other threads:[~2011-09-29 10:09 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-12 14:34 [PATCH v2 00/10] x86 EFI boot stub Matt Fleming
2011-09-12 14:34 ` [PATCH 01/10] x86: Add missing bzImage fields to struct setup_header Matt Fleming
2011-09-12 14:34 ` [PATCH 02/10] x86, efi: Make efi_call_phys_prelog() CONFIG_RELOCATABLE-aware Matt Fleming
2011-09-12 14:34 ` [PATCH 03/10] x86: Don't use magic strings for EFI loader signature Matt Fleming
2011-09-12 14:34 ` [PATCH 04/10] efi.h: Add struct definition for boot time services Matt Fleming
2011-09-12 14:34 ` [PATCH v2 05/10] efi.h: Add efi_image_loaded_t Matt Fleming
2011-09-12 14:34 ` [PATCH 06/10] efi.h: Add allocation types for boottime->allocate_pages() Matt Fleming
2011-09-12 14:34 ` [PATCH v2 07/10] efi.h: Add graphics protocol guids Matt Fleming
2011-09-12 14:34 ` [PATCH 08/10] efi.h: Add boottime->locate_handle search types Matt Fleming
2011-09-12 14:34 ` [PATCH v2 09/10] efi: Add EFI file I/O data types Matt Fleming
2011-09-12 14:34 ` [PATCH v2 10/10] x86, efi: EFI boot stub support Matt Fleming
2011-09-13 13:29 ` Matthew Garrett
2011-09-13 14:01 ` Matt Fleming
2011-09-13 14:33 ` Maarten Lankhorst
2011-09-14 16:07 ` Matt Fleming
[not found] ` <20110915045231.GA32136@emperor.us.dell.com>
2011-09-15 8:04 ` Maarten Lankhorst
2011-09-15 9:08 ` Maarten Lankhorst
[not found] ` <20110915115255.GA4669@emperor.us.dell.com>
2011-09-15 12:44 ` Maarten Lankhorst
2011-09-17 11:44 ` Matt Fleming
2011-09-17 12:12 ` Maarten Lankhorst
2011-09-21 11:57 ` Matt Fleming
2011-09-21 12:10 ` [PATCH v3 " Matt Fleming
2011-09-22 11:43 ` Maarten Lankhorst
2011-09-22 11:55 ` Matt Fleming
2011-09-29 10:14 ` Henrik Rydberg [this message]
2011-09-30 7:41 ` Matt Fleming
2011-09-30 11:13 ` Henrik Rydberg
2011-10-03 16:53 ` Matthew Garrett
2011-10-03 18:32 ` Henrik Rydberg
2011-09-30 8:51 ` [PATCH v4 " Matt Fleming
2011-09-30 16:24 ` Shea Levy
2011-09-30 20:11 ` Matt Fleming
2011-10-01 7:50 ` Maarten Lankhorst
2011-10-01 9:19 ` Matt Fleming
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=20110929101418.GA2215@polaris.bitmath.org \
--to=rydberg@euromail.se \
--cc=MikeWaychiso@bitmath.org \
--cc=andi@firstfloor.org \
--cc=hpa@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=m.b.lankhorst@gmail.com \
--cc=matt.fleming@intel.com \
--cc=matt@console-pimps.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=x86@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.