UEFI explained

Unified Extensible Firmware Interface
Abbreviation:UEFI
Status:Published
Year Started:2006
Version:2.11[1]
Version Date:16 December 2024
Organization:UEFI Forum
Predecessor:BIOS on IBM PC compatible computers
Domain:Firmware

Unified Extensible Firmware Interface (UEFI, as an initial) is a specification for the firmware architecture of a computing platform. When a computer is powered on, the UEFI implementation is typically the first that runs, before starting the operating system. Examples include AMI Aptio, Phoenix SecureCore, TianoCore EDK II, and InsydeH2O.

UEFI replaces the BIOS that was present in the boot ROM of all personal computers that are IBM PC compatible,[2] although it can provide backwards compatibility with the BIOS using CSM booting. Unlike its predecessor, BIOS, which is a de facto standard originally created by IBM as proprietary software, UEFI is an open standard maintained by an industry consortium. Like BIOS, most UEFI implementations are proprietary.

Intel developed the original Extensible Firmware Interface (EFI) specification. The last Intel version of EFI was 1.10 released in 2005. Subsequent versions have been developed as UEFI by the UEFI Forum.

UEFI is independent of platform and programming language, but C is used for the reference implementation TianoCore EDKII.

History

The original motivation for EFI came during early development of the first Intel–HP Itanium systems in the mid-1990s. BIOS limitations had become too restrictive for the larger server platforms Itanium was targeting. The effort to address these concerns began in 1998 and was initially called Intel Boot Initiative. It was later renamed to Extensible Firmware Interface (EFI).

The first open-source UEFI implementation, Tiano, was released by Intel in 2004. Tiano has since then been superseded by EDK[3] and EDK II[4] and is now maintained by the TianoCore community.[5]

In July 2008, Intel ceased its development of the EFI specification at version 1.10 and contributed it to the Unified EFI Forum, which has developed the specification as the Unified Extensible Firmware Interface (UEFI). The original EFI specification remains owned by Intel, which exclusively provides licenses for EFI-based products, but the UEFI specification is owned by the UEFI Forum.[6]

Version 2.0 of the UEFI specification was released on 31 January 2006. It added cryptography and security.

Version 2.1 of the UEFI specification was released on 7 January 2007. It added network authentication and the user interface architecture ("Human Interface Infrastructure" in UEFI).

Version 2.3.1 of the UEFI specification was released on 6 April 2011. It added Secure Boot, as well as ARM architecture support.

In October 2018, Arm announced Arm ServerReady, a compliance certification program for landing the generic off-the-shelf operating systems and hypervisors on Arm-based servers. The program requires the system firmware to comply with Server Base Boot Requirements (SBBR). SBBR requires UEFI, ACPI and SMBIOS compliance. In October 2020, Arm announced the extension of the program to the edge and IoT market. The new program name is Arm SystemReady. Arm SystemReady defined the Base Boot Requirements (BBR) specification that currently provides three recipes, two of which are related to UEFI: 1) SBBR: which requires UEFI, ACPI and SMBIOS compliance suitable for enterprise-level operating environments such as Windows, Red Hat Enterprise Linux, and VMware ESXi; and 2) EBBR: which requires compliance to a set of UEFI interfaces as defined in the Embedded Base Boot Requirements (EBBR) suitable for embedded environments such as Yocto. Many Linux and BSD distributions can support both recipes.

In December 2018, Microsoft announced Project Mu, a fork of TianoCore EDK II used in Microsoft Surface and Hyper-V products. The project promotes the idea of firmware as a service.[7]

The latest UEFI specification, version 2.11, was published in December 2024.[8]

Compatibility

Processor compatibility

UEFI supports processor architectures that are 32-bit or higher. However, only processors with a little-endian mode are supported. The UEFI specification, version 2.11, has official documentation for the following processor architectures:

Unofficial UEFI support is under development for POWERPC64 by implementing TianoCore EDK II on top of OPAL,[9] the OpenPOWER abstraction layer, running in little-endian mode.[10] For MIPS, there also exists an unofficial project, based on the original EDK.[11] [12] However, both projects have since been abandoned as of November 2016 and September 2015 respectively.

UEFI only allows executing UEFI applications that match the firmware's bit-width, even if the processor supports smaller or larger bit-widths. For example, a 64-bit UEFI firmware may only execute 64-bit UEFI applications, even if the processor has a 32-bit processor mode. Some low-end computers have been shipped with 32-bit UEFI firmware running on 64-bit CPUs.[13] Once a UEFI application ends the boot services and gets granted full control over the system, it becomes possible to change the processor execution mode. However, calling runtime services requires shortly changing back to the original processor mode,[14] as runtime services may only be called from the same processor mode as the firmware implementation.

The Linux kernel added support for booting 64-bit kernels on 32-bit UEFI firmware implementations with x86-64 CPUs since version 3.15, requiring the UEFI boot loader to support the EFI handover protocol.[15] The EFI handover protocol allows UEFI boot loaders to defer the UEFI initialization to the kernel's EFI boot stub, so that only the kernel does the UEFI initialization.[16] [17] [18]

Disk device compatibility

In addition to the standard PC disk partition scheme that uses a master boot record (MBR), UEFI also works with the GUID Partition Table (GPT) partitioning scheme, which is free from many of the limitations of MBR. In particular, the MBR limits on the number and size of disk partitions (up to four primary partitions per disk, and up to 2 TB per disk) are relaxed. More specifically, GPT allows for a maximum disk and partition size of 8 ZiB with 512 byte sectors.[19] The UEFI specification only supports FAT12/16/32 partitions that are on GPT or MBR disks as well as El Torito-formatted optical discs. Although GPT is a part of the UEFI standard, it may also be usable by BIOS PCs to boot an operating system off of.

Linux

Support for GPT in Linux is enabled by turning on the option CONFIG_EFI_PARTITION (EFI GUID Partition Support) during kernel configuration.[20] This option allows Linux to recognize and use GPT disks after the system firmware passes control over the system to Linux.

For reverse compatibility, Linux can use GPT disks in BIOS-based systems for both data storage and booting, as both GRUB 2 and Linux are GPT-aware. Such a setup is usually referred to as BIOS-GPT. As GPT incorporates the protective MBR, a BIOS-based computer can boot from a GPT disk using a GPT-aware boot loader stored in the protective MBR's bootstrap code area. In the case of GRUB, such a configuration requires a BIOS boot partition for GRUB to embed its second-stage code due to absence of the post-MBR gap in GPT partitioned disks (which is taken over by the GPT's Primary Header and Primary Partition Table). Commonly 1 MB in size, this partition's Globally Unique Identifier (GUID) in GPT scheme is and is used by GRUB only in BIOS-GPT setups. From GRUB's perspective, no such partition type exists in case of MBR partitioning. This partition is not required if the system is UEFI-based because no embedding of the second-stage code is needed in that case.[21]

UEFI systems can access GPT disks and boot directly from them, which allows Linux to use UEFI boot methods. Booting Linux from GPT disks on UEFI systems involves creation of an EFI system partition (ESP), which contains UEFI applications such as bootloaders, operating system kernels, and utility software.[22] [23] Such a setup is usually referred to as UEFI-GPT, while ESP is recommended to be at least 512 MB in size and formatted with a FAT32 filesystem for maximum compatibility.

For backward compatibility, some UEFI implementations also support booting from MBR-partitioned disks through the Compatibility Support Module (CSM) that provides legacy BIOS compatibility. In that case, booting Linux on UEFI systems is the same as on legacy BIOS-based systems.

Microsoft Windows

Some of the EFI's practices and data formats mirror those of Microsoft Windows.[24] [25]

Windows 11, 64-bit versions of Windows Vista SP1/SP2 and 7, and both 32-bit and 64-bit versions of Windows 8, 8.1, and 10 can boot from a GPT disk that is larger than 2 TB.

Features

Services

EFI defines two types of services: boot services and runtime services. Boot services are available only while the firmware owns the platform (i.e., before the ExitBootServices call), and they include text and graphical consoles on various devices, and bus, block and file services. Runtime services are still accessible while the operating system is running; they include services such as date, time and NVRAM access.

Graphics Output Protocol (GOP) services
  • The Graphics Output Protocol (GOP) provides runtime services; see also Graphics features section below. The operating system is permitted to directly write to the framebuffer and bit blit provided by GOP during runtime mode.[26]
    UEFI memory map services
  • SMM services
  • ACPI services
  • SMBIOS services
  • Devicetree services (for RISC processors)
  • Variable services
  • UEFI variables provide a way to store data, in particular non-volatile data. Some UEFI variables are shared between platform firmware and operating systems. Variable namespaces are identified by GUIDs, and variables are key/value pairs. For example, UEFI variables can be used to keep crash messages in NVRAM after a crash for the operating system to retrieve after a reboot.
    Time services
  • UEFI provides time services. Time services include support for time zone and daylight saving fields, which allow the hardware real-time clock to be set to local time or UTC. On machines using a PC-AT real-time clock, by default the hardware clock still has to be set to local time for compatibility with BIOS-based Windows, unless using recent versions and an entry in the Windows registry is set to indicate the use of UTC.

    Applications

    Beyond loading an OS, UEFI can run UEFI applications, which reside as files on the EFI system partition. They can be executed from the UEFI Shell, by the firmware's boot manager, or by other UEFI applications. UEFI applications can be developed and installed independently of the original equipment manufacturers (OEMs).

    A type of UEFI application is an OS boot loader such as GRUB, rEFInd, systemd-boot, and Windows Boot Manager, which loads some OS files into memory and executes them. Also, an OS boot loader can provide a user interface to allow the selection of another UEFI application to run. Utilities like the UEFI Shell are also UEFI applications.

    Protocols

    EFI defines protocols as a set of software interfaces used for communication between two binary modules. All EFI drivers must provide services to others via protocols. The EFI Protocols are similar to the BIOS interrupt calls.

    Device drivers

    In addition to standard instruction set architecture-specific device drivers, EFI provides for a ISA-independent device driver stored in non-volatile memory as EFI byte code or EBC. System firmware has an interpreter for EBC images. In that sense, EBC is analogous to Open Firmware, the ISA-independent firmware used in PowerPC-based Apple Macintosh and Sun Microsystems SPARC computers, among others.

    Some architecture-specific (non-EFI Byte Code) EFI drivers for some device types can have interfaces for use by the OS. This allows the OS to rely on EFI for drivers to perform basic graphics and network functions before, and if, operating-system-specific drivers are loaded.

    In other cases, the EFI driver can be filesystem drivers that allow for booting from other types of disk volumes. Examples include efifs for 37 file systems (based on GRUB2 code),[27] used by Rufus for chain-loading NTFS ESPs.[28]

    Graphics features

    The EFI 1.0 specification defined a UGA (Universal Graphic Adapter) protocol as a way to support graphics features. UEFI did not include UGA and replaced it with GOP (Graphics Output Protocol).[29]

    UEFI 2.1 defined a "Human Interface Infrastructure" (HII) to manage user input, localized strings, fonts, and forms (in the HTML sense). These enable original equipment manufacturers (OEMs) or independent BIOS vendors (IBVs) to design graphical interfaces for pre-boot configuration. UEFI uses UTF-16 to encode strings by default.

    Most early UEFI firmware implementations were console-based. Today many UEFI firmware implementations are GUI-based.

    EFI system partition

    See main article: EFI system partition.

    An EFI system partition, often abbreviated to ESP, is a data storage device partition that is used in computers adhering to the UEFI specification. Accessed by the UEFI firmware when a computer is powered up, it stores UEFI applications and the files these applications need to run, including operating system boot loaders. Supported partition table schemes include MBR and GPT, as well as El Torito volumes on optical discs. For use on ESPs, UEFI defines a specific version of the FAT file system, which is maintained as part of the UEFI specification and independently from the original FAT specification, encompassing the FAT32, FAT16 and FAT12 file systems.[30] The ESP also provides space for a boot sector as part of the backward BIOS compatibility.

    Booting

    Computers are started up by a process which has been called booting: the computer loads its operating software by means of a very small program built into the hardware, which typically loads a program, still small, to load and start the operating system (OS).

    UEFI booting

    Unlike the legacy PC BIOS, UEFI does not rely on boot sectors on the computer's data storage, defining instead a boot manager as part of the UEFI specification. When a computer is powered on, the boot manager checks the boot configuration and, based on its settings, then executes the specified OS boot loader or operating system kernel. The boot configuration is defined by variables stored in the computer's persistent NVRAM storage, including variables that indicate the file system paths to OS loaders or OS kernels.

    OS boot loaders can be automatically detected by UEFI, which enables easy booting from removable devices such as USB flash drives. This automated detection relies on standardized file paths to the OS boot loader, with the path varying depending on the computer architecture. The format of the file path is defined as

    Notes and References

    1. Web site: UEFI Forum Releases the UEFI 2.11 Specification and the PI 1.9 Specification To Streamline User Implementations Unified Extensible Firmware Interface Forum . uefi.org . UEFI Forum . 22 December 2024.
    2. Web site: Solving BIOS Boot Issues with EFI . Michael . Kinney . 1 September 2000 . 14 September 2010 . 47–50 . 23 January 2007 . https://web.archive.org/web/20070123141151/http://systems.cs.colorado.edu/Documentation/IntelDataSheets/xscalemagazine.pdf . dead .
    3. Web site: Git mirror of EDK . . 19 March 2019.
    4. Web site: EDK II . . 8 August 2019.
    5. Web site: What is TianoCore?.
    6. News: Emulex UEFI Implementation Delivers Industry-leading Features for IBM Systems . Emulex . 14 September 2010.
    7. Web site: Microsoft announces Project Mu, an open-source release of the UEFI core . 20 December 2018.
    8. 21 November 2024 . Unified Extensible Firmware Interface (UEFI) Specification . 2.11 . Uefi.org . UEFI Forum . 5 January 2026 .
    9. Web site: GitHub - andreiw/ppc64le-edk2: TianoCore UEFI for OPAL/PowerNV (PPC64/PowerPC64 Little-Endian). GitHub. 3 May 2021.
    10. Web site: Tianocore for OpenPOWER. Firmware Security. 12 October 2015.
    11. Web site: EFI-MIPS. kontais. SourceForge. 3 September 2015 .
    12. Web site: GitHub - ncroxon/gnu-efi:Develop EFI applications for ARM-64, ARM-32, x86_64, IA-64 (IPF), IA-32 (x86), and MIPS platforms using the GNU toolchain and the EFI development environment. . .
    13. Web site: Why Cheap Systems Run 32-bit UEFI on x64 Systems. https://web.archive.org/web/20201224150025/https://software.intel.com/content/www/us/en/develop/blogs/why-cheap-systems-run-32-bit-uefi-on-x64-systems.html . 24 December 2020 . dead . James Brian Richardson . 22 July 2015.
    14. Web site: x86/efi: Add early thunk code to go from 64-bit to 32-bit - kernel/git/torvalds/linux.git - Linux kernel source tree . Matt . Fleming . . 4 March 2014.
    15. Web site: Linux kernel 3.15, Section 1.3. EFI 64-bit kernels can be booted from 32-bit firmware . 8 June 2014 . 15 June 2014 . kernelnewbies.org.
    16. Web site: x86, efi: Handover Protocol . 19 July 2012 . 15 June 2014 . LWN.net.
    17. Web site: Linux kernel documentation: Documentation/efi-stub.txt . 1 February 2014 . 15 June 2014 . kernel.org.
    18. Web site: 1. The Linux/x86 Boot Protocol - The Linux Kernel documentation. kernel.org .
    19. Web site: Make the most of large drives with GPT and Linux . https://web.archive.org/web/20120709032551/http://www.ibm.com/developerworks/library/l-gpt/index.html . 9 July 2012 . Roderick W. . Smith . . 3 July 2012 . 25 September 2013.
    20. Web site: block/partitions/Kconfig (3.11.1) . CONFIG_EFI_PARTITION (line #247) . kernel.org . 25 September 2013.
    21. Web site: Installation . 3.4 BIOS installation . 25 September 2013 . GNU GRUB.
    22. Web site: GRUB and the boot process on UEFI-based x86 systems . 14 November 2013 . redhat.com.
    23. Web site: UEFI Booting 64-bit Redhat Enterprise Linux 6 . September 2010 . 14 November 2013 . fpmurphy.com . 12 July 2013 . https://web.archive.org/web/20130712020644/http://blog.fpmurphy.com/2010/09/uefi-booting-64-bit-redhat-enterprise-linux-6.html . dead .
    24. https://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html IBM PC Real Time Clock should run in UT
    25. Web site: EFI and Linux: The Future Is Here, and It's Awful . https://ghostarchive.org/varchive/youtube/20211113/V2aq5M3Q76U. 13 November 2021 . live. Matthew . Garrett . 19 January 2012 . linux.conf.au 2012 . 2 April 2012.
    26. Web site: What is efifb? — The Linux Kernel documentation. 24 November 2020. www.kernel.org.
    27. Web site: Free Software EFI Drivers .
    28. Web site: Batard . Pete . pbatard/uefi-ntfs . GitHub . 13 March 2020.
    29. Web site: Intel Embedded Graphics Drivers FAQ: BIOS and firmware . 19 May 2014 . Intel.
    30. Web site: Technical Note TN2166: Secrets of the GPT . 6 November 2006 . 6 May 2015 . developer.apple.com.