Extensible Firmware Interface
From Wikipedia, the free encyclopedia
The Extensible Firmware Interface (EFI) is a software interface between an operating system and platform firmware. EFI is intended as a significantly improved replacement of the old BIOS firmware interface historically used by all IBM PC compatible personal computers[1]. The EFI specification was originally developed by Intel, and is now developed by the Unified EFI Forum and is officially known as Unified EFI (UEFI).
Contents |
[edit] History
The original motivation for EFI came during early development of the first Intel-HP Itanium systems in the mid-1990s. PC BIOS limitations (16-bit processor mode, 1 MB addressable space, PC AT hardware dependencies, etc.) were seen as clearly unacceptable for the larger servers Itanium was intended to run on. The initial effort to address these concerns was called Intel Boot Initiative and was later renamed to EFI[2].
EFI specification 1.02 was released by Intel on December 12, 2000. (Version 1.01 was the original issue; it had incorrect legal and trademark information and was quickly withdrawn[3].)
EFI specification 1.10 was released by Intel on December 1, 2002. It included the EFI driver model as well as several minor enhancements to 1.02.
In 2005, Intel contributed this specification to the UEFI Forum, who is now responsible for its development[4]. EFI was renamed to Unified EFI (UEFI) to reflect this; most documentation uses both terms interchangeably.
The UEFI Forum released version 2.1 of the UEFI specification on January 7, 2007; as of March 2007, it is the latest publicly available specification. It added and improved cryptography, network authentication, IPv6 support[5], and the User Interface Architecture (Human Interface Infrastructure in UEFI).
Some existing enhancements to PC BIOS, such as the Advanced Configuration and Power Interface (ACPI) and System Management BIOS (SMBIOS), are also present in EFI, as they do not rely on a 16-bit runtime interface.
[edit] Contents
The interface defined by the EFI specification includes data tables which contain platform information, and boot and runtime services which are available to the OS loader and OS.
[edit] Services
EFI defines boot services, which include text and graphical console support on various devices, bus, block and file services, and runtime services, such as date, time and NVRAM services.
[edit] Device drivers
In addition to standard architecture-specific device drivers, the EFI specification provides for a processor-independent device driver environment, called EFI Byte Code or EBC. System firmware is required by the UEFI specification to carry an interpreter for any EBC images that resides in or is loaded into the environment. In that sense, EBC is similar to Open Firmware, the hardware-independent firmware used in PowerPC-based Apple Macintosh computers and Sun Microsystems SPARC computers, amongst others.
Some architecture-specific (non-EBC) EFI device drivers types can have interfaces for use from the operating system. This allows the OS to rely on EFI for basic graphics and network support until OS specific drivers are loaded.
[edit] Boot Manager
An EFI boot manager is also used to select and load the operating system, removing the need for a dedicated boot loader mechanism (the boot loader becomes a type of EFI application).
[edit] Disk Support
In addition to the standard PC disk partition scheme, Master boot record (MBR), EFI adds support for a GUID Partition Table (GPT), which does not suffer from the same limitations. The EFI specification does not include a description for a file system; implementations of EFI typically support FAT32 as their file system[6]
[edit] The EFI Shell
The EFI community has created an open source shell environment[7].; rather than booting directly into a full OS, on some implementations, the user can boot to the EFI shell. The shell is an EFI application; it can reside directly within the platform ROM, or on a device for which the drivers are in ROM.
The shell can be used to execute other EFI applications, such as setup, OS install, diagnostic or configuration utilities, and system flash updates; it can also be used to play CDs or DVDs without having to boot to a complete operating system, provided that an EFI application with the apropriate features is written. Shell commands also make it possible to copy or move files and directories between supported file systems. Drivers can be loaded and unloaded, and a complete TCP/IP stack can also be used from within the shell.
The EFI shell supports scripting through .nsh files, which are analogous to DOS batch files.
Shell command names are often inherited from the DOS command interpreter or the Unix shell. The shell can be viewed as a functional replacement for the DOS command interpreter.
[edit] Extensions
Extensions to EFI can be loaded from virtually any non-volatile storage device attached to the computer. For example, an original equipment manufacturer (OEM) can sell systems with an EFI partition on the hard drive which would add additional functions to the standard EFI firmware stored on the motherboard's ROM.
[edit] Implementation and adoption
[edit] Intel Platform Innovation Framework for EFI
The Intel Platform Innovation Framework for EFI (originally codenamed “Tiano”) is a complete, legacy-free firmware implementation that includes support for EFI. It can also support a legacy PC BIOS through a compatibility support module(CSM).
In particular, the Framework includes all the steps needed to initialize the platform after power-on; these inner working of firmware are not defined as part of the EFI specification, but some are part of the Platform Initialization Specification.
Intel does not make the complete Framework available to end-users; it is available through independent BIOS vendors (such as American Megatrends (AMI) and Insyde Software) as part of their firmware offerings[8].
A part of the Framework has been released as open source to the TianoCore project. This implementation covers EFI and some hardware initialization code, but does not constitute feature-complete firmware by itself. Several licenses have been used for this code, including the BSD license and the Eclipse Public License.
[edit] Platforms that use EFI or the Framework
Intel's first Itanium workstations and servers, released in 2000, supported EFI 1.02.
Hewlett-Packard's first Itanium 2 systems, released in 2002, supported EFI 1.10; they were able to boot Windows, Linux, and HP-UX.
In November 2003, Gateway introduced the Gateway 610 Media Center, the first x86 Windows-based computer system to use EFI. The 610 used Insyde Software's InsydeH2O EFI firmware, based on the Framework. It still relied on a legacy BIOS implemented as a compatibility support module to boot Windows.
In January 2006, Apple Computer shipped their first Intel-based Macintosh computers. These systems use EFI and the Framework instead of Open Firmware, which had been used on their previous PowerPC-based systems.[9] On April 5, 2006 Apple released Boot Camp which produces a Windows XP Drivers Disk as well as a non-destructive Partitioning Wizard to help users easily install Windows XP. A firmware update was also released which added legacy BIOS emulation to its EFI implementation. Subsequent Macintosh models shipped with the newer firmware. Now all current Macintosh systems are also able to boot legacy BIOS Operating Systems like Windows XP.
The grand majority of Intel motherboards ship with Framework-based firmware.
During 2005 more than one million Intel systems shipped with the Framework[10]. New mobile, desktop and server products, using the Framework, started shipping in 2006.
Since 2005, EFI has also been implemented on non-PC architectures, such as embedded systems based on XScale cores[11].
Intel currently offers PC motherboards supporting EFI. All boards that use the Intel 945 chipset series support EFI. However, no vendor except Apple, Inc. has yet taken advantage of this. A firmware update could enable EFI on these motherboards, but no such update has yet been released, most likely because there is no EFI-capable 32-bit version of Microsoft Windows.[12]
[edit] Operating Systems
Linux systems have been able to use EFI at boot time since early 2000, using the elilo EFI boot loader. elilo is the only means to boot Linux on IA-64 platforms; it can also be used on IA-32 platforms. As of December 2006, there is no version of elilo for x64 mode.
HP-UX has used EFI as its boot mechanism on IA-64 systems since 2002.
Microsoft Windows Server 2003 for IA64, Windows XP 64-bit Edition, and Windows 2000 Advanced Server Limited Edition, all of which are for the Intel Itanium family of processors, support EFI, a requirement of the platform through the DIG64 specification.[13]
Apple Computer has adopted EFI for its line of Intel-based Macs.
Microsoft plans to introduce UEFI support for 64-bit x64 with Windows Server "Longhorn". EFI support for x64 versions of Windows Vista will be included in a later service pack.[14] There will never be official support for EFI booting on 32-bit CPUs due to lack of support from PC manufacturers and vendors.
[edit] Security and freedom concerns
According to Ron Minnich, the lead developer for LinuxBIOS, one of the stated goals of EFI is to protect hardware vendors "intellectual property"[15]. This raises security concerns and notably makes creating a free software BIOS impossible.
EFI could be used to create a "DRM BIOS", thus letting vendors build computers which limit what the user can do.
[edit] See also
- Open Firmware
- Basic Input/Output System (BIOS)
- Advanced Configuration and Power Interface (ACPI)
- System Management BIOS (SMBIOS)
- AMD64 and EM64T
- OpenBIOS
- LinuxBIOS
- System Management Mode
[edit] References
- ^ Michael Kinney. "Solving BIOS Boot Issues with EFI". Intel DeveloperUPDATEMagazine. September, 2000, page 1.
- ^ Dong Wei, Beyond BIOS (foreword), Intel Press, 2006, ISBN 9-780974-364902
- ^ See the Revision History section of specification version 1.10
- ^ Unified EFI Forum. "UEFI - About UEFI."
- ^ John G. Spooner, [PC Firmware: The Next Generation http://www.eweek.com/article2/0,1895,1918324,00.asp], eWeek, February 6, 2006
- ^ see fat-driver.Tianocore.org for info on EFI FAT driver. (requires registration)
- ^ See efi-shell.tianocore.org for EFI shell information
- ^ See Intel Platform Innovation Framework for EFI on the Intel site
- ^ Apple Computer. "Universal Binary Programming Guidelines, Second Edition: Extensible Firmware Interface (EFI)."
- ^ Intel, Framework Overview
- ^ See Overview of the Intel Platform Innovation Framework
- ^ An Intel pdf with information about EFI on their boards [1]
- ^ Microsoft Windows Server TechCenter. "Extensible Firmware Interface."
- ^ Microsoft bombshell: no EFI support for Vista
- ^ Interview with Ronald Minnich, author of LinuxBIOS