Hubbry Logo
UEFIUEFIMain
Open search
UEFI
Community hub
UEFI
logo
8 pages, 0 posts
0 subscribers
Be the first to start a discussion here.
Be the first to start a discussion here.
UEFI
UEFI
from Wikipedia

Unified Extensible Firmware Interface
AbbreviationUEFI
StatusPublished
Year started2006[a]
Latest version2.11[1]
December 16, 2024
OrganizationUEFI Forum
Related standards
PredecessorBIOS on IBM PC compatible computers[b]
DomainFirmware
Websiteuefi.org
Boot order selection menu on a Lenovo ThinkPad T470 with both UEFI and BIOS support
The UEFI implementation is usually stored on NOR-based flash memory[2][3][4] located on the motherboard. Various I/O protocols can be used, SPI being the most common.

Unified Extensible Firmware Interface (UEFI, /ˈjuːɪf/ as an acronym)[c] 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,[5][6] 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

[edit]

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.[7] The effort to address these concerns began in 1998 and was initially called Intel Boot Initiative.[8] It was later renamed to Extensible Firmware Interface (EFI).[9][10]

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

In July 2005, 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.[7][14]

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

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.[15]

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

Compatibility

[edit]

Processor compatibility

[edit]

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

Unofficial UEFI support is under development for POWERPC64 by implementing TianoCore on top of OPAL,[17] the OpenPOWER abstraction layer, running in little-endian mode.[18] For MIPS, there also exists an unofficial project[19][20]

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.[16]: sections 2.3.2 and 2.3.4  Some low-end computers have been shipped with 32-bit UEFI firmware running on 64-bit CPUs.[21] 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.[16]: sections 2.3.2 and 2.3.4  However, calling runtime services requires shortly changing back to the original processor mode,[22] as runtime services may only be called from the same processor mode as the firmware implementation.[16]: sections 2.3.2 and 2.3.4 

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.[23] 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.[24][25][26][needs update]

Disk device compatibility

[edit]

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 (2 × 240 bytes) per disk) are relaxed. More specifically, GPT allows for a maximum disk and partition size of 8 ZiB (8 × 270 bytes) with 512 byte sectors.[27] The UEFI specification only supports FAT12/16/32[16]: section 13.3  partitions that are on GPT or MBR disks as well as El Torito-formatted optical discs.[16]: section 13.3.2  Although GPT is a part of the UEFI standard, it may also be usable by BIOS PCs to boot an operating system off of.[27][28]

Linux

[edit]

Support for GPT in Linux is enabled by turning on the option CONFIG_EFI_PARTITION (EFI GUID Partition Support) during kernel configuration.[29] 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.[30][unreliable source?] 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.[27] 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 21686148-6449-6E6F-744E-656564454649 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.[28][27][30]

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.[31][32][33][unreliable source?] 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.[27][30][34][unreliable source?]

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

Microsoft Windows

[edit]

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

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

[edit]

Services

[edit]

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.[38]
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.[39]
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.[16]: section 8.3  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,[37] unless using recent versions and an entry in the Windows registry is set to indicate the use of UTC.

Applications

[edit]
Interaction between the EFI boot manager and EFI drivers

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

[edit]

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

[edit]

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),[40] used by Rufus for chain-loading NTFS ESPs.[41]

Graphics features

[edit]

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).[42]

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.[citation needed]

EFI system partition

[edit]

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.[16]: section 2.6.2  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.[16]: section 13.3 [43] The ESP also provides space for a boot sector as part of the backward BIOS compatibility.[35]

Booting

[edit]

UEFI booting

[edit]

Unlike the legacy PC BIOS, UEFI does not rely on boot sectors, 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 (usually boot loader[44]). The boot configuration is defined by variables stored in NVRAM, 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 <EFI_SYSTEM_PARTITION>\EFI\BOOT\BOOT<MACHINE_TYPE_SHORT_NAME>.EFI; for example, the file path to the OS loader on an x86-64 system is \efi\boot\bootx64.efi,[16]: section 3.5.1.1  and \efi\boot\bootaa64.efi on ARM64 architecture.

Boot process

Booting UEFI systems from GPT-partitioned disks is commonly called UEFI-GPT booting. Despite the fact that the UEFI specification requires MBR partition tables to be fully supported.[16]: section 13.3.2  Some UEFI firmware implementations immediately switch to BIOS-based CSM booting depending on the type of boot disk's partition table, effectively preventing UEFI booting to be performed from EFI System Partition on MBR-partitioned disks.[35][unreliable source?] Such a boot scheme is commonly called UEFI-MBR.

It is also common for a boot manager to have a textual user interface so the user can select the desired OS (or setup utility) from a list of available boot options.

On PC platforms, the BIOS firmware that supports UEFI boot can be called UEFI BIOS, although it may not support CSM boot method, as modern x86 PCs deprecated use of CSM.

CSM booting

[edit]

To ensure backward compatibility, UEFI firmware implementations on PC-class machines could support booting in legacy BIOS mode from MBR-partitioned disks through the Compatibility Support Module (CSM) that provides legacy BIOS compatibility. In this scenario, booting is performed in the same way as on legacy BIOS-based systems, by ignoring the partition table and relying on the content of a boot sector.[35]

BIOS-style booting from MBR-partitioned disks is commonly called BIOS-MBR, regardless of it being performed on UEFI or legacy BIOS-based systems. Furthermore, booting legacy BIOS-based systems from GPT disks is also possible, and such a boot scheme is commonly called BIOS-GPT.

The Compatibility Support Module allows legacy operating systems and some legacy option ROMs that do not support UEFI to still be used.[45] It also provides required legacy System Management Mode (SMM) functionality, called CompatibilitySmm, as an addition to features provided by the UEFI SMM. An example of such a legacy SMM functionality is providing USB legacy support for keyboard and mouse, by emulating their classic PS/2 counterparts.[45]

In November 2017, Intel announced that it planned to phase out support CSM for client platforms by 2020.[46]

In July, of 2022, Kaspersky Labs published information regarding a Rootkit designed to chain boot malicious code on machines using Intel's H81 chipset and the Compatibility Support module of affected motherboards.[47]

In August 2023, Intel announced that it planned to phase out support CSM for server platforms by 2024.[48]

Currently [when?] most computers based on Intel platforms do not support CSM.[citation needed]

Network booting

[edit]

The UEFI specification includes support for booting over network via the Preboot eXecution Environment (PXE). PXE booting network protocols include Internet Protocol (IPv4 and IPv6), User Datagram Protocol (UDP), Dynamic Host Configuration Protocol (DHCP), Trivial File Transfer Protocol (TFTP) and iSCSI.[16][page needed][49]

OS images can be remotely stored on storage area networks (SANs), with Internet Small Computer System Interface (iSCSI) and Fibre Channel over Ethernet (FCoE) as supported protocols for accessing the SANs.[16][page needed][50][51]

Version 2.5 of the UEFI specification adds support for accessing boot images over HTTP.[52]

Secure Boot

[edit]
Example of an active Secure Boot as detected by rEFInd boot manager

The UEFI specification defines a protocol known as Secure Boot, which can secure the boot process by preventing the loading of UEFI drivers or OS boot loaders that are not signed with an acceptable digital signature. When Secure Boot is enabled, it is initially placed in "setup" mode, which allows a public key known as the "platform key" (PK) to be written to the firmware. Once the key is written, Secure Boot enters "User" mode, where only UEFI drivers and OS boot loaders signed with the platform key can be loaded by the firmware. Additional "key exchange keys" (KEK) can be added to a database stored in memory to allow other certificates to be used, but they must still have a connection to the private portion of the platform key.[53] Secure Boot can also be placed in "Custom" mode, where additional public keys can be added to the system that do not match the private key.[54]

Secure Boot is supported by Windows 8 and 8.1, Windows Server 2012 and 2012 R2, Windows 10, Windows Server 2016, 2019, and 2022, and Windows 11, VMware vSphere 6.5[55] and a number of Linux distributions including Fedora (since version 18), openSUSE (since version 12.3), RHEL (since version 7), CentOS (since version 7[56]), Debian (since version 10),[57] Ubuntu (since version 12.04.2), Linux Mint (since version 21.3).,[58][59] and AlmaLinux OS (since version 8.4[60]). As of January 2025, FreeBSD support is in a planning stage.[61]

UEFI shell

[edit]
Example of a UEFI shell 2.2 session

UEFI provides a shell environment, which can be used to execute other UEFI applications, including UEFI boot loaders.[33] Apart from that, commands available in the UEFI shell can be used for obtaining various other information about the system or the firmware, including getting the memory map (memmap), modifying boot manager variables (bcfg), running partitioning programs (diskpart), loading UEFI drivers, and editing text files (edit).[62][unreliable source?][63][64]

Source code for a UEFI shell can be downloaded from the Intel's TianoCore UDK/EDK2 project.[65] A pre-built ShellBinPkg is also available.[66] Shell v2 works best in UEFI 2.3+ systems and is recommended over Shell v1 in those systems. Shell v1 should work in all UEFI systems.[62][67][68]

Methods used for launching UEFI shell depend on the manufacturer and model of the system motherboard. Some of them already provide a direct option in firmware setup for launching, e.g. compiled x86-64 version of the shell needs to be made available as <EFI_SYSTEM_PARTITION>/SHELLX64.EFI. Some other systems have an already embedded UEFI shell which can be launched by appropriate key press combinations.[69][unreliable source?][70] For other systems, the solution is either creating an appropriate USB flash drive or adding manually (bcfg) a boot option associated with the compiled version of shell.[64][69][71][unreliable source?][72][unreliable source?]

Commands

[edit]

The following is a list of commands supported by the EFI shell.[63]

Extensions

[edit]

Extensions to UEFI can be loaded from virtually any non-volatile storage device attached to the computer. For example, an original equipment manufacturer (OEM) can distribute systems with an EFI system partition on the hard drive, which would add additional functions to the standard UEFI firmware stored on the motherboard's ROM.

UEFI Capsule

[edit]

UEFI Capsule defines a Firmware-to-OS firmware update interface, marketed as modern and secure.[73] Windows 8, Windows 8.1, Windows 10,[74] and Fwupd for Linux each support the UEFI Capsule.

Hardware

[edit]

Like BIOS, UEFI initializes and tests system hardware components, and then loads the boot loader from a mass storage device or through a network connection. In x86 systems, the UEFI firmware is usually stored in the NOR flash chip of the motherboard, and the boot process is more complex, for example PCI Express devices detection and initialization.[75][76] In some ARM-based Android and Windows Phone devices, the UEFI boot loader is stored in the eMMC or eUFS flash memory.

Classes

[edit]

UEFI machines can have one of the following classes, which were used to help ease the transition to UEFI:[77]

  • Class 0: Legacy BIOS
  • Class 1: UEFI with a CSM interface and no external UEFI interface. The only UEFI interfaces are internal to the firmware.
  • Class 2: UEFI with CSM and external UEFI interfaces, eg. UEFI Boot.
  • Class 3: UEFI without a CSM interface and with an external UEFI interface.
  • Class 3+: UEFI class 3 that has Secure Boot enabled.[78]

Starting from the 10th Gen Intel Core, Intel no longer provides Legacy Video BIOS for the iGPU (Intel Graphics Technology). Legacy boot with those CPUs requires a Legacy Video BIOS, which can still be provided by a video card.[citation needed]

Boot stages

[edit]

SEC – Security Phase

[edit]

This is the first stage of the UEFI boot but may have platform specific binary code that precedes it. (e.g., Intel ME, AMD PSP, CPU microcode). It consists of minimal code written in assembly language for the specific architecture. It initializes a temporary memory (often CPU cache-as-RAM (CAR), or SoC on-chip boot processor) and serves as the system's software root of trust with the option of verifying PEI before hand-off.

Responsibilities

[edit]
  • Initialization of temporary memory for next stage, PEI.
  • Root of trust, by the means of verifying the integrity of PEI.
  • Passing handoff information to the PEI foundation. The information includes the location and size of temporary memory, location and size of stack and state of the platform.

PEI – Pre-EFI Initialization

[edit]

The second stage of UEFI boot consists of a dependency-aware dispatcher that loads and runs PEI modules (PEIMs) to handle early hardware initialization tasks such as main memory initialization (initialize memory controller and DRAM) and firmware recovery operations. Additionally, it is responsible for discovery of the current boot mode and handling many ACPI S3 operations. In the case of ACPI S3 resume, it is responsible for restoring many hardware registers to a pre-sleep state. PEI also uses CAR. Initialization at this stage involves creating data structures in memory and establishing default values within these structures.[4]

This stage has several components including PEI foundation, PEIMs and PPI. Due less resources available in this stage, this stage must be minimal and do minimal preparations for the next stage, DXE, Which is more richer.

PEI Foundation

[edit]

After SEC phase hand off, platform responsibility is taken by PEI Foundation. Its responsibilities are:

  • Successful dispatching of PEIMs (pre-EFI initialization modules).
  • Initializing permanent memory (RAM).
  • Handing over to the next stage, DXE.
  • Facilitating the communication of PEIMs called PPI.

PEI Dispatcher

[edit]

This component is responsible for invoking PEIMs and managing their dependencies.

Pre-EFI Initialization Modules

[edit]

These are minimal PEI drivers that are responsible for initialization of hardware components, such as permanent memory, CPU, chipset and motherboard. Each of the PEIMs have single responsibilities and focus on single initialization. These drivers come from different vendors.

PEIMs-to-PEIMs Interfaces

[edit]

This is a data structure that composed of GUID pairs of pointers. PPIs are discovered by PEIMs through PEI services.

After minimal initialization of the system for DXE, PEI foundation locates and passes control to DXE. The PEI foundation dispatches DXE foundation through special PPI called IPL(Initial Program Load).

DXE – Driver Execution Environment

[edit]

This stage consists of C modules and a dependency-aware dispatcher. With main memory now available, CPU, chipset, mainboard and other I/O devices are initialized in DXE and BDS. Initialization at this stage involves assigning EFI device paths to the hardware connected to the motherboard, and transferring configuration data to the hardware.[4]

BDS – Boot Device Select (Boot Manager)

[edit]

BDS is a part of the DXE.[79][80] In this stage, boot devices are initialized, UEFI drivers or Option ROMs of PCI devices are executed according to architecturally defined variables called NVRAM.

TSL – Transient System Load

[edit]

This is the stage between boot device selection and hand-off to the OS. At this point one may enter a UEFI shell, or execute a UEFI application such as the OS boot loader.

RT – Runtime

[edit]

The UEFI hands off to the operating system (OS) after ExitBootServices() is executed. A UEFI compatible OS is now responsible for exiting boot services triggering the firmware to unload all no longer needed code and data, leaving only runtime services code/data, e.g. SMM and ACPI.[81][failed verification] A typical modern OS will prefer to use its own programs (such as kernel drivers) to control hardware devices.

When a legacy OS is used, CSM will handle this call ensuring the system is compatible with legacy BIOS expectations.

Usage

[edit]

Implementations

[edit]
Microsoft Surface UEFI, the UEFI used on all Surface models made after 2015

Intel's implementation of EFI is the Intel Platform Innovation Framework, codenamed Tiano. Tiano runs on Intel's XScale, Itanium, IA-32 and x86-64 processors, and is proprietary software, although a portion of the code has been released under the BSD license or Eclipse Public License (EPL) as TianoCore EDK II. TianoCore can be used as a payload for coreboot.[82]

Phoenix Technologies' implementation of UEFI is branded as SecureCore Technology (SCT).[83] American Megatrends offers its own UEFI firmware implementation known as Aptio,[84] while Insyde Software offers InsydeH2O,[85] and Byosoft offers ByoCore.

In December 2018, Microsoft released an open source version of its TianoCore EDK2-based UEFI implementation from the Surface line, Project Mu.[86]

An implementation of the UEFI API was introduced into the Universal Boot Loader (Das U-Boot) in 2017.[87] On the ARMv8 architecture Linux distributions use the U-Boot UEFI implementation in conjunction with GNU GRUB for booting (e.g. SUSE Linux[88]), the same holds true for OpenBSD.[89] For booting from iSCSI iPXE can be used as a UEFI application loaded by U-Boot.[90]

Platforms

[edit]

Intel's first Itanium workstations and servers, released in 2000, implemented EFI 1.02.

Hewlett-Packard's first Itanium 2 systems, released in 2002, implemented EFI 1.10. These systems were able to boot Windows, Linux, FreeBSD and HP-UX. OpenVMS added UEFI capability in June 2003.

In January 2006, Apple Inc. shipped its first Intel-based Macintosh computers. These systems used EFI instead of Open Firmware, which had been used on its previous PowerPC-based systems.[91] On 5 April 2006, Apple first released Boot Camp, which produces a Windows drivers disk and a non-destructive partitioning tool to allow the installation of Windows XP or Vista without requiring a reinstallation of Mac OS X (now macOS). A firmware update was also released that added BIOS compatibility to its EFI implementation. Subsequent Macintosh models shipped with the newer firmware.[92]

During 2005, more than one million Intel systems shipped with Intel's implementation of UEFI.[93][failed verification] New mobile, desktop and server products, using Intel's implementation of UEFI, started shipping in 2006. For instance, boards that use the Intel 945 chipset series use Intel's UEFI firmware implementation.

Since 2005, EFI has also been implemented on non-PC architectures, such as embedded systems based on XScale cores.[93]

The EDK (EFI Developer Kit) includes an NT32 target, which allows EFI firmware and EFI applications to run within a Windows application. However, no direct hardware access is allowed by EDK NT32. This means only a subset of EFI application and drivers can be executed by the EDK NT32 target.

In 2008, more x86-64 systems adopted UEFI. While many of these systems still allow booting only the BIOS-based OSes via the Compatibility Support Module (CSM) (thus not appearing to the user to be UEFI-based), other systems started to allow booting UEFI-based OSes. For example, IBM x3450 server, MSI motherboards with ClickBIOS and HP EliteBook Notebook PCs.

In 2009, IBM shipped System x machines (x3550 M2, x3650 M2, iDataPlex dx360 M2) and BladeCenter HS22 with UEFI capability. Dell shipped PowerEdge T610, R610, R710, M610 and M710 servers with UEFI capability. More commercially available systems are mentioned in a UEFI whitepaper.[94]

In 2011, major vendors (such as ASRock, Asus, Gigabyte, and MSI) launched several consumer-oriented motherboards using the Intel 6-series LGA 1155 chipset and AMD 9 Series AM3+ chipsets with UEFI.[95]

With the release of Windows 8 in October 2012, Microsoft's certification requirements now require that computers include firmware that implements the UEFI specification. Furthermore, if the computer supports the "Connected Standby" feature of Windows 8 (which allows devices to have power management comparable to smartphones, with an almost instantaneous return from standby mode), then the firmware is not permitted to contain a Compatibility Support Module (CSM). As such, systems that support Connected Standby are incapable of booting Legacy BIOS operating systems.[96][97]

In October 2017, Intel announced that it would remove legacy PC BIOS support from all its products by 2020, in favor of UEFI Class 3.[98] By 2019, all computers based on Intel platforms no longer have legacy PC BIOS support.

Operating systems

[edit]

A operating system that can be booted from (U)EFI is called a (U)EFI-aware operating system, defined by (U)EFI specification. Here the term booted from a (U)EFI means directly booting the system using a (U)EFI operating system loader stored on any storage device. The default location for the operating system loader is <EFI_SYSTEM_PARTITION>/BOOT/BOOT<MACHINE_TYPE_SHORT_NAME>.EFI, where short name of the machine type can be IA32, X64, IA64, ARM or AA64.[16]: section 3.5.1.1  Some operating systems vendors may have their own boot loaders. They may also change the default boot location.

  • The Linux kernel has been able to use EFI at boot time since early 2000s,[99] using the elilo EFI boot loader or, more recently, EFI versions of GRUB.[100] Grub+Linux also supports booting from a GUID partition table without UEFI.[28] The distribution Ubuntu added support for UEFI Secure Boot as of version 12.10.[101] Furthermore, the Linux kernel can be compiled with the option to run as an EFI bootloader on its own through the EFI boot stub feature.
  • HP-UX has used (U)EFI as its boot mechanism on IA-64 systems since 2002.
  • OpenVMS has used EFI on IA-64 since its initial evaluation release in December 2003, and for production releases since January 2005.[102] OpenVMS on x86-64 also uses UEFI to boot the operating system.[103]
  • Apple uses EFI for its line of Intel-based Macs. Mac OS X v10.4 Tiger and Mac OS X v10.5 Leopard implements EFI v1.10 in 32-bit mode even on 64-bit CPUs, but full support arrived with OS X v10.8 Mountain Lion.[104][failed verification]
  • The Itanium versions of Windows 2000 (Advanced Server Limited Edition and Datacenter Server Limited Edition; based on the pre-release Windows Server 2003 codebase) implemented EFI 1.10 in 2002. Windows XP 64-bit Edition, Windows 2000 Advanced Server Limited Edition (pre-release Windows Server 2003) and Windows Server 2003 for IA-64, all of which are for the Intel Itanium family of processors, implement EFI, a requirement of the platform through the DIG64 specification.[105]
  • Microsoft introduced UEFI for x64 Windows operating systems with Windows Vista SP1[106] and Windows Server 2008 however only UGA (Universal Graphic Adapter) 1.1 or Legacy BIOS INT 10h is supported; Graphics Output Protocol (GOP) is not supported. Therefore, PCs running 64-bit versions of Windows Vista SP1, Windows Vista SP2, Windows 7, Windows Server 2008 and Windows Server 2008 R2 are compatible with UEFI Class 2.[107][108] 32-bit UEFI was originally not supported since vendors did not have any interest in producing native 32-bit UEFI firmware because of the mainstream status of 64-bit computing.[109] Windows 8 finally introduced further optimizations for UEFI systems, including Graphics Output Protocol (GOP) support,[110] a faster startup, 32-bit UEFI support, and Secure Boot support.[111][112] Since Windows 8, the UEFI firmware with ACPI protocol is a mandatory requirement for ARM-based Microsoft Windows operating systems. Microsoft began requiring UEFI to run Windows with Windows 11,[113] with IoT Enterprise editions of Windows 11 since version 24H2 exempt from the requirement.[114]
  • On 5 March 2013, the FreeBSD Foundation awarded a grant to a developer seeking to add UEFI support to the FreeBSD kernel and bootloader.[115] The changes were initially stored in a discrete branch of the FreeBSD source code, but were merged into the mainline source on 4 April 2014 (revision 264095); the changes include support in the installer as well.[116] UEFI boot support for amd64 first appeared in FreeBSD 10.1 and for arm64 in FreeBSD 11.0.[117]
  • Oracle Solaris 11.1 and later support UEFI boot for x86 systems with UEFI firmware version 2.1 or later. GRUB 2 is used as the boot loader on x86.[118]
  • OpenBSD 5.9[119] introduced UEFI boot support for 64-bit x86 systems using its own custom loader, OpenBSD 6.0 extended that support to include ARMv7.[120]
  • illumos added basic UEFI support in October 2017.[121]
  • ArcaOS supports UEFI booting since the 5.1 release.[122] ArcaOS' UEFI support emulates specific BIOS functionality which the operating system depends on (particularly interrupts INT 10H and INT 13H).[123][124]

With virtualization

[edit]
  • HP Integrity Virtual Machines provides UEFI boot on HP Integrity Servers. It also provides a virtualized UEFI environment for the guest UEFI-aware OSes.
  • Intel hosts an Open Virtual Machine Firmware project on SourceForge.[125]
  • VMware Fusion 3 software for Mac OS X can boot Mac OS X Server virtual machines using UEFI.
  • VMware Workstation prior to version 11 unofficially supports UEFI, but is manually enabled by editing the .vmx file.[126] VMware Workstation version 11 and above supports UEFI, independently of whether the physical host system is UEFI-based. VMware Workstation 14 (and accordingly, Fusion 10) adds support for the Secure Boot feature of UEFI.[127][128]
  • The VMware ESXi 5.0 hypervisor officially supports UEFI. Version 6.5 adds support for Secure Boot.[129][130]
  • VirtualBox has implemented UEFI since 3.1,[131] but is limited to Unix/Linux operating systems and Windows 8 and later (does not work with Windows Vista x64 and Windows 7 x64).[132][133]
  • QEMU/KVM can be used with the Open Virtual Machine Firmware (OVMF) provided by TianoCore.[134]
  • The second generation of the Microsoft Hyper-V virtual machine supports virtualized UEFI.[135]
  • Google Cloud Platform Shielded VMs support virtualized UEFI to enable Secure Boot.[136]

Applications development

[edit]

EDK2 Application Development Kit (EADK) makes it possible to use standard C library functions in UEFI applications. EADK can be freely downloaded from the Intel's TianoCore UDK / EDK2 SourceForge project. As an example, a port of the Python interpreter is made available as a UEFI application by using the EADK.[137] The development has moved to GitHub since .UDK2015.[138]

Criticism

[edit]

Numerous digital rights activists have protested UEFI. Ronald G. Minnich, a co-author of coreboot, and Cory Doctorow, a digital rights activist, have criticized UEFI as an attempt to remove the ability of the user to truly control the computer.[139][140] It does not solve the BIOS's long-standing problems of requiring two different drivers—one for the firmware and one for the operating system—for most hardware.[141]

Open-source project TianoCore also provides UEFIs.[142] TianoCore lacks the specialized firmware drivers and modules that initialize chipset functions, but TianoCore is one of many payload options of coreboot. The development of coreboot requires cooperation from chipset manufacturers to provide the specifications needed to develop initialization drivers.

Secure Boot

[edit]
Examples of custom Secure Boot public keys
MokManager, a part of shim bootloader used to enroll Machine Owner Key (MOK) to UEFI system

In 2011, Microsoft announced that computers certified to run its Windows 8 operating system had to ship with Microsoft's public key enrolled and Secure Boot enabled, which implies that using UEFI is a requirement for these devices.[143][144] Following the announcement, the company was accused by critics and free-software/open-source advocates (including the Free Software Foundation) of trying to use the Secure Boot functionality of UEFI to hinder or outright prevent the installation of alternative operating systems such as Linux. Microsoft denied that the Secure Boot requirement was intended to serve as a form of lock-in and clarified its requirements by stating that x86-based systems certified for Windows 8 must allow Secure Boot to enter custom mode or be disabled, but not on systems using the ARM architecture.[54][145] Windows 10 allows OEMs to decide whether or not Secure Boot can be managed by users of their x86 systems.[146]

Other developers raised concerns about the legal and practical issues of implementing support for Secure Boot on Linux systems in general. Former Red Hat developer Matthew Garrett noted that conditions in the GNU General Public License version 3 may prevent the use of the GNU GRand Unified Bootloader without a distribution's developer disclosing the private key (however, the Free Software Foundation has since clarified its position, assuring that the responsibility to make keys available was held by the hardware manufacturer),[147][101] and that it would also be difficult for advanced users to build custom kernels that could function with Secure Boot enabled without self-signing them.[145] Other developers suggested that signed builds of Linux with another key could be provided, but noted that it would be difficult to persuade OEMs to ship their computers with the required key alongside the Microsoft key.[6]

Several major Linux distributions have developed different implementations for Secure Boot. Garrett himself developed a minimal bootloader known as a shim, which is a precompiled, signed bootloader that allows the user to individually trust keys provided by Linux distributions.[148] Ubuntu 12.10 uses an older version of shim[which?] pre-configured for use with Canonical's own key that verifies only the bootloader and allows unsigned kernels to be loaded; developers believed that the practice of signing only the bootloader is more feasible, since a trusted kernel is effective at securing only the user space, and not the pre-boot state for which Secure Boot is designed to add protection. That also allows users to build their own kernels and use custom kernel modules as well, without the need to reconfigure the system.[101][149][150] Canonical also maintains its own private key to sign installations of Ubuntu pre-loaded on certified OEM computers that run the operating system, and also plans to enforce a Secure Boot requirement as well—requiring both a Canonical key and a Microsoft key (for compatibility reasons) to be included in their firmware. Fedora also uses shim,[which?] but requires that both the kernel and its modules be signed as well.[149] shim has Machine Owner Key (MOK) that can be used to sign locally compiled kernels and other software not signed by distribution maintainer.[151]

It has been disputed whether the operating-system kernel and its modules must be signed as well; while the UEFI specifications do not require it, Microsoft has asserted that their contractual requirements do, and that it reserves the right to revoke any certificates used to sign code that can be used to compromise the security of the system.[150] In Windows, if Secure Boot is enabled, all kernel drivers must be digitally signed; non-WHQL drivers may be refused to load. In February 2013, another Red Hat developer attempted to submit a patch to the Linux kernel that would allow it to parse Microsoft's authenticode signing using a master X.509 key embedded in PE files signed by Microsoft. However, the proposal was criticized by Linux creator Linus Torvalds, who attacked Red Hat for supporting Microsoft's control over the Secure Boot infrastructure.[152]

On 26 March 2013, the Spanish free-software development group Hispalinux filed a formal complaint with the European Commission, contending that Microsoft's Secure Boot requirements on OEM systems were "obstructive" and anti-competitive.[153]

At the Black Hat conference in August 2013, a group of security researchers presented a series of exploits in specific vendor implementations of UEFI that could be used to exploit Secure Boot.[154]

In August 2016 it was reported that two security researchers had found the "golden key" security key Microsoft uses in signing operating systems.[155] Technically, no key was exposed, however, an exploitable binary signed by the key was. This allows any software to run as though it was genuinely signed by Microsoft and exposes the possibility of rootkit and bootkit attacks. This also makes patching the fault impossible, since any patch can be replaced (downgraded) by the (signed) exploitable binary. Microsoft responded in a statement that the vulnerability only exists in ARM architecture and Windows RT devices, and has released two patches; however, the patches do not (and cannot) remove the vulnerability, which would require key replacements in end-user firmware to fix.[citation needed]

On 1 March 2023, researchers from ESET Cybersecurity Firm reported "The first in-the-wild UEFI bootkit bypassing UEFI Secure Boot" named "BlackLotus" in their public analyses findings describing the theory behind its mechanics exploiting the patches that "do not (and cannot) remove the vulnerability".[156][157]

In August 2024, the Windows 11 and Windows 10 security updates applied the Secure Boot Advanced Targeting (SBAT) settings to device's UEFI NVRAM, which caused some Linux distributions to fail to load. SBAT is a protocol that supported in new versions of Windows Boot Manager and shim, which refuse buggy or vulnerable intermediate bootloaders (usually older versions of Windows Boot Manager and GRUB) to load in the boot process. The change was reverted the next month.[158]

In June 2025, LWN.net reported that the Microsoft UEFI CA 2011 certificate will be expired in June 2026, which may refuse some Linux to load if Secure Boot is enabled.[159] However, in TianoCore EDK II as well as many commercial UEFI implementations (such as AMI Aptio), time/date check for Secure Boot certificate is usually disabled by default.[160]

Many Linux distributions support UEFI Secure Boot as of January 2025, such as RHEL (RHEL 7 and later), CentOS (CentOS 7 and later[161]), Ubuntu, Fedora, Debian (Debian 10 and later[162]), OpenSUSE, and SUSE Linux Enterprise.[163]

Firmware problems

[edit]

The increased prominence of UEFI firmware in devices has also led to a number of technical problems blamed on their respective implementations.[164]

Following the release of Windows 8 in late 2012, it was discovered that certain Lenovo computer models with Secure Boot had firmware that was hardcoded to allow only executables named "Windows Boot Manager" or "Red Hat Enterprise Linux" to load, regardless of any other setting.[165] Other problems were encountered by several Toshiba laptop models with Secure Boot that were missing certain certificates required for its proper operation.[164]

In January 2013, a bug surrounding the UEFI implementation on some Samsung laptops was publicized, which caused them to be bricked after installing a Linux distribution in UEFI mode. While potential conflicts with a kernel module designed to access system features on Samsung laptops were initially blamed (also prompting kernel maintainers to disable the module on UEFI systems as a safety measure), Matthew Garrett discovered that the bug was actually triggered by storing too many UEFI variables to memory, and that the bug could also be triggered under Windows under certain conditions. In conclusion, he determined that the offending kernel module had caused kernel message dumps to be written to the firmware, thus triggering the bug.[39][166][167]

See also

[edit]

Notes

[edit]

References

[edit]

Further reading

[edit]
[edit]
Revisions and contributorsEdit on WikipediaRead on Wikipedia
from Grokipedia
The Unified Extensible Firmware Interface (UEFI) is a technical specification that defines a standardized software interface between an operating system's loader and the platform firmware of personal computers and servers. Developed initially by Intel as the Extensible Firmware Interface (EFI) in 2000 for the Itanium architecture, it evolved into UEFI through the Unified EFI Forum, established after Intel handed over development in 2005 following EFI version 1.10. UEFI serves as the modern successor to the legacy Basic Input/Output System (BIOS), addressing limitations such as 16-bit operation, the 2.2 terabyte partition size cap of Master Boot Record (MBR), and inefficient boot processes by enabling 64-bit execution, support for GUID Partition Table (GPT) for drives exceeding 2 terabytes, and a modular driver model. Key characteristics of UEFI include its extensible architecture, which allows for runtime services like time management and system resets, boot services for loading operating systems, and protocols for hardware abstraction, facilitating faster initialization of peripherals and graphics during startup compared to BIOS. A defining feature is Secure Boot, which verifies the digital signatures of bootloaders and drivers against trusted keys stored in firmware to prevent malware from executing during the boot phase, though it has sparked debates over restricting unsigned operating systems and requiring manufacturer-specific key management. UEFI's adoption has become ubiquitous in x86-64 systems since the mid-2000s, with Microsoft mandating it for Windows certification starting with Windows 8 and enforcing Secure Boot for Windows 11, while providing backward compatibility modes (Compatibility Support Module, or CSM) for legacy BIOS applications. Despite its advancements, UEFI implementations vary across vendors, leading to interoperability challenges, and vulnerabilities in firmware have been exploited in attacks targeting the boot chain, underscoring the need for regular updates via capsule mechanisms defined in the specification. The specification, currently at version 2.11 as of November 2024, continues to evolve under the UEFI Forum, comprising members like Intel, Microsoft, AMD, and others, ensuring ongoing support for emerging hardware like non-volatile memory and heterogeneous computing.

History

Origins and Predecessors

The legacy BIOS (Basic Input/Output System) functioned as the direct predecessor to UEFI, providing an elementary firmware layer for hardware abstraction and boot processes in personal computers. IBM developed the original PC BIOS for the IBM 5150, announced on August 12, 1981, with development completed by April 24, 1981, using tools like Intel's ISIS-II system. This firmware initialized hardware via 16-bit real-mode code stored in read-only memory, handling interrupts for input/output operations such as keyboard, display, and disk access, while loading the operating system from the boot sector using the Master Boot Record (MBR) scheme. Although reverse-engineered by third parties like Phoenix Technologies starting in 1984 to enable compatible clones, the BIOS architecture remained constrained by its origins in 1980s x86 design, restricting direct addressing to 1 MB of memory, lacking native support for 64-bit execution, and imposing limits like 2.2 TB maximum partition sizes under MBR. These rigidities became evident as hardware evolved toward larger storage, multiprocessing, and non-x86 architectures, prompting the need for a more modular, extensible alternative independent of legacy 16-bit dependencies. Intel originated the Extensible Firmware Interface (EFI) in the mid-1990s to overcome BIOS shortcomings, specifically for the IA-64 Itanium platform co-developed with Hewlett-Packard, which eschewed x86 backward compatibility and required a firmware model supporting 64-bit addressing, driver loading, and platform-independent booting. The inaugural EFI specification, version 1.10, was released by Intel on December 1, 2002, defining APIs for boot services, runtime services, and protocols to facilitate OS handoff without BIOS emulation. This laid the groundwork for UEFI, formalized in 2005 when Intel ceded stewardship to the Unified EFI Forum for broader industry adoption.

Initial Development and Intel's Role

The Extensible Firmware Interface (EFI), the precursor to UEFI, was developed by Intel starting in the late 1990s to overcome the constraints of the legacy BIOS, particularly for 64-bit architectures like Itanium (IA-64). Intel's initiative began as the Intel Boot Initiative in 1998, aimed at creating a more extensible and platform-independent firmware interface for booting operating systems on next-generation Intel-based systems. The first EFI specification was published around 2000, initially targeting Itanium-based servers to enable modular firmware with driver support, runtime services, and a standardized boot process independent of BIOS's 16-bit limitations. Intel maintained sole control over EFI development through multiple revisions, releasing versions up to 1.10 in 2005, which introduced enhancements like improved boot services and protocol definitions for hardware abstraction. This proprietary effort reflected Intel's strategic push to unify firmware across its processor families, reducing dependency on ad-hoc BIOS implementations and facilitating OS portability. By July 2005, recognizing the need for industry-wide adoption beyond Intel platforms, the company ceased independent EFI development at version 1.10 and transferred stewardship to the newly formed Unified EFI Forum, an industry consortium including Intel, Microsoft, AMD, and others. Intel's pivotal role extended beyond specification authorship to early implementations, such as integrating EFI into Itanium systems by the early 2000s, which demonstrated practical advantages like support for larger disk partitions via GPT and network booting capabilities. This foundation enabled the transition to UEFI, with Intel continuing as a promoter and contributor, ensuring backward compatibility with EFI while expanding to x86 and ARM architectures.

Specification Evolution and Key Releases

The UEFI specification traces its roots to Intel's proprietary Extensible Firmware Interface (EFI), with the final EFI version 1.10 released in 2005 to support platforms like Itanium while providing a modular alternative to legacy BIOS. In 2005, the UEFI Forum—a consortium of industry stakeholders including Intel, Microsoft, AMI, Phoenix, and others—was formed to create an open, extensible standard, publishing the inaugural UEFI version 2.0 on January 31, 2006. This release unified EFI's core concepts across x86, Itanium, and ARM architectures, introducing a driver model, boot and runtime services, and foundational security mechanisms such as cryptographic support to enable verifiable firmware interactions. Subsequent iterations refined interoperability, addressed errata, and incorporated protocols for evolving hardware needs, such as networking, storage, and graphics. Version 2.1, released January 7, 2007, extended security with network authentication protocols and standardized disk partitioning for broader OS compatibility. By version 2.3.1 on April 8, 2011, the specification supported advanced boot policy enforcement, including mechanisms for image authentication essential for platform certification. Later releases emphasized incremental enhancements: version 2.4 in June 2013 added refined runtime services and device path handling; version 2.6 in January 2016 incorporated HTTP and TLS errata for network boot reliability; and version 2.7 in May 2017 addressed image execution and protocol clarifications. The specification continues to evolve, with version 2.8 released March 8, 2019, focusing on reserved feature stability; version 2.10 providing revision histories for errata like TLS updates; and the latest version 2.11 on November 21, 2024, streamlining implementations through consolidated protocols and reduced ambiguities in firmware-platform handoffs. These updates prioritize backward compatibility while enabling support for larger address spaces, modular drivers, and secure runtime environments, driven by empirical needs from OEM deployments and OS vendors rather than speculative features.

Architecture

Core Interfaces and Services

The EFI System Table serves as the primary interface for accessing UEFI's core services, providing pointers to the Boot Services table and Runtime Services table upon entry into UEFI applications or drivers. This table, defined in the UEFI Specification, also includes configuration data such as the firmware vendor, revision, and boot policy. Boot Services encompass functions callable only prior to the invocation of ExitBootServices() by the operating system loader, enabling dynamic operations during the pre-OS phase. Key Boot Services include memory allocation routines like AllocatePages() and AllocatePool(), which support typed and pooled memory requests essential for driver and module loading; handle and protocol management via InstallProtocolInterface() and LocateProtocol(), facilitating discovery and binding of device drivers to hardware; event and timer services such as CreateEvent() and WaitForEvent(), for signaling asynchronous operations like device readiness; and boot management functions including LoadImage() for executable image loading and StartImage() for execution initiation. Device path utilities, console I/O abstractions (e.g., Simple Text Input/Output Protocols), and bus/device abstraction layers further extend these services, promoting hardware independence. Runtime Services, in contrast, persist post-ExitBootServices(), accommodating OS runtime interactions with firmware through virtual address mappings that allow relocation without disrupting OS memory. These include variable services (GetVariable(), SetVariable(), and related functions) for non-volatile storage of settings like boot order in NVRAM; time services (GetTime(), SetTime()) interfacing with the real-time clock; virtual memory services (SetVirtualAddressMap(), ConvertPointer()) for firmware address translation; and miscellaneous functions such as ResetSystem() for platform resets and UpdateCapsule() for firmware updates. Hardware error record services append records to persistent storage for diagnostics. These interfaces ensure a standardized, extensible foundation, with Boot Services handling transient initialization and Runtime Services enabling ongoing firmware-OS coordination, as formalized in UEFI Specification version 2.10 released in 2021.

Protocols and Device Drivers

In UEFI, protocols define standardized interfaces through which firmware components, drivers, and applications interact, encapsulating services such as device initialization, I/O operations, and configuration management. Each protocol consists of a GUID-identified structure with function pointers and data fields, produced by drivers or core firmware and installed on handles in the UEFI handle database. Services like LocateProtocol() and InstallProtocol() enable runtime discovery and binding, promoting modularity over the monolithic interrupt-based approach of legacy BIOS. Device drivers in UEFI follow the UEFI Driver Model, a framework for managing driver lifecycles, binding, and resource allocation in the pre-boot environment. Every conforming driver produces at least one instance of the EFI_DRIVER_BINDING_PROTOCOL on its handle, which includes three core functions: Supported() to evaluate compatibility with a controller handle; Start() to bind and initialize the driver, producing additional protocols for the device; and Stop() to release resources and unbind. This protocol facilitates dynamic management by the firmware's driver model services, such as ConnectController(), allowing drivers to be loaded, dispatched, and unloaded without restarting the system. The model distinguishes between bus drivers, which abstract hardware buses (e.g., PCI or USB) and produce child handles for downstream devices via protocols like EFI_PCI_IO_PROTOCOL, and device drivers, which provide direct hardware access through class-specific protocols such as EFI_BLOCK_IO_PROTOCOL for storage or EFI_SIMPLE_NETWORK_PROTOCOL for networking. Drivers may also support optional protocols for diagnostics (EFI_DRIVER_DIAGNOSTICS_PROTOCOL) or human-readable naming (EFI_COMPONENT_NAME_PROTOCOL), enhancing manageability and debugging. This architecture ensures drivers remain portable across platforms, with binding decisions made at runtime based on device paths and supported protocols.

Firmware Phases and Modules

The UEFI Platform Initialization (PI) specification delineates the firmware boot process into distinct phases—Security (SEC), Pre-EFI Initialization (PEI), Driver Execution Environment (DXE), and Boot Device Selection (BDS)—each responsible for progressive hardware initialization and service provisioning leading to operating system handover. These phases employ modular components stored in firmware volumes to enable vendor-specific extensions while maintaining a standardized execution flow. The SEC phase constitutes the entry point post-reset, executing minimal code to configure essential processor resources, such as cache-as-RAM for temporary stack and heap, before invoking the PEI phase. It functions as the foundational root of trust, with limited modules focused on secure handover without persistent state. In the PEI phase, the PEI Foundation orchestrates the dispatch of Pre-EFI Initialization Modules (PEIMs) to initialize core silicon components, including permanent memory installation and creation of Hand-Off Blocks (HOBs) that encapsulate configuration data for subsequent phases. PEIMs communicate via the PEI Services Table and PEIM-to-PEIM Interfaces (PPIs), enabling modular handling of platform-specific hardware without reliance on full UEFI protocols; the PEI Dispatcher sequentially loads and executes these modules from firmware volumes until temporary RAM exhaustion signals completion, prompting transition via the DXE Initial Program Load PPI. The DXE phase introduces a comprehensive execution environment, dispatching DXE drivers—including UEFI drivers, applications, and combined modules—that abstract hardware through protocols and furnish UEFI Boot Services (e.g., memory allocation, image loading) and Runtime Services (e.g., variable persistence, timekeeping). The DXE Dispatcher manages dependency resolution and scheduling, while DXE Core provides foundational services; upon readiness, it installs the BDS Architectural Protocol to initiate boot policy enforcement. The BDS phase, integrated with DXE services, executes the Boot Manager to enumerate bootable devices, apply platform boot order policies, and launch selected EFI applications or OS loaders, establishing consoles en route. It handles boot option evaluation and fallbacks, culminating in the ExitBootServices call that virtualizes runtime services for OS consumption and releases control. Post-BDS, persistent runtime modules maintain ACPI and SMP tables accessible across reboots. Firmware modules, encompassing PEIMs for PEI and DXE drivers for later phases, are architected for dispatch by phase-specific mechanisms, promoting reusability and isolation; volumes aggregate these with GUID partitioning for secure loading.

Booting Process

Initialization Stages

The UEFI firmware initialization process follows a phased architecture defined in the UEFI Platform Initialization (PI) Specification, ensuring progressive hardware initialization and service availability prior to operating system handover. The process commences with the Security (SEC) phase, which serves as the initial entry point executed from ROM or flash memory upon power-on or reset. In this minimal environment, the SEC phase relocates the execution to a temporary RAM region, performs basic CPU initialization including caching and boot strap processor selection in multi-processor systems, and authenticates the subsequent firmware volume if secure boot mechanisms are enabled. This phase concludes by transferring control to the Pre-EFI Initialization (PEI) phase without providing higher-level EFI services. The PEI phase builds upon SEC by initializing permanent system memory and essential hardware components using modular Pre-EFI Initialization Modules (PEIMs). PEIMs, dispatched via a PEI Dispatcher, handle tasks such as memory controller configuration, basic chipset initialization, and temporary system management RAM allocation, producing Platform Initialization Pre-EFI Interfaces (PPIs) for inter-module communication. This phase operates in a resource-constrained manner, prioritizing silicon initialization over full device support, and culminates in memory initialization sufficient to host the subsequent phase's codebase. PEI modules are typically vendor-specific, allowing customization for diverse hardware platforms while adhering to the PI specification's framework. Following PEI, the Driver Execution Environment (DXE) phase performs the bulk of system configuration, loading DXE drivers and modules into initialized memory to establish a richer execution environment. The DXE Core initializes boot and runtime services, including memory management, protocol handling, and event scheduling, enabling the dispatch of drivers that initialize peripherals like storage controllers, network interfaces, and USB devices. This phase supports modular extensibility through GUID-defined protocols and handles transitions to runtime services that persist post-OS boot, such as timekeeping and non-volatile storage access. DXE concludes with the readiness of the system for boot device selection, having enumerated and connected most hardware resources. The Boot Device Selection (BDS) phase integrates with DXE to finalize boot preparation by invoking the BDS architectural protocol, which enumerates boot options from NVRAM variables and selects the appropriate loader or OS kernel. It connects console devices, processes platform-specific boot policies, and may emulate legacy BIOS if configured, before invoking the EFI Boot Manager to load the bootable image into memory and transfer control. This stage ensures orderly handover to the transient system load phase, where the OS loader assumes control, marking the end of firmware initialization. Throughout these stages, adherence to the PI specification maintains interoperability across implementations from vendors like Intel, AMD, and ARM platforms.

Booting Modes and Mechanisms

UEFI firmware supports two primary booting modes: native UEFI mode and legacy BIOS mode enabled through the Compatibility Support Module (CSM). In native UEFI mode, the firmware directly loads EFI applications, such as operating system bootloaders, from the EFI System Partition (ESP), a FAT32-formatted partition identified by a specific GUID on GPT-partitioned disks. The CSM mode, an optional emulation layer, allows UEFI systems to boot legacy BIOS-compatible operating systems by intercepting and emulating traditional 16-bit BIOS interrupts, though it is recommended to disable CSM for optimal security and performance in native UEFI environments. The UEFI Boot Manager serves as the core mechanism for initiating the boot process, functioning as a policy engine that selects and loads boot options based on architecturally defined global variables stored in non-volatile RAM (NVRAM). Key variables include BootOrder, which specifies the sequence of boot attempts, and individual Boot#### variables (where #### is a hexadecimal number), each containing details such as boot option descriptions, file paths to EFI executables on the ESP (typically under \EFI\BOOT\ or vendor-specific directories), and device handles. If no Boot#### variables are present, the firmware defaults to scanning the ESP for a fallback bootloader at \EFI\BOOT\BOOTX64.EFI (for x86-64 systems). During boot, the firmware's Boot Manager connects necessary drivers and protocols, then invokes the selected boot option using UEFI boot services like LoadImage and StartImage to execute the EFI application in physical memory. This process supports modular extensibility, allowing bootloaders to leverage UEFI runtime services post-handover. Legacy mode via CSM bypasses native services, instead chaining to a legacy boot sector on MBR-partitioned disks, which limits features like Secure Boot and larger disk support. Native UEFI mode, specified in version 2.10 of the UEFI standard released around 2021, enables faster initialization and direct hardware access without emulation overhead.

Secure Boot Integration

Secure Boot is a cryptographic verification mechanism integrated into the UEFI boot process to ensure that only authenticated firmware, drivers, bootloaders, and operating system loaders execute, thereby mitigating pre-boot malware such as rootkits and bootkits. Introduced in the UEFI Specification version 2.2 in November 2010, it builds upon public key infrastructure to establish a chain of trust from the firmware itself through to the handoff to the operating system. The feature requires platforms to implement signature verification during image loading phases, particularly in the Driver Execution Environment (DXE) for optional drivers and in the Boot Device Selection (BDS) phase for boot managers and OS loaders. The verification relies on four authenticated UEFI variables stored in non-volatile RAM (NVRAM): the Platform Key (PK), Key Exchange Key (KEK), authorized signature database (db), and forbidden signature database (dbx). The PK serves as the root of trust, an X.509 certificate or RSA-2048/SHA-256 key pair that authorizes updates to the KEK database, which in turn enables modifications to db and dbx via signatures from KEK entries. The db contains hashes, signatures, or public keys of permitted images, while dbx lists revoked ones to prevent execution of known vulnerable or malicious components. Before loading an executable PEI, DXE, or boot service driver image, the UEFI implementation computes its hash (typically SHA-256) and checks it against db for authorization and dbx for prohibition; unsigned or mismatched images are rejected unless Secure Boot is disabled. Secure Boot operates in three modes defined by NVRAM variables: Setup Mode (no PK enrolled, allowing key provisioning without enforcement), User Mode (PK present, full signature enforcement with restricted updates, enabled via the UEFI firmware setup utility), and Audit Mode (enforcement disabled but events logged for verification). The status of Secure Boot can be verified post-boot using operating system tools; for instance, on Linux, sudo mokutil --sb-state reports whether it is enabled. Platforms transition from Setup to User Mode upon PK enrollment, often during manufacturing, with rollback protection preventing downgrades to weaker firmware. For Windows compatibility, OEMs must provision keys per UEFI 2.3.1 Errata C, including Microsoft-issued certificates in db to verify the Windows Boot Manager, ensuring seamless integration on certified hardware. This integration extends to driver signing, where EFI drivers and option ROMs undergo similar checks, enhancing overall boot integrity but requiring OS vendors to sign their loaders accordingly.

Features

Graphics and Input Support

The Graphics Output Protocol (GOP) in UEFI enables native graphics rendering in the pre-boot environment by providing access to graphics hardware framebuffers and supporting mode selection for various resolutions and pixel formats, such as 32-bit RGB. This protocol, produced by UEFI-compliant graphics drivers, includes functions for querying available modes, setting the active mode, and performing bit-block transfers (blitting) for efficient image manipulation, facilitating features like firmware setup screens and boot splash images. GOP supersedes the older Universal Graphics Adapter (UGA) protocol and is required for platforms aiming to support high-resolution displays without legacy compatibility modes. For input support, UEFI defines protocols such as the Simple Text Input Protocol, which handles keystroke events from keyboards for console interactions, and the Simple Pointer Protocol for relative movements from devices like mice. The Absolute Pointer Protocol extends this to absolute positioning inputs, such as touchscreens, reporting coordinates directly within the display bounds. These protocols allow UEFI applications and drivers to receive real-time input events during boot phases, supporting both text-based and graphical interfaces. The Human Interface Infrastructure (HII) framework integrates these input protocols with graphics output to enable forms-based user interfaces for configuration, including support for localized strings, fonts, and device-specific input handling from USB Human Interface Devices (HID). HII drivers manage keyboard navigation, mouse pointing, and data entry in UEFI setup utilities, ensuring compatibility with standard HID class devices enumerated via USB boot services. This infrastructure, introduced in UEFI 2.1, promotes standardized, extensible input methods across diverse hardware platforms.

UEFI Shell and Built-in Applications

The UEFI Shell is a command-line interface environment provided within UEFI firmware, enabling users to interact with the system prior to loading an operating system. It supports scripting, file operations, device management, and hardware diagnostics during the boot services phase. Defined separately from the core UEFI Specification, the UEFI Shell Specification version 2.2, released on January 26, 2016, outlines its architecture, including support for environment variables, aliasing, and control flow structures such as if, for, while, and goto for automation. The shell accesses UEFI protocols for tasks like enumerating handles, mapping file systems, and loading EFI applications, facilitating pre-OS troubleshooting and configuration. It operates on block I/O devices and simple file systems, with commands like map to assign handles to aliases such as fs0: for EFI partitions. Implementations, such as those in the open-source EDK II project, compile the shell with configurable command sets for minimal or full environments. Built-in applications consist of integrated commands categorized by function:
  • File and directory operations: dir lists contents, copy and mv handle transfers and renames, del and rm remove files, type displays content, and edit provides a basic text editor.
  • Device and protocol management: devices and drivers enumerate connected devices and loaded drivers, connect and disconnect manage protocol bindings, pci and pcir inspect PCI devices and resources.
  • Memory and system utilities: memmap displays memory map, dmem dumps memory, reset reboots the system, stall introduces delays, and ver shows version information.
  • Scripting and environment: alias manages shortcuts, set and unset handle variables, echo outputs text, help provides command documentation with options like -verbose for details.
These commands execute as EFI applications within the shell, with help text generated from embedded metadata, ensuring portability across compliant implementations. The load command invokes external EFI binaries, extending functionality for custom diagnostics or bootloaders.

Update Mechanisms and Capsules

UEFI capsules serve as standardized binary containers for delivering firmware updates, configuration data, and other payloads between the operating system and platform firmware. Defined in the UEFI specification, a capsule includes a header with a Globally Unique Identifier (GUID) specifying its type—such as EFI_CAPSULE_HEADER for general updates or specific GUIDs for firmware management—and a variable-sized body encapsulating the update image, metadata like version numbers, and optional authentication structures. This format enables atomic updates to non-volatile storage, including flash memory, without requiring proprietary tools or interrupting runtime operations. The core update mechanism revolves around the UpdateCapsule runtime service, which allows authenticated callers—typically the OS loader or kernel—to pass one or more capsules to the firmware for deferred processing. To initiate an update, the OS stages the capsule binary on the EFI System Partition (ESP), a FAT-formatted volume accessible across resets, then invokes UpdateCapsule with parameters including the capsule array, size, and a reset type flag (e.g., EFI_RESET_WARM or EFI_RESET_COLD). Upon reset, the firmware's DXE phase detects and processes the capsules, validating payloads against criteria like version compatibility and digital signatures before applying changes, such as erasing and reprogramming flash blocks. This process supports both system firmware (e.g., core UEFI code) and device-specific images, with rollback protection often enforced via hardware fuses or version checks to prevent reversion to vulnerable states. Supporting protocols enhance targeting and management precision. The EFI System Resource Table (ESRT), an ACPI table exposed by firmware, enumerates updatable resources with details like firmware ID, current revision (e.g., a 32-bit integer), last attempted update status, and hardware ID for driver matching. Capsules reference ESRT entries via GUIDs to ensure updates apply only to compatible targets, mitigating risks from mismatched payloads. For modular device firmware, such as on expansion cards, the Firmware Management Protocol (FMP) provides methods like GetImageInfo, SetImage, and VerifyImage to query capabilities, authenticate signed images using asymmetric cryptography (e.g., RSA-2048 with SHA-256), and extract payloads without full installation. FMP payloads within capsules include authentication GUIDs and image attributes, enabling vendor-specific verification chains rooted in platform keys. Security features integrate with Secure Boot infrastructure, requiring capsules to be signed by trusted authorities, with firmware enforcing signature verification before dispatch. The specification mandates support for extensible authentication via GUID-partitioned capsules, allowing multiple images per capsule and progress reporting through variables like EFI_CAPSULE_RESULT_VAR_NAME. Implementations must handle failures gracefully, such as partial applies or power-loss scenarios, often logging errors in non-volatile storage for OS retrieval. While effective for reducing update complexity across OSes like Windows (via driver packages processed at boot) and Linux (via fwupd tooling), adoption varies by vendor, with open-source firmware like TianoCore providing reference FMP and capsule parsers. Challenges include ensuring atomicity in multi-image updates and defending against capsule injection attacks, addressed through runtime service access controls and key provisioning.

Compatibility

Hardware and Processor Support

UEFI specifications define runtime environment and boot services tailored to specific processor instruction set architectures (ISAs), with core protocol definitions provided for IA-32, x86-64 (also known as X64 or AMD64), IA-64 (Itanium), ARM AArch32, and ARM AArch64. These architectures enable UEFI firmware to initialize hardware components such as memory controllers, storage devices, and peripherals prior to operating system handoff, with the specification remaining processor-agnostic through the use of portable EFI Byte Code (EBC) for drivers and applications that can execute across supported ISAs without recompilation. Implementations predominate on x86-64 processors from Intel and AMD, which power the majority of personal computers and servers since the mid-2000s, as these platforms require UEFI for features like GUID Partition Table (GPT) support on disks exceeding 2 terabytes and native USB booting without legacy BIOS emulation. ARM-based systems, including smartphones, tablets, and embedded devices from vendors like Qualcomm and Apple, leverage UEFI (often via adaptations like ARM Trusted Firmware) for faster initialization and secure boot chains, with AArch64 enabling 64-bit addressing for large-scale servers. IA-64 support, historically used in enterprise servers, has diminished with Itanium's phase-out by Intel in 2021, though legacy firmware persists in specialized environments. Emerging architectures like RISC-V have gained experimental UEFI compatibility through open-source projects such as EDK II, allowing firmware development for low-power IoT devices and high-performance computing prototypes, though commercial adoption remains limited as of 2025. Hardware platforms must include a compatible chipset and non-volatile storage (e.g., SPI flash) for firmware, with UEFI requiring at least 64 KB of runtime memory consistency across power states and support for ACPI tables for advanced configuration. Compatibility extends to peripherals via standardized protocols like GOP for graphics output and USB class drivers, but older hardware predating 2005 (e.g., pre-Core 2 Intel or early AMD64 motherboards) often lacks native UEFI, relying instead on CSM for BIOS legacy mode.

Operating System Integration

Modern operating systems integrate with UEFI firmware primarily through bootloaders executed as EFI applications stored on the EFI System Partition (ESP), a FAT32-formatted partition required for UEFI booting. These bootloaders, compiled in the Portable Executable (PE)/Common Object File Format (COFF), leverage UEFI boot services to load the OS kernel, device drivers, and initial ramdisk before the OS exits boot services and assumes control of hardware. UEFI runtime services, such as timekeeping and non-volatile storage access, remain available post-handoff for OS queries, enabling features like ACPI table retrieval without firmware reinitialization. Windows integrates UEFI via its Boot Manager (bootmgfw.efi), which parses the Boot Configuration Data (BCD) store on the ESP to chainload the Windows Boot Loader (winload.efi or winload.exe for legacy compatibility). Since Windows Vista, 64-bit installations support UEFI mode, but Windows 8 and later mandate it for Secure Boot and features like BitLocker full-volume encryption, using GUID Partition Table (GPT) for disks exceeding 2 TB. The process begins with UEFI verifying the boot chain's digital signatures against platform keys before loading the OS, reducing rootkit risks during initialization. Linux distributions achieve UEFI integration through bootloaders like GRUB2, installed as an EFI stub executable (grubx64.efi) in the ESP's /EFI/ directory, with efibootmgr managing firmware boot variables. GRUB2 supports direct kernel loading via EFI protocols, handling GPT partitioning and modular drivers for filesystems like ext4, often requiring Secure Boot disablement or signed shims for compatibility. Distributions such as Red Hat Enterprise Linux and Fedora configure GRUB to detect and chainload multiple kernels, supporting both UEFI and legacy BIOS via hybrid MBR setups on transitional hardware. Apple's macOS employs a customized EFI implementation on its hardware, booting from an EFI partition via boot.efi, which loads the kernelcache from the macOS volume using HFS+/APFS filesystems. This EFI variant, derived from early UEFI standards, integrates with Apple's T2 security chip on newer models for verified boot chains, though it deviates from full UEFI compliance by prioritizing proprietary extensions over open specifications. Firmware updates, distributed via macOS, patch EFI binaries to address vulnerabilities without requiring OS reinstallation.

Legacy Emulation and Limitations

The Compatibility Support Module (CSM) within UEFI firmware enables backward compatibility by emulating a legacy BIOS environment, allowing systems to boot traditional Master Boot Record (MBR)-based operating systems and applications that rely on 16-bit real-mode interrupts. When CSM is activated, the UEFI boot process intercepts legacy BIOS calls (such as INT 13h for disk access) and translates them via an emulation layer, effectively switching the firmware into a BIOS-like mode to load non-UEFI bootloaders from the MBR. This module, defined in the UEFI Platform Initialization (PI) specification, supports older hardware peripherals and software without native EFI support, but it operates as an optional subsystem rather than a core UEFI feature. Despite facilitating compatibility, CSM imposes significant limitations on UEFI's native capabilities. Secure Boot, which verifies bootloaders against cryptographic signatures, cannot function in CSM mode, as the emulation bypasses UEFI's runtime services and driver model, exposing systems to unverified code execution during initialization. Additionally, reliance on MBR partitioning restricts disk support to a maximum of 2 terabytes, precluding the use of GUID Partition Table (GPT) for larger volumes, and disables advanced UEFI features like fast boot initialization or network booting via EFI protocols. Performance drawbacks arise from CSM's 16-bit emulation overhead, which contrasts with UEFI's 64-bit native mode and can result in slower boot times due to sequential hardware probing and the absence of parallel driver loading. Security analyses highlight increased vulnerability to bootkit attacks in legacy mode, lacking UEFI's standardized update mechanisms and memory protections, prompting recommendations to disable CSM for native operation where possible. Hardware vendors have begun phasing out CSM; for instance, Intel discontinued support in new platforms starting around 2020, reflecting a shift toward pure UEFI to mitigate these emulation-induced constraints.

Implementations

Reference and Open-Source Implementations

The reference implementation of the UEFI specification is EDK II, developed under the TianoCore community as a modern, feature-rich, cross-platform firmware development environment for UEFI and UEFI Platform Initialization (PI) specifications. EDK II, formerly known as the EFI Development Kit II, originated from Intel's Tiano project and supports building firmware for architectures including IA-32, x64, ARM, and AArch64, enabling pre-OS execution environments compliant with UEFI 2.10 as of 2024. The codebase is hosted on GitHub, where it undergoes continuous development with contributions from industry participants such as Intel, HPE, and Microsoft, under a permissive BSD-like license that facilitates vendor adoption and modification. EDK II provides core UEFI components, including boot services, runtime services, and protocol interfaces for device drivers and applications, serving as the foundation for custom firmware builds on platforms like the Arm Fixed Virtual Platform (FVP) and Juno development boards. It includes tools for building UEFI applications, shell environments, and Secure Boot support, with modular packages for graphics output, network stack, and file systems, allowing developers to compile minimal or full-featured firmware images using compilers like GCC or Visual Studio. Hardware platforms utilizing EDK II-based firmware include the MinnowBoard Max/Turbot, Aaeon UpSquared, and Intel Galileo Gen 2, demonstrating its applicability beyond proprietary vendor silos. Beyond EDK II, open-source implementations include U-Boot's UEFI subsystem, which integrates UEFI boot services and runtime APIs primarily for AArch64 and x86 systems to meet the Embedded Binary Boot Requirements (EBBR) profile, activated via configuration options like CONFIG_CMD_BOOTEFI. This enables U-Boot to function as a UEFI-compliant bootloader on embedded devices, supporting features like GPT partitioning and EFI capsule updates, though it emphasizes lightweight execution over the full EDK II feature set. These implementations prioritize verifiable compliance with UEFI standards through open codebases, reducing reliance on opaque vendor binaries and enabling community auditing for security and compatibility.

Vendor-Specific Firmware

Vendor-specific UEFI firmware implementations are proprietary extensions of the UEFI specification developed by specialized providers, including American Megatrends (AMI) with Aptio, Insyde Software with H2O, and Phoenix Technologies with SecureCore, which original equipment manufacturers (OEMs) customize for their hardware platforms. These implementations incorporate core UEFI compliance while adding tailored drivers, configuration interfaces, and proprietary modules to initialize specific chipsets, peripherals, and management features. AMI's Aptio V UEFI firmware supports UEFI Specification version 2.8 and Platform Initialization (PI) Specification version 1.7, enabling fast boot times, touch interface compatibility, and advanced security including custom TPM 2.0 modules and firmware signing servers. It facilitates secure updates via the AMI Firmware Utility (AFU) and has been deployed in platforms like NVIDIA's DGX Spark AI supercomputer and Qualcomm Snapdragon compute systems as of 2025. InsydeH2O UEFI BIOS emphasizes platform security for client PCs and servers, integrating Secured-core PC compliance, Secure Boot, and TPM implementations, with support for Arm architectures and high-performance computing environments. It provides comprehensive specification adherence and has been used in embedded servers and AI infrastructure, offering reliability through lab-tested modules. Phoenix SecureCore Technology, in its fourth generation as of documented releases, enhances UEFI with features for system security, connectivity, and cross-device compatibility, including EDK II integration for modular development. OEMs further differentiate these bases through hardware-specific adaptations; for example, Dell's PowerEdge servers using AMI or Insyde firmware allow Secure Boot customization to remove default certificates and enroll custom keys, reducing reliance on vendor-provided roots as of 2023 implementations. Lenovo systems, often based on InsydeH2O, provide in-setup Secure Boot mode selection and key management options for enterprise deployments. Such customizations enable tailored boot processes, logo displays from EFI partitions, and integration with proprietary tools, though they introduce variability in user interfaces and update mechanisms across vendors.

Cross-Platform Adaptations

The UEFI specification maintains processor architecture-agnosticism, supporting adaptations for x86, x64, ARM, and Itanium platforms through modular services that abstract hardware dependencies. This enables firmware developers to implement core boot processes, driver models, and runtime services consistently across architectures, while architecture-specific bindings in the UEFI Platform Initialization (PI) specification handle initialization phases like Pre-EFI Initialization (PEI) and Driver Execution Environment (DXE). ARM adaptations emphasize embedded and SoC environments, where UEFI integrates with ACPI extensions for power management and device enumeration on ARMv8 and later processors. U-Boot bootloader added UEFI compatibility for 32-bit and 64-bit ARM in August 2016, facilitating native booting of UEFI-aware operating systems without legacy BIOS emulation. Microsoft requires UEFI for Windows desktop editions on ARM SoCs to enforce secure boot and capsule updates, ensuring platform uniformity in client devices certified since 2012. RISC-V adaptations, targeting open hardware ecosystems, involve custom handling of PECOFF image relocation and temporary memory allocation during early boot, as prototyped in UEFI Plugfest demonstrations from March 2016. Linux kernel support for RISC-V UEFI, including EFI stub and runtime services, merged in August 2020 via patches adding architecture-specific EFI initialization. The TianoCore EDK II open-source framework supports building UEFI firmware for ARM, x86, and RISC-V targets, promoting reusable modules across these architectures. Recent expansions, such as UEFI 2.11's addition of LoongArch support in December 2024, illustrate continued evolution for non-Western processor designs.

Security

Secure Boot Fundamentals

Secure Boot is a verification mechanism defined in the UEFI specification that ensures only trusted software executes during system initialization by cryptographically checking the signatures of boot components against predefined keys and databases. This process begins after the firmware loads the boot manager or EFI application, where each executable's digital signature must match entries in the allowed signatures database (db) or be signed by a permitted key. Unauthorized code, such as rootkits or modified bootloaders, is rejected, thereby establishing a chain of trust from the firmware to the operating system kernel. The Secure Boot policy relies on a hierarchical key structure stored as UEFI variables in non-volatile memory. The Platform Key (PK) serves as the root of trust, authenticating updates to subordinate keys and databases; it is typically provisioned by the original equipment manufacturer (OEM) during production. The Key Exchange Keys (KEK) database contains intermediate keys signed by the PK, which in turn authorize modifications to the db and the revoked signatures database (dbx). The db holds hashes or signatures of permitted executables, including those from operating system vendors like Microsoft, while dbx lists revoked items to block known vulnerabilities or compromised code. Implementation operates in modes such as Setup Mode for initial key enrollment, User Mode for standard operation with fixed PK, and Custom Mode allowing db modifications without altering PK. During boot, the firmware enforces signature checks unless explicitly disabled in the UEFI settings, though many platforms ship with Secure Boot enabled by default to comply with requirements for certified operating systems. This feature was formalized in UEFI Specification version 2.3.1 in 2011, gaining widespread adoption with Windows 8 certification mandates in 2012.

Empirical Security Benefits

UEFI Secure Boot establishes a cryptographic chain of trust from firmware to the operating system loader, verifying digital signatures to prevent execution of unauthorized boot code, which has empirically curtailed the prevalence of bootkit malware that dominated legacy BIOS environments. Prior to widespread UEFI adoption around 2011–2012, over 6 million MBR-infecting malware samples were known by 2014, enabling persistent rootkits; post-Secure Boot, such bootkits have become markedly less common due to mandatory signature enforcement blocking unsigned or tampered loaders. In the 2017 Petya/NotPetya ransomware campaign, which targeted boot records for persistence, Microsoft telemetry indicated that UEFI systems with Secure Boot enabled resisted full infection, facilitating recovery via clean boot media and startup repair, as the malware could not override verified boot components. This resilience contrasted with legacy systems, where MBR/VBR modifications led to irrecoverable states without external intervention. The U.S. National Security Agency assesses Secure Boot as providing verifiable malware defenses through signed binaries and whitelisted hashes, superior to legacy BIOS's absence of standardized boot integrity checks, with practical benefits observed in reduced insider and supply-chain boot compromises when keys are customized. Configurations maintaining default Microsoft or OEM keys have similarly limited pre-OS infections in enterprise deployments since rollout. Secure Boot also facilitates kernel-level anti-cheat systems in competitive multiplayer online games, which require a verified boot chain to prevent tampering with software designed to evade cheating detection.

Best Practices

To enhance UEFI security, enable Secure Boot in enforcing mode and regularly update firmware from the manufacturer. Manage keys by verifying PK, KEK, db, and dbx contents using tools like Confirm-SecureBootUEFI on Windows or efi-readvar on Linux, ensuring Microsoft and manufacturer certificates are included while avoiding test keys. Set a strong password for the UEFI setup utility to restrict access. Disable the Compatibility Support Module (CSM) if unnecessary to prevent legacy boot bypasses. Monitor firmware logs and runtime behavior with EDR or XDR tools supporting UEFI visibility.

Vulnerabilities and Real-World Bypasses

UEFI firmware has been subject to numerous vulnerabilities that undermine its security model, particularly Secure Boot, which relies on cryptographic verification of boot components to prevent unauthorized code execution. These flaws often stem from implementation errors in firmware parsing routines, variable handling, or boot process logic, enabling attackers with physical access or pre-boot privileges to inject malicious code. Empirical evidence from security research indicates that such vulnerabilities persist due to the complexity of UEFI's modular architecture and inconsistent mitigations across vendors, with real-world exploits demonstrating persistence below the operating system level. One prominent example is BlackLotus, a UEFI bootkit first analyzed in March 2023, which exploits CVE-2022-21894—a flaw in the Windows Boot Manager allowing arbitrary code execution—and CVE-2023-24932, enabling Secure Boot bypass via manipulation of the Machine Owner Key (MOK) without user interaction. This bootkit achieves persistence by loading malicious drivers during the boot phase, evading detection by operating in firmware space, and has been confirmed in the wild through sales on underground forums and targeted deployments. Microsoft issued mitigations in April 2023, including boot manager updates and registry configurations to block vulnerable paths, but incomplete firmware updates leave many systems exposed. LogoFAIL, disclosed in December 2023, comprises over two dozen vulnerabilities (e.g., CVE-2023-40238) in UEFI image parsing libraries from vendors like AMI, Insyde, and Phoenix, used for rendering vendor logos during boot. Attackers can craft malformed BMP or PNG images to trigger buffer overflows or heap corruption, executing code prior to Secure Boot validation, affecting systems from Lenovo, Dell, and others regardless of Secure Boot state. CERT issued VU#811862 highlighting local privileged access requirements, but chainable exploits amplify remote risks; mitigations involve firmware patches, though adoption lags due to vendor fragmentation. More recent bypasses include Hydrophobia (June 2025), exploiting UEFI's lax enforcement of volatile variable checks, allowing non-volatile persistence of Secure Boot bypass keys via NVRAM manipulation, and CVE-2024-7344 (January 2025), a logic flaw in boot policy enforcement permitting unsigned code execution on most UEFI systems. ESET reported HybridPetya ransomware variants in September 2025 leveraging similar pre-boot compromises to encrypt disks post-bypass. These cases underscore causal links between unpatched firmware and elevated attack surfaces, with research from Binarly and Eclypsium revealing systemic gaps in volatility and signature validation. Vendor-specific issues, such as multiple SMM exploits in Gigabyte firmware (July 2025), further expose UEFI to privilege escalation, where attackers gain ring -2 access for undetectable persistence. Tools like Damn Vulnerable UEFI (September 2024) simulate these for testing, highlighting empirical deficiencies in mitigations like outdated microcode against transient execution attacks. Overall, while Secure Boot reduces low-level threats, real-world bypasses demonstrate its limitations against sophisticated firmware flaws, necessitating rigorous vendor auditing and timely updates.

Criticisms

Technical Complexity and Firmware Bugs

UEFI's architecture imposes greater technical complexity than legacy BIOS primarily through its modular driver model, support for runtime services across OS transitions, and integration of advanced protocols like IPv6 networking and secure boot mechanisms, all implemented in a 64-bit environment with potential for graphical user interfaces and shell environments. This contrasts with BIOS's simpler 16-bit real-mode operation and fixed ROM-based initialization, limiting UEFI implementations to larger, more intricate codebases that amplify the risk of defects arising from interdependent components and custom vendor extensions. Reference implementations such as TianoCore's EDK II highlight these challenges, with its extensive C codebase—spanning thousands of modules for boot services, device protocols, and platform-specific adaptations—frequently yielding bugs documented in public repositories and security advisories. A prominent example is the PixieFail vulnerabilities disclosed on January 16, 2024, comprising nine flaws in EDK II's NetworkPkg IPv6 stack, which could enable remote code execution, denial-of-service, or DNS cache poisoning during pre-OS network phases on affected systems. These issues stem from buffer overflows, improper input validation, and protocol mishandling, illustrating how UEFI's networked pre-boot features, absent in BIOS, expand the vulnerability surface. Vendor firmware exacerbates complexity through proprietary modifications atop reference code, often resulting in unpatched bugs or misconfigurations that propagate across hardware ecosystems. In July 2025, four critical vulnerabilities were reported in GIGABYTE UEFI implementations across over 240 motherboard models, allowing attackers to deploy persistent bootkits evading OS reinstalls and antivirus detection via flaws in firmware update mechanisms and authentication. Such defects frequently manifest as boot loops, device initialization failures, or runtime crashes, with broader impacts including reduced system reliability and elevated exploit risks in enterprise deployments. Poor handling of memory protections and mitigations in many implementations further compounds these problems, as evidenced by analyses showing inconsistent enforcement of policies like stack canaries or address space layout randomization in UEFI phases. Overall, while UEFI's extensibility drives modern computing capabilities, its inherent complexity demands rigorous auditing to mitigate firmware bugs that undermine platform integrity.

Secure Boot and User Control Debates

Secure Boot, a core UEFI feature, verifies the digital signatures of bootloaders and operating system kernels against a database of trusted public keys stored in the firmware, aiming to establish a chain of trust from the initial firmware execution. Proponents argue this mechanism significantly mitigates boot-time malware infections by preventing unauthorized code from executing early in the boot process, thereby enhancing system integrity without inherently restricting user choice, as most implementations allow users to disable the feature or enroll custom keys via firmware settings. However, critics contend that Secure Boot often functions as "restricted boot," limiting users' ability to run unmodified free software or custom operating systems, particularly when vendors ship devices with pre-enrolled Microsoft keys that prioritize Windows compatibility and complicate alternative OS installations. The debate intensified around 2011-2012 with the rollout of UEFI on PCs, as Microsoft's requirement for Secure Boot certification in Windows 8 prompted concerns over potential exclusion of non-Windows systems. Free software advocates, including the Free Software Foundation, argued that without full user control over key revocation and enrollment—or a straightforward disable option—Secure Boot undermines software freedom by enforcing vendor-defined trust models that could evolve into proprietary lock-in. In response, Microsoft collaborated with Linux distributions to provide signed bootloaders via the shim project, enabling Secure Boot compatibility for Fedora and Ubuntu since 2012, demonstrating that user-desired multi-OS support remains feasible when vendors prioritize interoperability. Nonetheless, practical barriers persist: enrolling personal keys requires navigating firmware interfaces that vary by OEM, often demanding technical expertise, and some devices impose supervisor passwords or omit clear disable toggles, effectively reducing user agency. Empirical evidence underscores tensions between security gains and control trade-offs. While Secure Boot has thwarted rudimentary bootkit attacks by raising the verification bar, real-world bypasses—such as those exploiting flawed vendor key management—reveal implementation flaws that erode its protections without empowering users. For instance, a 2024 analysis by Binarly identified Secure Boot compromises on over 200 models from Acer, Dell, and others due to reused or leaked private keys, allowing attackers to forge signatures while users faced no recourse short of firmware updates often delayed by OEMs. Critics like Richard Stallman have highlighted this as a vector for remote control, where centralized key authorities could theoretically revoke user-chosen software, prioritizing corporate interests over individual autonomy, though no such widespread revocations have occurred as of 2025. Defenders counter that user-managed keys preserve control, and disabling Secure Boot remains an explicit option in standards-compliant firmware, framing restrictions as user-configurable safeguards rather than impositions. These debates reflect broader philosophical divides: causal analyses suggest Secure Boot's value hinges on robust key hygiene and user-accessible revocation, yet vendor incentives—driven by compliance with platforms like Windows—often prioritize ease of certification over granular control, leading to uneven experiences. Ongoing UEFI Forum efforts aim to standardize key escrow and update mechanisms, but skepticism persists among open-source communities wary of ecosystem dependencies that could stifle innovation or enforce attestation beyond boot verification.

Closed Ecosystem and Vendor Dependencies

UEFI's ecosystem, while standardized by the UEFI Forum—a consortium dominated by major hardware and software vendors including Intel, AMD, Microsoft, and OEMs like Dell and Lenovo—relies heavily on proprietary implementations that limit interoperability and user autonomy. Although the UEFI specification itself is publicly available for development, most firmware deployments are closed-source products from a handful of vendors such as American Megatrends (AMI), Insyde, and Phoenix Technologies, customized for specific hardware platforms. This proprietary structure creates dependencies on these vendors for firmware updates, bug fixes, and feature extensions, as end-users cannot easily inspect, modify, or replace core components without risking system instability or voiding warranties. A primary criticism stems from Secure Boot's integration, where platform keys (PK) and signature databases (DB) are managed by OEMs and firmware providers, often hardcoded or poorly secured, fostering a closed chain of trust that prioritizes vendor control over flexibility. For instance, the 2024 PKfail vulnerability exposed how over 200 models from vendors including Acer, Dell, Gigabyte, Intel, and Lenovo shipped with unrevokable, factory-generated keys embedded in firmware, undermining Secure Boot's integrity by allowing persistent malware without user recourse. Such dependencies amplify risks, as firmware vendors rarely implement robust key rotation or revocation mechanisms, leaving systems vulnerable to supply-chain compromises that affect entire product lines. This vendor-centric model exacerbates lock-in, particularly for alternative operating systems or custom bootloaders, requiring shims or manual key enrollment that still hinge on OEM-provided tools and may not survive firmware updates. Critics argue that the opacity of these implementations—lacking open-source alternatives at scale—hinders independent auditing and perpetuates a fragmented ecosystem where hardware longevity is tied to vendor support cycles, often ending prematurely for older devices. Empirical evidence from repeated firmware flaws, such as those in image parsing libraries across multiple vendors, underscores how proprietary silos delay mitigations and concentrate power in few hands, potentially enabling restrictive policies without broad consensus.

References

Add your contribution
Related Hubs
User Avatar
No comments yet.