The Unified Extensible Firmware Interface (UEFI)

================================================
The Unified Extensible Firmware Interface (UEFI)
================================================

> 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, the Unified Extensible Firmware Interfaceは、互換性のあるファームウェアインタフェイスの動作を管理する仕様です。これは、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は、その前身である"EFIEを発展させたものです、このドキュメントや関連するソースコードでは、EFIとUEFIという単語は多少同じ意味で使われています。原則として、新しいものを"UEFI"で、レガシーコードまたは使用に関しては"EFI"を使います。

# 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仕様に準拠したファームウェアを備えたプラットフォームを起動すると、カーネルは追加機能を利用できます。


> - UEFI Runtime Services
- Retrieving various configuration information through the standardised interface of UEFI configuration tables. (ACPI, SMBIOS, ...)

- UEFI Runtime Services
- UEFI構成テーブルの標準化されたインターフェースを介したさまざまな構成情報を取得（ACPI、SMBIOS、...）

> For actually enabling [U]EFI support, enable:

[U]EFI Supportをサポートし、有効にするには：

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

実装には、Flattened Device Tree(FDT)な内、UEFI環境に関する情報の取得が必要です。そのため、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.

「stub」は、Image / zImageを有効なUEFIに拡張する機能です
PE/COFF実行可能ファイル、これには、UEFI shell, boot menu, GimmibootやeEFIndのような軽量bootloaderなど。。

The kernel image built with stub support remains a valid kernel image for booting in non-UEFI environments.

stiub をサポートしたkernel imageは、非UEFI環境での起動に必要なパラメータはそのままです。

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

ARMアーキテクチャ（armおよびarm64）でのUEFIカーネルサポートは、スタブを介してブートが実行される場合にのみ利用できます。

> When booting in UEFI mode, the stub deletes any memory nodes from a provided DT.
Instead, the kernel reads the UEFI memory map.

stubは、UEFI modeで起動したとき、strubは提供されたDTで必要とされるmemoryを削除します。その代わりに、kernelはUEFIO memory mapuを読みます。

The stub populates the FDT /chosen node with (and the kernel scans for) the
following parameters:

スタブは、FDT / chosenノードに以下のパラメーター（およびカーネルがスキャン）を設定します。


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


---
もともと、Linux Kernelのソースコードの一部なので、GPLv2扱いになる（はずの認識）。

> https://www.kernel.org/doc/html/latest/index.html
> 
> Licensing documentation
> 
> The following describes the license of the Linux kernel source code (GPLv2), how to properly mark the license of individual files in the source tree, as well as links to the full license text.
> 
> https://www.kernel.org/doc/html/latest/process/license-rules.html#kernel-licensing