Bootloader to OS with Unified Extensible Firmware Interface (UEFI)
Unified Extensible Firmware Interface (UEFI) is a specification detailing an interface that helps hand off control of the system for the pre-boot environment (i.e.: after the system is powered on, but before the operating system starts) to an operating system, such as Windows or Linux. UEFI aims to provides a clean interface between operating systems and platform firmware at boot time, and supports an architecture-independent mechanism for initializing add-in cards.
UEFI will overtime replace vendor-specific BIOS. It also allows for fast boot and support for large hard drives (> 2.2 TB).
There are several documents fully defining the UEFI Specification, API and testing requirements:
- The UEFI Specification (version 2.3.1) describes an interface between the operating system (OS) and the platform firmware. It describes the requirements for the following components, services and protocols:
Boot Manager Protocols – Compression Algorithm Specification EFI System Table Protocols – ACPI Protocols GUID Partition Table (GPT) Disk Layout EFI Byte Code Virtual Machine Services — Boot Services Network Protocols – SNP, PXE and BIS Services — Runtime Services Network Protocols — Managed Network Protocols — EFI Loaded Image Network Protocols — VLAN and EAP Protocols — Device Path Protocol Network Protocols —TCP, IP, IPsec, FTP and Configurations Protocols — UEFI Driver Model Network Protocols – ARP and DHCP Protocols — Console Support Network Protocols — UDP and MTFTP Protocols – Media Access Security – Secure Boot, Driver Signing and Hash Protocols – PCI Bus Support Human Interface Infrastructure Overview Protocols — SCSI Driver Models and Bus Support HII Protocols Protocols – iSCSI Boot HII Configuration Processing and Browser Protocol Protocols — USB Support User Identification Protocols – Debugger Support Firmware Management Protocol
- The UEFI Platform Initialization Specification (version 1.2) is composed of 5 documents which defines the pre EFI initialization core interface, the driver execution environment core interface, the shared architectural elements, the system management mode core interface and the standards to be used with the Platform Initialization (PI) specifications.
- The UEFI Shell Specification (Version 2.0) provides an API, a command prompt and a rich set of
commands that extend and enhance the UEFI Shell’s capability.
- The UEFI Platform Initialization Distribution Packaging Specification (Version 1.0) defines the overall architecture and external interfaces that are required for distribution of UEFI/PI source and binary files.
- The UEFI Self Certification Test (SCT) Package provides the tools to allow companies or individuals who implement UEFI to test their products and services. It contains 6 files:
- ReleaseNote.txt – Release note for the entire package
- UefiSctEdkII-Dev.zip – UEFI SCT agent source package.
- Ems-Dev.zip – Ems source package.
- IHV-SCT_Binary.zip – Toolset for the Independent Hardware Vendors(IHV) to validate UEFI implementations on IA32, Itanium Processor Family (IPF) and EM64T based platforms for compliance to the UEFI Specification.
- UEFI-SCT_Binary.zip – Toolset with two usage models: One is native mode which is invoked as an EFI application SCT from local EFI Shell, the other is passive mode which executes
UEFI SCT Agent in EFI Shell and runs all test cases on UEFI Management side (EMS).
- SCT_1_1_Specs.zip – SCT Specifications 1.1
This is a rather complex specification, as all documents comprise several thousand pages.
Current UEFI Implementations and Resources.
Many (Most?) operating systems are now UEFI compliant. For example, GRUB2 and Linux follow the UEFI specifications. Here’s a non-exhaustive list of UEFI compliant products: Windows 7, Windows Server 2008 R2, Ubuntu (10.04 LTS and greater), Meego, Redhat, Suse, Fedora, VMWare etc…
Tianocore is an open source implementation of UEFI specification and provides the “Intel EDK II Application Development Kit for including the Standard C Libraries in UEFI Shell Applications”.
Linaro (Linux for ARM) also considers work on an UEFI implementation, as it is apparently very important for ARM servers and virtualization companies (such as Citrix). For details about Linaro UEFI implementation, please visit: https://blueprints.launchpad.net/linaro/+spec/linaro-kernel-o-uefi
For further information, Intel also recommended those two books in one of their presentations:
- Harnessing the UEFI Shell: Moving the Platform Beyond DOS
- Beyond BIOS: Developing with the Unified Extensible Firmware Interface 2nd Edition