[linux-l] i386 EFI loader -- need help (fwd)

Peter Ross Peter.Ross at alumni.tu-berlin.de
So Jan 22 14:27:02 CET 2006

Hi all,

ist fuer FreeBSD, aber es macht glaube ich deutlich, dass Booten von 
Intel-Macs kein unloesbares Problem fuer Open Software ist.

Da es (s.unten) von Intel EFI-Emulation gibt, darf jeder auf dieser Liste 
sofort anfangen, auch wenn er keine Obstkiste hat;-)

Viel Spass

---------- Forwarded message ----------
Date: Sat, 21 Jan 2006 16:57:05 -0800 (PST)
From: Doug White <dwhite at gumbysoft.com>
To: "current at freebsd.org" <current at freebsd.org>
Subject: i386 EFI loader -- need help

Hey folks,

I've done some work to try to get the EFI loader to work on i386 and have
run into some snags and gaps in my knowledge and could use a hand from
people who have more experience with the boot process and toolchains and
assembly code.

There are 3 prinicipal parts that I need help with:

1. libefi elf32 exec() -- The code that actually goes between exiting EFI
and jumping into the kernel image itself needs to be written.
src/sys/boot/efi/libefi/elf_freebsd.c has the EFI part already taken care
of. But from just after the call to ExitBootServices() down needs to do
the necessary dance on i386 to start the kernel. I don't know what the
expected environment is supposed to be and whether it needs to change from
how EFI leaves things. EFI uses a flat space and disables paging when it
exits. More details are in the EFI spec which is freely downloadable from

2. ELF32 self-relocator -- The self-relocation code in
src/sys/boot/ia64/efi/start.S is in ia64 assembly and needs to be
converted into i386 so the PE32+-wrapped-ELF-objects loader.efi binary can
function. I'm not well versed enough in ia64 assembly or ELF in general to
undertake this without going really, really slowly. :)

3. efi-app-ia32 toolchain target -- The spec defines PE32+ as the official
binary format (32-bit PE with 64-bit relocations). Both us (via NetBSD?)
and GNU cheat by having objcopy build a PE32+ binary but with a small shim
that performs the ELF relocations. Our libbfd on i386 isn't configured
with the efi-app-ia32 target. We include the efi-app-ia64 target on ia64
so this should just require adding some bits to the Makefile and building.
_Should_. (This doesn't actually look so horrible so I'll give it a try.)

After loader.efi is functional there is still the big job of
conditionalizing BIOS calls in the kernel and providing EFI replacements
where needed. A module to perform EFI calls from the kernel is also needed
to allow access to the nvram variables and use the EFI ResetSystem() call
if needed.

If you need a test environment you can download the Sample Implementation
from Intel which will give you a boot floppy you can pop in any PC and
start up into EFI. I also have real hardware to test on that is big,
white, and has a certain fruit for its logo. :)

Doug White                    |  FreeBSD: The Power to Serve
dwhite at gumbysoft.com          |  www.FreeBSD.org
freebsd-current at freebsd.org mailing list
To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"

Mehr Informationen über die Mailingliste linux-l