| 統合拡張ファームウェアインターフェース | |
|---|---|
| 略語 | UEFI |
| 状態 | 出版 |
| 年が始まった | 2006年[ a ] |
| 最新バージョン | 2.11 [ 1 ] 2024年12月16日 |
| 組織 | UEFIフォーラム |
| 関連規格 | |
| 前任者 | IBM PC互換機のBIOS [ b ] |
| ドメイン | ファームウェア |
| Webサイト | uefi.org |

UEFI(Unified Extensible Firmware Interface、頭文字は/ ˈ juː ɪ f aɪ / ) [ c ]は、コンピューティングプラットフォームのファームウェアアーキテクチャの仕様です。コンピュータの電源を入れると、通常、オペレーティングシステムが起動する前に、UEFI実装が最初に実行されます。例としては、 AMI Aptio、Phoenix SecureCore、TianoCore EDK II、InsydeH2Oなどがあります。
UEFIは、IBM PC互換機のブートROMに搭載されていたBIOSに代わるものです。 [ 5 ] [ 6 ]ただし、 CSMブートを使用することでBIOSとの下位互換性を維持できます。前身のBIOSはIBMが独自ソフトウェアとして作成した事実上の標準ですが、UEFIは業界団体によって維持されているオープンスタンダードです。BIOSと同様に、ほとんどのUEFI実装は独自仕様です。
インテルは、オリジナルのExtensible Firmware Interface(EFI)仕様を開発しました。EFIの最終バージョンは、2005年にリリースされた1.10です。その後のバージョンは、UEFIフォーラムによってUEFIとして開発されてきました。
UEFI はプラットフォームやプログラミング言語に依存しませんが、リファレンス実装 TianoCore EDKII には Cが使用されます。
EFIのそもそものきっかけは、1990年代半ば、最初のIntel-HP Itaniumシステムの開発初期段階に遡ります。BIOSの制限は、Itaniumがターゲットとしていた大型サーバープラットフォームにとってあまりにも制限的になっていました。[ 7 ]これらの懸念に対処するための取り組みは1998年に始まり、当初はIntel Boot Initiativeと呼ばれていました。[ 8 ]その後、 Extensible Firmware Interface (EFI)に改名されました。[ 9 ] [ 10 ]
最初のオープンソースUEFI実装であるTianoは、2004年にIntelによってリリースされました。Tianoはその後EDK [ 11 ]とEDK II [ 12 ]に置き換えられ、現在はTianoCoreコミュニティによってメンテナンスされています。[ 13 ]
2005年7月、IntelはEFI仕様のバージョン1.10の開発を中止し、Unified EFI Forumに寄贈しました。Unified EFI Forumは、この仕様をUnified Extensible Firmware Interface (UEFI)として開発しました。オリジナルのEFI仕様はIntelが所有しており、EFIベースの製品のライセンスはIntelが独占的に提供していますが、UEFI仕様はUEFI Forumが所有しています。[ 7 ] [ 14 ]
UEFI 仕様のバージョン 2.0 は、2006 年 1 月 31 日にリリースされました。暗号化とセキュリティが追加されました。
UEFI 仕様のバージョン 2.1 は、2007 年 1 月 7 日にリリースされました。ネットワーク認証とユーザー インターフェイスアーキテクチャ (UEFI では「ヒューマン インターフェイス インフラストラクチャ」) が追加されました。
UEFI 仕様のバージョン 2.3.1 は、2011 年 4 月 6 日にリリースされました。セキュア ブートとARM アーキテクチャのサポートが追加されました。
2018年10月、ArmはArm ServerReadyを発表しました。これは、Armベースのサーバーで汎用の市販オペレーティングシステムとハイパーバイザーを搭載するためのコンプライアンス認証プログラムです。このプログラムでは、システムファームウェアがServer Base Boot Requirements (SBBR)に準拠する必要があります。SBBRでは、UEFI、 ACPI、およびSMBIOSへの準拠が必要です。2020年10月、ArmはプログラムをエッジおよびIoT市場に拡張することを発表しました。新しいプログラム名はArm SystemReadyです。Arm SystemReadyは、現在3つのレシピを提供するBase Boot Requirements ( BBR )仕様を定義しました。そのうち2つはUEFIに関連しています。1) SBBR: Windows、Red Hat Enterprise Linux、VMware ESXiなどのエンタープライズレベルのオペレーティング環境に適したUEFI、ACPI、およびSMBIOSへの準拠が必要です。2) EBBR: Yoctoなどの組み込み環境に適したEmbedded Base Boot Requirements ( EBBR )で定義されている一連のUEFIインターフェースへの準拠が必要です。多くのLinuxおよびBSDディストリビューションは、両方のレシピをサポートできます。
2018年12月、マイクロソフトはMicrosoft SurfaceおよびHyper-V製品で使用されているTianoCore EDK IIのフォークであるProject Muを発表しました。このプロジェクトは、サービスとしてのファームウェアという概念を推進しています。[ 15 ]
最新のUEFI仕様バージョン2.11は2024年12月に公開されました。[ 16 ]
UEFIは32ビット以上のプロセッサアーキテクチャをサポートしています。ただし、リトルエンディアンモードのプロセッサのみがサポートされます。[ 16 ] : セクション1.9.1 UEFI仕様バージョン2.11には、以下のプロセッサアーキテクチャに関する公式ドキュメントがあります。[ 16 ] : セクション3.5.1.1
POWERPC64向けの非公式UEFIサポートは、 OpenPOWERの抽象化レイヤーであるOPAL [ 17 ]上にTianoCoreを実装することで開発中であり、リトルエンディアンモードで動作する。[ 18 ] MIPS向けにも非公式プロジェクトが存在する。[ 19 ] [ 20 ]
UEFI では、プロセッサがより小さいまたは大きいビット幅をサポートしている場合でも、ファームウェアのビット幅に一致する UEFI アプリケーションの実行のみが許可されます。たとえば、プロセッサが 32 ビット プロセッサ モードを備えている場合でも、64 ビット UEFI ファームウェアは 64 ビット UEFI アプリケーションのみを実行できます。[ 16 ]:セクション 2.3.2 および 2.3.4 一部のローエンド コンピュータには、64 ビット CPU で実行される 32 ビット UEFI ファームウェアが搭載されて出荷されています。[ 21 ] UEFI アプリケーションがブート サービスを終了し、システムに対する完全な制御が許可されると、プロセッサ実行モードを変更できるようになります。[ 16 ]:セクション 2.3.2 および 2.3.4 ただし、ランタイム サービスを呼び出すには、すぐに元のプロセッサ モードに戻す必要があります。[ 22 ]ランタイム サービスは、ファームウェア実装と同じプロセッサ モードからのみ呼び出すことができるためです。[ 16 ]:セクション 2.3.2 および 2.3.4
Linuxカーネルはバージョン3.15以降、x86-64 CPUを搭載した32ビットUEFIファームウェア実装上で64ビットカーネルを起動するためのサポートを追加し、UEFIブートローダーがEFIハンドオーバープロトコルをサポートすることを必要としました。 [ 23 ] EFIハンドオーバープロトコルにより、UEFIブートローダーはUEFIの初期化をカーネルのEFIブートスタブに委ねることができるため、カーネルのみがUEFIの初期化を行うことができます。[ 24 ] [ 25 ] [ 26 ]
UEFI は、マスター ブート レコード(MBR)を使用する標準的な PC ディスク パーティション スキームに加えて、 MBRの多くの制限がないGUID パーティション テーブル(GPT) パーティション スキームでも動作します。特に、ディスク パーティションの数とサイズに関する MBR の制限 (ディスクあたり最大 4 つのプライマリ パーティション、ディスクあたり最大 2 TB (2 × 2 40バイト) ) が緩和されています。さらに具体的には、GPT では、 512 バイトのセクターで最大 8 ZiB (8 × 2 70バイト)のディスクおよびパーティション サイズが可能です 。 [ 27 ] UEFI 仕様では、GPT または MBR ディスクとEl Torito形式の光ディスク上にあるFAT12 / 16 / 32 [ 16 ] : section 13.3 パーティションのみをサポートしています。[ 16 ] : セクション13.3.2 GPTはUEFI標準の一部ですが、BIOS PCでオペレーティングシステムを起動するためにも使用できる場合があります。[ 27 ] [ 28 ]
LinuxでのGPTのサポートは、カーネル構成時にオプションCONFIG_EFI_PARTITION(EFI GUIDパーティションサポート)をオンにすることで有効になります。[ 29 ]このオプションにより、システムファームウェアがシステムの制御をLinuxに渡した後、LinuxはGPTディスクを認識して使用できるようになります。
下位互換性のため、Linux はGRUB 2と Linux の両方が GPT に対応しているため、BIOS ベースのシステムでデータ保存と起動の両方に GPT ディスクを使用できます。このようなセットアップは通常BIOS-GPTと呼ばれます。GPT には保護 MBR が組み込まれているため、BIOS ベースのコンピュータは、保護 MBR のブートストラップ コード領域に格納されている GPT 対応ブート ローダーを使用して GPT ディスクから起動できます。[ 27 ] GRUB の場合、このような構成では、GPTパーティション ディスクに MBR 以降のギャップが存在しないため (GPT のプライマリ ヘッダーとプライマリ パーティション テーブルが引き継ぐ)、GRUB が第 2 段階のコードを埋め込むための BIOS ブート パーティションが必要になります。通常 1MBのサイズで、GPTスキームにおけるこのパーティションのグローバル一意識別子(GUID)は21686148-6449-6E6F-744E-656564454649であり、BIOS-GPTセットアップでのみGRUBによって使用されます。GRUBの観点から見ると、MBRパーティションの場合、このようなパーティションタイプは存在しません。システムがUEFIベースである場合、第2ステージコードの埋め込みは不要であるため、このパーティションは不要です。[ 28 ] [ 27 ]
UEFIシステムはGPTディスクにアクセスし、そこから直接起動できるため、LinuxはUEFIブート方式を使用できます。UEFIシステムでGPTディスクからLinuxを起動するには、ブートローダー、オペレーティングシステムカーネル、ユーティリティソフトウェアなどのUEFIアプリケーションを含むEFIシステムパーティション(ESP)を作成する必要があります。 [ 30 ] [ 31 ]このようなセットアップは通常UEFI-GPTと呼ばれ、ESPは互換性を最大限に高めるために、少なくとも512MBのサイズでFAT32ファイルシステムでフォーマットすることが推奨されます。[ 27 ]
後方互換性のため、一部のUEFI実装では、レガシーBIOSとの互換性を提供する互換性サポートモジュール(CSM)を介して、MBRパーティションディスクからの起動もサポートしています。その場合、UEFIシステムでのLinuxの起動は、レガシーBIOSベースのシステムの場合と同じです。
EFIのいくつかの手法とデータ形式はMicrosoft Windowsのものと似ています。[ 32 ] [ 33 ]
Windows 11、64ビット版のWindows Vista SP1/SP2 および7、および 32 ビット版と 64 ビット版の両方のWindows 8、8.1 、および10は、2 TBを超える GPT ディスクから起動できます 。
EFIは、ブートサービスとランタイムサービスの2種類のサービスを定義します。ブートサービスは、ファームウェアがプラットフォームを所有している間(つまり、呼び出し前)のみ利用可能で、様々なデバイス上のテキストコンソールとグラフィカルコンソール、バスサービス、ブロックサービス、ファイルサービスなどが含まれます。ランタイムサービスは、オペレーティングシステムの実行中でもアクセス可能で、日付、時刻、 NVRAMExitBootServices()アクセスなどのサービスが含まれます。

UEFIはOSのロードに加え、EFIシステムパーティション上にファイルとして存在するUEFIアプリケーションを実行できます。UEFIアプリケーションは、UEFIシェル、ファームウェアのブートマネージャ、または他のUEFIアプリケーションから実行できます。UEFIアプリケーションは、 OEM(相手先ブランド製造業者)に依存せずに開発およびインストールできます。
UEFIアプリケーションの一種として、GRUB、rEFInd、systemd-boot、Windows Boot ManagerなどのOSブートローダーがあります。これらはOSファイルをメモリに読み込み、実行します。また、OSブートローダーは、実行する別のUEFIアプリケーションを選択するためのユーザーインターフェイスを提供することもできます。UEFI ShellなどのユーティリティもUEFIアプリケーションです。
EFIは、2つのバイナリモジュール間の通信に使用されるソフトウェアインターフェースのセットとしてプロトコルを定義します。すべてのEFIドライバは、プロトコルを介して他のドライバにサービスを提供する必要があります。EFIプロトコルは、BIOSの割り込み呼び出しに似ています。
EFIは、標準的な命令セットアーキテクチャ( ISI)固有のデバイスドライバに加えて、ISAに依存しないデバイスドライバをEFIバイトコード(EBC)として不揮発性メモリに格納します。システムファームウェアにはEBCイメージのインタープリタが搭載されています。この点で、EBCはPowerPCベースのApple MacintoshやSun Microsystems SPARCコンピュータなど で使用されているISAに依存しないファームウェアであるOpen Firmwareに類似しています。
一部のデバイスタイプ向けのアーキテクチャ固有(EFIバイトコード非対応)のEFIドライバには、OSが使用するインターフェースが備わっている場合があります。これにより、OSは、オペレーティングシステム固有のドライバがロードされる前、あるいはロードされた場合でも、EFIを介してドライバが基本的なグラフィックス機能やネットワーク機能を実行できるようになります。
場合によっては、EFIドライバは、他の種類のディスクボリュームからの起動を可能にするファイルシステムドライバとなることもあります。例としては、GRUB2コードに基づく37ファイルシステム用のefifs [ 36 ]や、 RufusがNTFS ESPのチェーンロードに使用しているefifs [ 37 ]などが挙げられます。
EFI 1.0仕様では、グラフィックス機能をサポートする方法としてUGA(ユニバーサルグラフィックアダプタ)プロトコルが定義されていました。UEFIにはUGAが含まれず、GOP(グラフィックス出力プロトコル)に置き換えられました。[ 38 ]
UEFI 2.1では、ユーザー入力、ローカライズされた文字列、フォント、そしてHTML形式のフォームを管理するための「ヒューマン・インターフェース・インフラストラクチャ」(HII)が定義されました。これにより、OEM( Original Equipment Manufacturer)や独立系BIOSベンダー(IBV)は、起動前設定用のグラフィカルインターフェースを設計できるようになります。UEFIはデフォルトで文字列のエンコードに UTF-16を使用します。
初期のUEFIファームウェア実装のほとんどはコンソールベースでした。今日では、多くのUEFIファームウェア実装はGUIベースです。
EFI システム パーティション (ESP と略されることが多い) は、 UEFI 仕様に準拠したコンピュータで使用されるデータ ストレージ デバイスのパーティションです。コンピュータの電源投入時に UEFI ファームウェアによってアクセスされ、オペレーティング システムのブート ローダーなど、UEFI アプリケーションとこれらのアプリケーションの実行に必要なファイルが格納されます。サポートされているパーティション テーブルスキームには、 MBRとGPTのほか、光ディスク上のEl Toritoボリュームがあります。 [ 16 ]:セクション 2.6.2 ESP で使用するために、UEFI はFAT ファイル システムの特定のバージョンを定義します。これは UEFI 仕様の一部として維持され、元の FAT 仕様からは独立しており、FAT32、FAT16、およびFAT12ファイル システムを網羅しています。[ 16 ]:セクション 13.3 [ 39 ] ESP は、BIOS の下位互換性の一部として、ブート セクター用のスペースも提供します。
従来のPC BIOSとは異なり、UEFIはブートセクターに依存せず、代わりにUEFI仕様の一部としてブートマネージャーを定義します。コンピューターの電源が投入されると、ブートマネージャーはブート構成をチェックし、その設定に基づいて指定されたOSブートローダーまたはオペレーティングシステムカーネルを実行します。ブート構成は、NVRAMに保存される変数によって定義され、OSローダーまたはOSカーネルへのファイルシステムパスを示す変数も含まれます。
OSブートローダーはUEFIによって自動検出されるため、USBフラッシュドライブなどのリムーバブルデバイスから簡単に起動できます。この自動検出は、OSブートローダーへの標準化されたファイルパスに依存しており、パスはコンピュータのアーキテクチャによって異なります。ファイルパスの形式は<EFI_SYSTEM_PARTITION>\EFI\BOOT\BOOT<MACHINE_TYPE_SHORT_NAME>.EFIと定義されています。たとえば、x86-64システム上のOSローダーへのファイルパスは\efi\boot\bootx64.efi、[ 16 ]:セクション3.5.1.1 、ARM64アーキテクチャでは \efi\boot\bootaa64.efiです。

GPTパーティションディスクからUEFIシステムを起動することを、一般的にUEFI-GPTブートと呼びます。UEFI仕様ではMBRパーティションテーブルを完全にサポートすることが求められているにもかかわらずです。[ 16 ]:セクション13.3.2 一部のUEFIファームウェア実装では、ブートディスクのパーティションテーブルの種類に応じてBIOSベースのCSMブートに即座に切り替えるため、 MBRパーティションディスク上のEFIシステムパーティションからのUEFIブートが事実上不可能になります。このようなブートスキームは、一般的にUEFI-MBRと呼ばれます。
また、ブート マネージャーにはテキスト ユーザー インターフェイスが用意されていることが多く、ユーザーは利用可能なブート オプションのリストから目的の OS (またはセットアップ ユーティリティ) を選択できます。
PC プラットフォームでは、UEFI ブートをサポートする BIOS ファームウェアはUEFI BIOSと呼ばれることがありますが、最近の x86 PC では CSM の使用が非推奨になっているため、CSM ブート方式をサポートしていない可能性があります。
下位互換性を確保するため、PCクラスのマシンのUEFIファームウェア実装は、レガシーBIOSとの互換性を提供する互換性サポートモジュール(CSM)を介して、MBRパーティションディスクからのレガシーBIOSモードでの起動をサポートできます。このシナリオでは、パーティションテーブルを無視し、ブートセクターの内容に基づいて、レガシーBIOSベースのシステムと同じように起動が実行されます。
MBRパーティションディスクからのBIOSスタイルの起動は、UEFIシステムかレガシーBIOSベースのシステムかを問わず、一般的にBIOS-MBRと呼ばれます。さらに、レガシーBIOSベースのシステムをGPTディスクから起動することも可能であり、このようなブートスキームは一般的にBIOS-GPTと呼ばれます。
互換性サポートモジュール(Compatibility Support Module)は、UEFIをサポートしていないレガシーオペレーティングシステムや一部のレガシーオプションROMを引き続き使用できるようにします。 [ 40 ]また、UEFI SMMが提供する機能に加えて、 CompatibilitySmmと呼ばれるレガシーシステム管理モード(SMM)機能も提供します。このようなレガシーSMM機能の一例として、従来のPS/2キーボードとマウスをエミュレートすることで、USBレガシーサポートを提供することが挙げられます。[ 40 ]
2017年11月、インテルは2020年までにクライアントプラットフォーム向けのCSMのサポートを段階的に廃止する計画を発表した。[ 41 ]
2022年7月、カスペルスキー研究所は、インテルのH81チップセットと影響を受けるマザーボードの互換性サポートモジュールを搭載したマシンで悪意のあるコードを連鎖的に起動するように設計されたルートキットに関する情報を公開しました。[ 42 ]
2023年8月、インテルは2024年までにサーバープラットフォーム向けのCSMのサポートを段階的に廃止する計画を発表した。[ 43 ]
現在、Intel プラットフォームをベースとするほとんどのコンピューターは CSM をサポートしていません。
UEFI仕様には、Preboot Execution Environment(PXE)を介したネットワークブートのサポートが含まれています。PXEブートのネットワークプロトコルには、インターネットプロトコル(IPv4およびIPv6)、ユーザーデータグラムプロトコル(UDP)、動的ホスト構成プロトコル(DHCP)、簡易ファイル転送プロトコル(TFTP)、iSCSIが含まれます。[ 16 ]:924–1509 [ 44 ]
OSイメージはストレージエリアネットワーク(SAN)にリモートで保存することができ、 SANへのアクセスにはiSCSI(Internet Small Computer System Interface )とFCoE( Fibre Channel over Ethernet )というプロトコルがサポートされている。 [ 16 ] [ 45 ] [ 46 ]
UEFI仕様のバージョン2.5では、HTTP経由でブートイメージにアクセスするためのサポートが追加されました。[ 47 ]

UEFI仕様では、セキュアブートと呼ばれるプロトコルが定義されています。このプロトコルは、許容されるデジタル署名で署名されていないUEFIドライバやOSブートローダーの読み込みを防止することで、ブートプロセスを保護します。セキュアブートを有効にすると、最初は「セットアップ」モードに設定され、「プラットフォームキー」(PK)と呼ばれる公開鍵をファームウェアに書き込むことができます。鍵が書き込まれると、セキュアブートは「ユーザー」モードに移行し、プラットフォームキーで署名されたUEFIドライバとOSブートローダーのみがファームウェアによって読み込まれます。メモリに保存されたデータベースに「鍵交換鍵」(KEK)を追加することで、他の証明書を使用できるようになりますが、それらの証明書はプラットフォームキーの秘密部分との接続を維持する必要があります。[ 48 ]セキュアブートは「カスタム」モードに設定することもでき、秘密鍵と一致しない公開鍵をシステムに追加できます。[ 49 ]
セキュアブートは、Windows 8および8.1、Windows Server 2012および2012 R2、Windows 10、Windows Server 2016、2019、2022 、 Windows 11 、 VMware vSphere 6.5 [ 50 ]および、Fedora (バージョン18以降)、openSUSE (バージョン12.3以降)、RHEL(バージョン7以降)、 CentOS(バージョン7以降 [ 51 ] )、Debian(バージョン10以降)[ 52 ] Ubuntu (バージョン12.04.2以降)、Linux Mint (バージョン21.3以降)、[ 53 ] [ 54 ]およびAlmaLinux OS(バージョン8.4以降[ 55 ] )を含む多数のLinuxディストリビューションでサポートされています。2025年1月現在、FreeBSDのサポートは計画段階にあります。[ 56 ]

UEFIはシェル環境を提供しており、これを用いてUEFIブートローダーを含む他のUEFIアプリケーションを実行することができます。また、UEFIシェルで利用可能なコマンドは、メモリマップの取得(memmap)、ブートマネージャー変数の変更(bcfg)、パーティションプログラムの実行(diskpart)、UEFIドライバーのロード、テキストファイルの編集(edit)など、システムやファームウェアに関する様々な情報を取得するために使用できます。[ 57 ] [ 58 ]
UEFIシェルのソースコードは、 IntelのTianoCore UDK/EDK2プロジェクトからダウンロードできます。[ 59 ]ビルド済みのShellBinPkgも利用可能です。[ 60 ] Shell v2はUEFI 2.3以降のシステムで最もよく動作し、これらのシステムではShell v1よりも推奨されます。Shell v1はすべてのUEFIシステムで動作するはずです。[ 61 ] [ 62 ]
UEFIシェルの起動方法は、システムマザーボードのメーカーやモデルによって異なります。中には、ファームウェア設定で起動のための直接オプションを提供しているものもあります。例えば、コンパイル済みのx86-64バージョンのシェルを として利用できるようにする必要があります<EFI_SYSTEM_PARTITION>/SHELLX64.EFI。また、UEFIシェルが既に組み込まれているシステムもあり、適切なキーの組み合わせで起動できます。[ 63 ]その他のシステムでは、適切なUSBフラッシュドライブを作成するか、bcfgコンパイル済みのシェルに関連付けられたブートオプションを手動で追加する必要があります。[ 58 ]
以下はEFIシェルでサポートされているコマンドの一覧です。 [ 57 ]
UEFIの拡張機能は、コンピューターに接続されたほぼすべての不揮発性ストレージデバイスから読み込むことができます。例えば、OEM( Original Equipment Manufacturer )は、ハードドライブ上にEFIシステムパーティションを搭載したシステムを配布できます。これにより、マザーボードのROMに保存されている標準UEFIファームウェアに追加機能を追加できます。
UEFIカプセルは、ファームウェアからOSへのファームウェア更新インターフェースを定義し、最新かつ安全であると宣伝されています。[ 64 ] Windows 8、Windows 8.1、Windows 10、[ 65 ]およびLinux用のFwupdはそれぞれUEFIカプセルをサポートしています。
BIOSと同様に、UEFIはシステムのハードウェアコンポーネントを初期化・テストし、その後、大容量記憶装置またはネットワーク接続を介してブートローダーをロードします。x86システムでは、 UEFIファームウェアは通常、マザーボードのNORフラッシュチップに保存されており、ブートプロセスはPCI Expressデバイスの検出と初期化など、より複雑です。[ 66 ] [ 67 ] ARMベースのAndroidおよびWindows Phoneデバイスの中には、UEFIブートローダーがeMMCまたはeUFSフラッシュメモリ に保存されているものもあります。
UEFIマシンは、UEFIへの移行を容易にするために使用された以下のいずれかのクラスを持つことができます。[ 68 ]
第10世代Intel Core以降、IntelはiGPU(Intel Graphics Technology )向けのレガシービデオBIOSの提供を終了しました。これらのCPUでレガシーブートを行うにはレガシービデオBIOSが必要ですが、これはビデオカードから引き続き提供されます。
これはUEFIブートの最初のステージですが、プラットフォーム固有のバイナリコードが先行する場合があります(例:Intel ME、AMD PSP、CPUマイクロコード)。これは、特定のアーキテクチャ向けにアセンブリ言語で記述された最小限のコードで構成されています。一時メモリ(多くの場合、CPUキャッシュ-as-RAM(CAR)またはSoCオンチップブートプロセッサ)を初期化し、システムのソフトウェアの信頼のルートとして機能します。ハンドオフ前にPEIを検証するオプションもあります。
UEFIブートの第2ステージは、依存関係を考慮したディスパッチャで構成され、PEIモジュール(PEIM)をロードして実行し、メインメモリの初期化(メモリコントローラとDRAMの初期化)やファームウェアのリカバリ操作などの初期のハードウェア初期化タスクを処理します。さらに、現在のブートモードの検出と多くのACPI S3操作の処理も担います。ACPI S3レジュームの場合、多くのハードウェアレジスタをスリープ前の状態に復元する役割も担います。PEIはCARも使用します。このステージでの初期化には、メモリ内にデータ構造を作成し、これらの構造内にデフォルト値を確立することが含まれます。[ 4 ]
このステージには、PEI基盤、PEIM、PPIなど、複数のコンポーネントが含まれます。このステージでは利用できるリソースが少ないため、このステージは最小限に抑え、より充実した次のステージであるDXEに向けて最小限の準備を行う必要があります。
SECフェーズのハンドオフ後、プラットフォームの責任はPEI Foundationが引き継ぎます。その責任は以下のとおりです。
このコンポーネントは、PEIM を呼び出してその依存関係を管理する役割を担います。
これらは、永続メモリ、CPU、チップセット、マザーボードなどのハードウェアコンポーネントの初期化を担う最小限のPEIドライバです。各PEIMは単一の役割を持ち、単一の初期化に特化しています。これらのドライバは、異なるベンダーから提供されています。
これは、ポインタのGUIDペアで構成される データ構造です。PPIは、PEIサービスを通じてPEIMによって検出されます。
DXE用にシステムを最小限に初期化した後、PEI基盤はDXEを見つけ出し、制御をDXEに渡します。PEI基盤は、IPL(Initial Program Load)と呼ばれる特別なPPIを介してDXE基盤をディスパッチします。
このステージはCモジュールと依存関係を考慮したディスパッチャで構成されています。メインメモリが利用可能になったため、CPU、チップセット、マザーボード、その他のI/OデバイスはDXEとBDSで初期化されます。このステージでの初期化には、マザーボードに接続されたハードウェアへのEFIデバイスパスの割り当てと、ハードウェアへの構成データの転送が含まれます。[ 4 ]
BDSはDXEの一部です。[ 70 ] [ 71 ]この段階では、ブートデバイスが初期化され、UEFIドライバーまたはPCIデバイスのオプションROMがNVRAMと呼ばれるアーキテクチャ的に定義された変数に従って実行されます。
これは、ブートデバイスの選択からOSへのハンドオフまでの段階です。この時点で、UEFIシェルに入ったり、OSブートローダーなどのUEFIアプリケーションを実行したりすることができます。
ExitBootServices()が実行されると、 UEFI はオペレーティングシステム(OS)に処理を委譲します。UEFI 対応の OS は、ブートサービスを終了し、ファームウェアを起動して不要になったコードとデータをすべてアンロードし、SMMやACPIなどのランタイムサービスコード/データのみを残す責任を負います。[ 72 ]一般的な現代の OS は、ハードウェアデバイスの制御に独自のプログラム (カーネルドライバなど) を使用することを好みます。
レガシー OS が使用される場合、CSM はこの呼び出しを処理し、システムがレガシー BIOS の期待と互換性があることを確認します。

インテルのEFI実装は、コードネームTianoのIntel Platform Innovation Frameworkである。TianoはインテルのXScale、Itanium、IA-32、x86-64プロセッサ上で動作し、プロプライエタリソフトウェアであるが、コードの一部はBSDライセンスまたはEclipse Public License (EPL)の下でTianoCore EDK IIとして公開されている。TianoCoreはcorebootのペイロードとして使用できる。[ 73 ]
Phoenix TechnologiesのUEFI実装は、SecureCore Technology(SCT)としてブランド化されています。[ 74 ] American MegatrendsはAptioとして知られる独自のUEFIファームウェア実装を提供し、[ 75 ] Insyde SoftwareはInsydeH2Oを提供し、[ 76 ] ByosoftはByoCoreを提供しています。
2018年12月、マイクロソフトはSurfaceラインのTianoCore EDK2ベースのUEFI実装のオープンソース版であるProject Muをリリースした。[ 77 ]
UEFI APIの実装は、2017年にユニバーサルブートローダー( Das U-Boot )に導入されました。 [ 78 ] ARMv8アーキテクチャのLinuxディストリビューションでは、ブートにGNU GRUBと組み合わせてU-Boot UEFI実装を使用しています(例:SUSE Linux [ 79 ])。OpenBSDでも同様です。[ 80 ] iSCSIからのブートには、 U-BootによってロードされたUEFIアプリケーションとしてiPXEを使用できます。[ 81 ]
2000 年にリリースされたIntelの最初のItaniumワークステーションとサーバーは、EFI 1.02 を実装しました。
ヒューレット・パッカードが2002年にリリースした最初のItanium 2システムは、EFI 1.10を実装していました。これらのシステムは、 Windows、Linux、FreeBSD、HP-UXを起動できました。OpenVMSは2003年6月にUEFI機能を追加しました。
2006年1月、Apple社は初のIntelベースMacintoshコンピュータを出荷した。これらのシステムは、以前のPowerPCベースシステムで使用されていたOpen Firmwareではなく、EFIを採用した。 [ 82 ] 2006年4月5日、Apple社はBoot Campを初めてリリースした。これは、Mac OS X(現macOS)を再インストールすることなく、Windowsドライバディスクと非破壊パーティションツールを生成する。また、EFI実装にBIOS互換性を追加するファームウェアアップデートもリリースされた。その後のMacintoshモデルは、新しいファームウェアを搭載して出荷された。[ 83 ]
2005年には、100万台以上のIntelシステムがIntelのUEFI実装を搭載して出荷された。[ 84 ] IntelのUEFI実装を使用した新しいモバイル、デスクトップ、およびサーバー製品の出荷は2006年に開始された。例えば、Intel 945チップセットシリーズを使用するボードは、IntelのUEFIファームウェア実装を使用している。
2005年以降、EFIはXScaleコアをベースにした組み込みシステムなど、PC以外のアーキテクチャにも実装されています。[ 84 ]
EDK(EFI開発キット)にはNT32ターゲットが含まれており、これによりEFIファームウェアとEFIアプリケーションをWindowsアプリケーション内で実行できます。ただし、EDK NT32ではハードウェアへの直接アクセスは許可されていません。つまり、EDK NT32ターゲットではEFIアプリケーションとドライバの一部しか実行できません。
2008年には、より多くのx86-64システムがUEFIを採用しました。これらのシステムの多くは、互換性サポートモジュール(CSM)を介してBIOSベースのOSのみを起動できる状態(そのため、ユーザーにはUEFIベースであるようには見えません)のままでしたが、他のシステムではUEFIベースのOSの起動が可能になり始めました。例えば、IBM x3450サーバー、 ClickBIOSを搭載したMSIマザーボード、HP EliteBookノートブックPCなどが挙げられます。
2009年、IBMはSystem xマシン(x3550 M2、x3650 M2、iDataPlex dx360 M2)とBladeCenter HS22にUEFI対応版を出荷しました。DellはPowerEdge T610、R610、R710、M610、M710サーバにUEFI対応版を出荷しました。その他の市販システムについては、UEFIホワイトペーパーに記載されています。[ 85 ]
2011年には、 ASRock、Asus、Gigabyte、MSIなどの大手ベンダーが、 UEFI対応のIntel 6シリーズLGA 1155チップセットとAMD 9シリーズAM3+チップセットを搭載した消費者向けマザーボードをいくつか発売した。[ 86 ]
2012年10月のWindows 8のリリースに伴い、Microsoftの認証要件では、コンピューターにUEFI仕様を実装したファームウェアが搭載されることが義務付けられました。さらに、コンピューターがWindows 8の「コネクトスタンバイ」機能(スマートフォンに匹敵する電源管理機能を備え、スタンバイモードからほぼ瞬時に復帰できる機能)をサポートする場合、ファームウェアに互換性サポートモジュール(CSM)を含めることは許可されません。そのため、コネクトスタンバイをサポートするシステムは、レガシーBIOSオペレーティングシステムを起動できません。[ 87 ] [ 88 ]
2017年10月、インテルは2020年までにすべての製品からレガシーPC BIOSのサポートを削除し、UEFIクラス3に移行すると発表しました。[ 89 ] 2019年までに、インテルプラットフォームに基づくすべてのコンピューターは、レガシーPC BIOSのサポートがなくなります。
(U)EFIから起動できるオペレーティングシステムは、(U)EFI対応オペレーティングシステムと呼ばれ、(U)EFI仕様で定義されています。ここでの(U)EFIからの起動とは、任意のストレージデバイスに保存されている(U)EFIオペレーティングシステムローダーを使用してシステムを直接起動することを意味します。オペレーティングシステムローダーのデフォルトの場所は です。<EFI_SYSTEM_PARTITION>/BOOT/BOOT<MACHINE_TYPE_SHORT_NAME>.EFIここで、マシンタイプの短縮名はIA32、X64、IA64、ARMのいずれかですAA64。[ 16 ]:セクション3.5.1.1 一部のオペレーティングシステムベンダーは独自のブートローダーを持っている場合があります。また、デフォルトのブート場所を変更する場合もあります。
EDK2アプリケーション開発キット(EADK)は、UEFIアプリケーションで標準Cライブラリ関数を使用できるようにします。EADKは、 IntelのTianoCore UDK / EDK2 SourceForgeプロジェクトから無料でダウンロードできます。例えば、 EADKを使用することで、 Pythonインタープリターの移植版がUEFIアプリケーションとして利用可能になります。[ 128 ]開発は.UDK2015以降、GitHubに移行しています。[ 129 ]
多くのデジタル権利活動家がUEFIに抗議している。corebootの共著者であるロナルド・G・ミニッチ氏とデジタル権利活動家のコリー・ドクトロウ氏は、UEFIはユーザーがコンピューターを真に制御する能力を奪おうとする試みだと批判している。[ 130 ] [ 131 ] UEFIは、ほとんどのハードウェアに対してファームウェア用とオペレーティングシステム用の2つの異なるドライバーを必要とするというBIOSの長年の問題を解決していない。[ 132 ]
オープンソースプロジェクトTianoCoreもUEFIを提供しています。[ 133 ] TianoCoreにはチップセット機能を初期化するための専用のファームウェアドライバとモジュールが欠けていますが、TianoCoreはcorebootの多くのペイロードオプションの1つです。corebootの開発には、初期化ドライバの開発に必要な仕様を提供するチップセットメーカーの協力が必要です。


2011年、マイクロソフトは、 Windows 8オペレーティングシステムの実行が認定されたコンピューターは、マイクロソフトの公開キーが登録され、セキュアブートが有効になっている状態で出荷する必要があると発表しました。これは、これらのデバイスではUEFIの使用が必須であることを意味します。[ 134 ] [ 135 ]この発表後、同社は、UEFIのセキュアブート機能を利用してLinuxなどの代替オペレーティングシステムのインストールを妨害または完全に防止しようとしているとして、批評家やフリーソフトウェア/オープンソース支持者(フリーソフトウェア財団を含む)から非難されました。 マイクロソフトは、セキュアブートの要件がロックインの形式として機能することを意図したものではないと否定し、Windows 8認定のx86ベースシステムでは、セキュアブートをカスタムモードにするか無効にすることを許可する必要があるが、 ARMアーキテクチャを使用するシステムではそうではないと述べて要件を明確にしました。[ 49 ] [ 136 ] Windows 10では、OEMがx86システムのユーザーがセキュアブートを管理できるかどうかを決定できます。[ 137 ]
他の開発者は、Linuxシステムにセキュアブートのサポートを実装することに関する法的および実際的な問題について懸念を表明した。元Red Hat開発者のMatthew Garrettは、 GNU一般公衆利用許諾書バージョン3の条件により、ディストリビューションの開発者が秘密鍵を開示しなければGNU GRand Unified Bootloaderを使用できない可能性があると指摘した(ただし、フリーソフトウェア財団はその後、鍵を公開する責任はハードウェア製造業者にあると明確にし、立場を明確にした)[ 138 ] [ 92 ]。また、上級ユーザーが自己署名せずにセキュアブートを有効にして機能するカスタムカーネルを構築することは難しいだろうとも指摘した[ 136 ] 。他の開発者は、別の鍵で署名されたLinuxビルドを提供できると提案したが、Microsoft鍵に加えて必要な鍵もコンピュータに同梱するようOEMを説得するのは難しいだろうと指摘した[ 6 ] 。
いくつかの主要なLinuxディストリビューションは、セキュアブートの異なる実装を開発している。ギャレット自身が開発したshimと呼ばれる最小限のブートローダは、ユーザーがLinuxディストリビューションから提供される鍵を個別に信頼できる、コンパイル済みの署名済みブートローダである。[ 139 ] Ubuntu 12.10は、ブートローダのみを検証し、署名されていないカーネルのロードを許可するCanonical独自の鍵で使用するように事前構成された古いバージョンのshimを使用している。開発者は、信頼されたカーネルはユーザー空間のみを保護するのに効果的であり、セキュアブートが保護を追加するように設計されているブート前の状態を保護するのには効果的ではないため、ブートローダのみに署名する方が実現可能であると信じていた。これにより、ユーザーはシステムを再構成することなく、独自のカーネルを構築し、カスタムカーネルモジュールを使用することもできる。 [ 92 ] [ 140 ] [ 141 ] Canonicalは、Ubuntuがプリインストールされている認定OEMコンピュータに署名するための独自の秘密鍵も保持しており、セキュアブート要件も強制する予定です。つまり、CanonicalキーとMicrosoftキー(互換性のため)の両方をファームウェアに含める必要があります。Fedoraもshimを使用していますが、カーネルとそのモジュールの両方に署名する必要があります。[ 140 ] shimには、ローカルでコンパイルされたカーネルや、ディストリビューションのメンテナーによって署名されていないその他のソフトウェアに署名するために使用できるマシン所有者キー(MOK)があります。[ 142 ]
オペレーティングシステムのカーネルとそのモジュールにも署名が必要かどうかについては議論がある。UEFI仕様では必須ではないが、マイクロソフトは契約上の要件として必須であり、システムのセキュリティを侵害する可能性のあるコードの署名に使用された証明書を取り消す権利を留保していると主張している。[ 141 ] Windowsでは、セキュアブートが有効になっている場合、すべてのカーネルドライバーにデジタル署名が必要であり、WHQL以外のドライバーは読み込みを拒否される可能性がある。2013年2月、別のRed Hat開発者が、Microsoftが署名したPEファイルに埋め込まれたマスターX.509キーを使用してMicrosoftのAuthenticode署名を解析できるようにするLinuxカーネルへのパッチを提出しようとした。しかし、この提案はLinuxの作成者であるリーナス・トーバルズから批判され、彼はセキュアブートインフラストラクチャに対するマイクロソフトの制御を支持しているとしてRed Hatを攻撃した。[ 143 ]
2013年3月26日、スペインのフリーソフトウェア開発グループHispalinuxは、OEMシステムに対するMicrosoftのセキュアブート要件が「妨害的」かつ反競争的であると主張し、欧州委員会に正式な苦情を申し立てた。 [ 144 ]
2013年8月のブラックハットカンファレンスで、セキュリティ研究者のグループが、セキュアブートを悪用するために使用できるUEFIの特定ベンダー実装における一連のエクスプロイトを発表しました。[ 145 ]
2016年8月、2人のセキュリティ研究者が、Microsoftがオペレーティングシステムの署名に使用しているセキュリティキー「ゴールデンキー」を発見したと報じられました[ 146 ]。技術的にはキーは公開されていませんでしたが、そのキーで署名された悪用可能なバイナリが発見されました。これにより、あらゆるソフトウェアがMicrosoftによって真に署名されているかのように動作し、ルートキットやブートキット攻撃の可能性が高まります。また、あらゆるパッチが(署名された)悪用可能なバイナリに置き換えられる(ダウングレードされる)可能性があるため、この脆弱性を修正することは不可能です。Microsoftは声明で、この脆弱性はARMアーキテクチャとWindows RTデバイスにのみ存在すると回答し、2つのパッチをリリースしました。しかし、これらのパッチでは脆弱性は除去されず(除去することもできません)、修正するにはエンドユーザーのファームウェアでキーの置き換えが必要になります。
2023年3月1日、ESETサイバーセキュリティファームの研究者は、「BlackLotus」と名付けられた「UEFIセキュアブートを回避する最初のUEFIブートキット」を公開分析結果で報告し、「脆弱性を除去しない(除去できない)」パッチを悪用するメカニズムの背後にある理論を説明しました。[ 147 ] [ 148 ]
2024年8月、Windows 11およびWindows 10のセキュリティ更新プログラムにより、デバイスのUEFI NVRAMにSecure Boot Advanced Targeting(SBAT)設定が適用され、一部のLinuxディストリビューションの読み込みに失敗する問題が発生しました。SBATは、Windows Boot Managerとshimの新しいバージョンでサポートされているプロトコルで、バグのある、または脆弱な中間ブートローダー(通常は古いバージョンのWindows Boot ManagerとGRUB)のブートプロセスでの読み込みを拒否します。この変更は翌月に元に戻されました。[ 149 ]
2025年6月、LWN.netは、Microsoft UEFI CA 2011証明書の有効期限が2026年6月に切れるため、セキュアブートが有効になっているLinuxでは一部のOSの読み込みが拒否される可能性があると報じました。[ 150 ]ただし、TianoCore EDK IIや多くの商用UEFI実装(AMI Aptioなど)では、セキュアブート証明書の日付/時刻チェックは通常デフォルトで無効になっています。[ 151 ]
2025年1月現在、RHEL(RHEL 7以降)、CentOS(CentOS 7以降[ 152 ])、Ubuntu、Fedora、Debian(Debian 10以降[ 153 ])、OpenSUSE、 SUSE Linux Enterpriseなど、多くのLinuxディストリビューションがUEFIセキュアブートをサポートしています。[ 154 ]
デバイスにおけるUEFIファームウェアの普及に伴い、それぞれの実装に起因する多くの技術的な問題も発生しています。[ 155 ]
2012年10月のWindows 8のリリース後、セキュアブートを搭載した一部のLenovoコンピュータモデルに、他の設定に関係なく「 Windows Boot Manager」または「Red Hat Enterprise Linux 」という名前の実行ファイルのみをロードするようにハードコードされたファームウェアが搭載されていることが判明しました。 [ 156 ]また、セキュアブートを搭載した東芝のラップトップモデルのいくつかで、適切な動作に必要な特定の証明書が欠落しているという問題が発生しました。 [ 155 ]
2013年1月、一部のSamsung製ノートパソコンのUEFI実装にバグがあり、UEFIモードでLinuxディストリビューションをインストールした後にノートパソコンが動作しなくなることが明らかになりました。当初はSamsung製ノートパソコンのシステム機能にアクセスするために設計されたカーネルモジュールとの潜在的な競合が原因とされましたが(カーネルメンテナーは安全対策としてUEFIシステム上のモジュールを無効化しました)、Matthew Garrett氏は、このバグは実際にはメモリにUEFI変数を過剰に保存することで発生し、特定の条件下ではWindowsでも発生する可能性があることを発見しました。結論として、彼は問題のカーネルモジュールがカーネルメッセージダンプをファームウェアに書き込むことでバグが発生したと判断しました。[ 35 ] [ 157 ] [ 158 ]
Q: EFIとUEFIの関係は?A: UEFI仕様は、Intelが公開したEFI 1.10仕様に基づいており、Unified EFI Forumが修正と変更を管理しています。IntelはEFI 1.10仕様の著作権を現在も保有していますが、フォーラムがこれを進化させられるよう、フォーラムに提供しています。EFI仕様の将来のバージョンはリリースされませんが、ライセンスを取得したお客様は、Intelから取得したライセンス条件に基づいて引き続き使用できます。Unified EFI仕様のライセンスは、Intelではなくフォーラムから提供されます。
。System.Fundamentals.Firmware.CS.UEFISecureBoot.ConnectedStandby ... プラットフォームは、互換性サポートモジュールがインストールされていない、またはインストールできないUEFIクラス3である必要があります(定義については、UEFI Industry Groupの「市販のプラットフォームおよびソリューションを使用したUEFIの評価」バージョン0.3を参照)。BIOSエミュレーションと従来のPC/ATブートは無効にする必要があります。
は、現在の主流の64ビットコンピューティングとプラットフォームコストの状況から、ベンダーがネイティブUEFI 32ビットファームウェアの開発に関心を持たないと判断しました。そのため、Microsoftは当初、32ビットUEFI実装のサポートを出荷しませんでした。