| 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. | |
| -------------------------------------------------------------------------------- |