| UEFI, the Unified Extensible Firmware Interface, is a specification |
| governing the behaviours of compatible firmware interfaces. It is |
| maintained by the UEFI Forum - http://www.uefi.org/. |
| |
| UEFI is an evolution of its predecessor 'EFI', so the terms EFI and |
| UEFI are used somewhat interchangeably in this document and associated |
| source code. As a rule, anything new uses 'UEFI', whereas 'EFI' refers |
| to legacy code or specifications. |
| |
| UEFI support in Linux |
| ===================== |
| Booting on a platform with firmware compliant with the UEFI specification |
| makes it possible for the kernel to support additional features: |
| - UEFI Runtime Services |
| - Retrieving various configuration information through the standardised |
| interface of UEFI configuration tables. (ACPI, SMBIOS, ...) |
| |
| For actually enabling [U]EFI support, enable: |
| - CONFIG_EFI=y |
| - CONFIG_EFI_VARS=y or m |
| |
| The implementation depends on receiving information about the UEFI environment |
| in a Flattened Device Tree (FDT) - so is only available with CONFIG_OF. |
| |
| UEFI stub |
| ========= |
| The "stub" is a feature that extends the Image/zImage into a valid UEFI |
| PE/COFF executable, including a loader application that makes it possible to |
| load the kernel directly from the UEFI shell, boot menu, or one of the |
| lightweight bootloaders like Gummiboot or rEFInd. |
| |
| The kernel image built with stub support remains a valid kernel image for |
| booting in non-UEFI environments. |
| |
| UEFI kernel support on ARM |
| ========================== |
| UEFI kernel support on the ARM architectures (arm and arm64) is only available |
| when boot is performed through the stub. |
| |
| When booting in UEFI mode, the stub deletes any memory nodes from a provided DT. |
| Instead, the kernel reads the UEFI memory map. |
| |
| The stub populates the FDT /chosen node with (and the kernel scans for) the |
| following parameters: |
| ________________________________________________________________________________ |
| Name | Size | Description |
| ================================================================================ |
| linux,uefi-system-table | 64-bit | Physical address of the UEFI System Table. |
| -------------------------------------------------------------------------------- |
| linux,uefi-mmap-start | 64-bit | Physical address of the UEFI memory map, |
| | | populated by the UEFI GetMemoryMap() call. |
| -------------------------------------------------------------------------------- |
| linux,uefi-mmap-size | 32-bit | Size in bytes of the UEFI memory map |
| | | pointed to in previous entry. |
| -------------------------------------------------------------------------------- |
| linux,uefi-mmap-desc-size | 32-bit | Size in bytes of each entry in the UEFI |
| | | memory map. |
| -------------------------------------------------------------------------------- |
| linux,uefi-mmap-desc-ver | 32-bit | Version of the mmap descriptor format. |
| -------------------------------------------------------------------------------- |