Kyle Swenson | 8d8f654 | 2021-03-15 11:02:55 -0600 | [diff] [blame] | 1 | UEFI, the Unified Extensible Firmware Interface, is a specification |
| 2 | governing the behaviours of compatible firmware interfaces. It is |
| 3 | maintained by the UEFI Forum - http://www.uefi.org/. |
| 4 | |
| 5 | UEFI is an evolution of its predecessor 'EFI', so the terms EFI and |
| 6 | UEFI are used somewhat interchangeably in this document and associated |
| 7 | source code. As a rule, anything new uses 'UEFI', whereas 'EFI' refers |
| 8 | to legacy code or specifications. |
| 9 | |
| 10 | UEFI support in Linux |
| 11 | ===================== |
| 12 | Booting on a platform with firmware compliant with the UEFI specification |
| 13 | makes it possible for the kernel to support additional features: |
| 14 | - UEFI Runtime Services |
| 15 | - Retrieving various configuration information through the standardised |
| 16 | interface of UEFI configuration tables. (ACPI, SMBIOS, ...) |
| 17 | |
| 18 | For actually enabling [U]EFI support, enable: |
| 19 | - CONFIG_EFI=y |
| 20 | - CONFIG_EFI_VARS=y or m |
| 21 | |
| 22 | The implementation depends on receiving information about the UEFI environment |
| 23 | in a Flattened Device Tree (FDT) - so is only available with CONFIG_OF. |
| 24 | |
| 25 | UEFI stub |
| 26 | ========= |
| 27 | The "stub" is a feature that extends the Image/zImage into a valid UEFI |
| 28 | PE/COFF executable, including a loader application that makes it possible to |
| 29 | load the kernel directly from the UEFI shell, boot menu, or one of the |
| 30 | lightweight bootloaders like Gummiboot or rEFInd. |
| 31 | |
| 32 | The kernel image built with stub support remains a valid kernel image for |
| 33 | booting in non-UEFI environments. |
| 34 | |
| 35 | UEFI kernel support on ARM |
| 36 | ========================== |
| 37 | UEFI kernel support on the ARM architectures (arm and arm64) is only available |
| 38 | when boot is performed through the stub. |
| 39 | |
| 40 | When booting in UEFI mode, the stub deletes any memory nodes from a provided DT. |
| 41 | Instead, the kernel reads the UEFI memory map. |
| 42 | |
| 43 | The stub populates the FDT /chosen node with (and the kernel scans for) the |
| 44 | following parameters: |
| 45 | ________________________________________________________________________________ |
| 46 | Name | Size | Description |
| 47 | ================================================================================ |
| 48 | linux,uefi-system-table | 64-bit | Physical address of the UEFI System Table. |
| 49 | -------------------------------------------------------------------------------- |
| 50 | linux,uefi-mmap-start | 64-bit | Physical address of the UEFI memory map, |
| 51 | | | populated by the UEFI GetMemoryMap() call. |
| 52 | -------------------------------------------------------------------------------- |
| 53 | linux,uefi-mmap-size | 32-bit | Size in bytes of the UEFI memory map |
| 54 | | | pointed to in previous entry. |
| 55 | -------------------------------------------------------------------------------- |
| 56 | linux,uefi-mmap-desc-size | 32-bit | Size in bytes of each entry in the UEFI |
| 57 | | | memory map. |
| 58 | -------------------------------------------------------------------------------- |
| 59 | linux,uefi-mmap-desc-ver | 32-bit | Version of the mmap descriptor format. |
| 60 | -------------------------------------------------------------------------------- |