You've come to this page because you've asked a question similar to the following:
What is the boot process employed by EFI (Extensible Firmware Interface) machine firmware?
This is the Frequently Given Answer to such questions.
Bootstrapping on EFI involves a boot manager that is built in to the firmware. EFI systems do not rely upon bootstrap programs stored in boot records (VBRs or MBRs) at all. The firmware knows how to read a partition table and understands the FAT filesystem format. (IBM PC compatible firmware does neither.) A designated partition, that is formatted with the FAT filesystem format and identified with a specific well-known partition type, is known as the EFI System Partition. (The EFI System Partition is a true system volume that is identified by its type code in the partition table, not a Poor Man's equivalent that is guessed at like Microsoft's System Reserved Partition is.) It contains boot loader programs, which are EFI executable programs that are loaded and run by the EFI boot manager.
EFI executable programs are standalone programs, that use only machine firmware services and that do not require an underlying operating system in order to run. They can be either operating system boot loaders or "pre-boot" maintenance/diagnosis programs.
The details of the EFI boot manager are up to the firmware implementor, but all boot managers are configured using well-known EFI variables, which are publicly defined and documented mechanisms for holding firmware configuration data.
Boot managers are required to inspect these EFI variables and behave accordingly.
The main variable is the BootOrder
EFI variable. And there are two primary use cases:
A system with no BootOrder
EFI variable is a system without a bootable operating system yet installed.
The boot manger thus falls back to a procedure which involves looking for boot loader files in standard places, in the expectation that a floppy disc, CD-ROM, DVD or other disc will have a boot loader that will start an operating system installer (or, more simply, a cut-down operating system with an installer program) from that disc.
Specifically: In this case, EFI boot managers are required to enumerate all removable DASDs and fixed DASDs.
For removable DASDs, the disc is treated as containing a single volume.
For fixed DASDs, the disc is searched for an EFI system partition and that volume is used.
In both cases, EFI boot managers look for an EFI executable program to run stored in the designated volume and called \EFI\BOOT\BOOT
type.EFI
(where type is IA32
, IA64
, or some other such string, according to CPU architecture).
This is a default operating system boot loader.
A system with an BootOrder
EFI variable is a system with one or more already installed and bootable operating systems.
And a simpler scenario ensues.
The variable contains a list of EFI boot options.
A boot option is a reference to another EFI variable, with a standardized name format, that contains the device and path name of an EFI executable program to load and run, and a set of parameters to pass to that program.
The boot manager displays a list of these boot options (one part of which is a "display name" for the boot manager menu), the user chooses the option to boot, and the boot manager loads and invokes the chosen boot loader program, passing it various EFI device paths specifying configuration options and the like.
In many ways the EFI boot process is much the same as the ARC boot process: There's a boot manager built in to the firmware, that uses a database comprising a set of firmware variables (alterable by operating system installation and utility programs and with a public and well defined structure), that presents a list of options from which the user chooses, which results in a loader program to run and some options to pass to it.
The differences lie in the details.
EFI device paths are more expressive than ARC paths (which as anyone who has fiddled with BOOT.INI
on Windows NT versions 4 or 5 will know, have an obscure and not very intuitive format) and encode hardware device locations more accurately (modulo some strange ideas that EFI has about SCSI).
The EFI boot manager has the option to boot to a command interpreter, the "EFI Shell".
And there's a well defined firmware interface that has a well-defined extension mechanism for adding things such as extra filesystem drivers to allow boot-time access to disc volumes formatted with filesystem formats other than FAT.
By convention, all of the boot loaders for operating systems are stored in the EFI system partition on a partitionable DASD, in a vendor-specific subdirectory of the \EFI\
directory.
For the 64-bit versions of Windows NT 5.x, the EFI boot loader is \EFI\Microsoft\WINNT50\IA64LDR.EFI
(sometimes \EFI\Microsoft\WINNT50C\IA64LDR.EFI
), which comprises NTLDR, the Windows NT boot loader that loads and executes the Windows NT kernel from files in the Windows boot volume.
64-bit versions of Windows NT 5.x use EFI as it was designed to be used.
For Windows NT 6, the EFI boot loader is \EFI\Microsoft\Boot\Bootmgfw.efi
, which is the Microsoft Boot Manager — another boot manager, which presents a second menu of boot options, read from a database file in a Microsoft-proprietary format, which in turn list boot loader programs to invoke and options to pass to them.
Windows NT 6 needlessly duplicates the functionality of the EFI boot manager, and needlessly makes a user-visible distinction between all other operating systems (listed on the first boot manager menu, which Microsoft configures to be displayed for only 2 seconds in order to, in Microsoft's own words, "make it easier" for users) and Windows NT (listed on the second boot manager menu).
For the 64-bit versions of Linux, the EFI boot loader is either \EFI\RedHat\elilo.efi
or \EFI\SuSE\elilo.efi
, which comprises a modified version of LILO, the Linux boot loader that loads and executes the Linux kernel from files in the system volume.
ELILO, like the Microsoft Boot Manager, contains a second level of boot options, held in a separate elilo.conf
configuration file, rather than integrating support for such multiple boot options into the EFI boot loader and EFI variables, as it should.
Unlike the Microsoft Boot Manager, however, ELILO is a boot loader, incapable of loading any other operating system but Linux (the different boot options merely allowing one to specify which Linux kernel image file to use and various options specific to the Linux kernel such as the ramdisc size), not a boot manager, and so does not needlessly duplicate all of the functionality of the EFI boot manager.
For HP-UX, the EFI boot loader is \EFI\HPUX\hpux.efi
, which loads and executes the HP-UX kernel from an image file in the system volume (e.g. /vmlinux
).
The HP-UX boot loader also comprises an interactive shell, although the EFI Shell that comes with the EFI firmware provides much the same functionality.
Apple ignores or subverts large parts of the EFI specification on its Intel Macintoshes. The EFI System Partition is empty and unused, and the EFI boot manager is obscured by an Apple boot loader that is executed before it.
The Apple EFI firmware understands the HFS+ filesystem format, in addition to the FAT filesystem format mandated by the EFI specification.
Apple's firmware boot loader reads the value of a variable stored in NVRAM.
This can either point to a disc partition or to a specific file, depending from whether one has "blessed" a disc partition or a file/directory using the bless
utility.
(Blessing a directory is a shorthand for copying a platform-specific boot loader file into that directory and then blessing the file.)
If the value in NVRAM points to a disc partition, then the Apple boot loader assumes that this is an HFS+ formatted volume.
HFS+ contains a file ID pointer in its volume header that points to a boot file.
The Apple boot loader reads the HFS+ volume header, and loads and runs the indicated file as an EFI application.
By default, this is /System/Library/CoreServices/boot.efi
, the boot loader for MacOS X.
If the value in NVRAM points to a specific file, that is the EFI executable that the Apple boot loader loads at boot, ignoring what any HFS+ volume headers may contain.
One such file is xom.efi
, an alternative EFI operating system boot loader application that loads Windows NT XP on Intel Macintoshes.
If, in either case, the EFI application is non-graphical, its user interface won't be seen, because the Apple boot loader switches the display to graphical mode.
If the application exits, returning to the firmware, the EFI boot manager is finally invoked.
But since the EFI boot manager has a textual user interface, its user interface will not be visible, either.
(A TextMode.efi
EFI application is freely available that simply switches the display back to text mode and returns to the firmware.)