Unified Extensible Firmware Interface(ユニファイド・エクステンシブル・ファームウェア・インタフェース、UEFI)はオペレーティングシステム(OS)とプラットフォームファームウェアとの間のソフトウェアインタフェースを定義する仕様である。
UEFIを採用したSystem BIOSは「UEFI BIOS」と呼ばれ、単に「UEFI」と略されることが多いが、ユーザーがアクセスし設定などを行うGUIはUEFIであっても「BIOS」と呼ばれる事が多い。UEFI BIOSはIBM PC互換機に採用された古いSystem BIOSのよりセキュアな置き換えを意図している[1]。遠隔診断やOSがロードされていない状態での修復なども可能とする[2]。「BIOS(バイオス)」とは異なり、「UEFI」の読みは特に定められていない。
UEFIの元となる EFI (Extensible Firmware Interface) 仕様は元々インテルとヒューレットパッカードによって開発された。2005年、EFI 1.10に基づいてUEFIへと発展した。UEFI仕様は業界団体Unified EFI Forumの下で開発されている。
UEFI自体は単なる「インタフェースの仕様」であるため、特定のプロセッサに依存しない。これまでのBIOSとは異なり、近代的なソフトウェア開発手法を用いることが推奨されており、C言語で実装したものなどが代表的である[3]。 そもそもEFIが開発された動機は、1990年代中盤のインテルとヒューレットパッカードによる初代Itanium機の開発初期にまでさかのぼる。IBM PC由来のSystem BIOSなどの制限(16ビットプロセッサモード、1MBのアドレス空間、PC/ATハードウェアへの依存など)によって、従来の各種[4]スキームはItaniumの(当初の[5])ターゲットである巨大なサーバプラットフォームには採用できなかった[6]。その課題に対する最初の成果が、1998年にIntel Boot Initiativeと呼ばれ[7]、後にEFIと名前を変えた[8][9]。 EFI仕様1.02は2000年12月12日にインテルによってリリースされた(最初に発行されたものはバージョン1.01であったが、法的な不備や商標などのミスによりすぐに取り下げられている)。 EFI仕様1.10は2002年12月1日にインテルによってリリースされた。これには、バージョン1.02からのいくつかの細かい機能強化と、EFIドライバのモデルが記載されていた。 2005年、インテルは、同仕様の普及を行うために設立されたUnified EFI ForumへEFIの権利を移管した。以後は同フォーラムがEFI仕様の開発と普及につとめている。これを反映して、EFIはUnified EFI(UEFI)と名前を変え、多くのドキュメントが両方の用語を同じ意味で使用するようになった。元々のEFI仕様は依然としてインテルに所有権があり、EFIベースの製品へのライセンスもインテルが提供しているが、UEFI仕様は同フォーラムが所有している[6][10]。 2007年1月7日、UEFI仕様バージョン2.1がリリースされた。暗号化の改善、ネットワーク認証、ユーザインタフェースのアーキテクチャ(UEFI中にある対人インタフェース)が追加されている。最新のUEFI規格は2.6(Errata A)である。 インテルによる開発から10年以上たった2011年、2TB以上の容量を持つハードディスクに対応するために、P67、H67、H61、Z68チップセットを使用したマザーボードでUEFIの採用が本格化した[11]。 EFI仕様によって定義されたインタフェースは、プラットフォーム情報などのデータテーブルを持っている。この情報やEFIの機能はブートローダーやOSが利用できる。UEFIファームウェアには以下のような技術的利点がある[12]。 従来のSystem BIOSに対する強化点としては、ACPIやSMBIOSがすでにEFIの中にあるため、16ビットで動作するインタフェースに依存せずに使用できることが挙げられる。 マスターブートレコード(MBR)などの標準的なPCのディスクパーティションの処理に加えて、EFIではGUIDパーティションテーブル(GPT)をサポートしている。これによりPCでのディスクパーティションの容量の限界と領域の数の制限は拡張され、同じ時期に開発された2TB以上のシリアルATA接続の内蔵ハードディスクからの起動がサポートされた[14]。GPTでのディスクとパーティションの最大サイズは9.4ZB(273バイト)である[14][15]。EFI規格ではファイルシステムには言及していないが、UEFI規格ではFAT12、FAT16、FAT32のサポートを必須としている。 バージョン2.3では、Itanium、x86、x86_64、ARMアーキテクチャをサポートしている(バインディングが存在する)。 System BIOSは16ビットのIntel 8088を採用したIBM PCの設計に基づいているため、16ビット・プロセッサモードと1MBのアドレス空間という制限があった[6][16]。一方、UEFIのプロセッサモードは32ビット(x86-32、ARM)または64ビット(x86-64、Itanium)である[6][17]。64ビットのUEFIではロングモードも可能であり、OSブート前の環境で64ビットアドレッシングの全メモリに直接アクセス可能である[18]。 UEFIでは、ファームウェアとOSのアドレス空間が一致していなければならない。たとえば、64ビットのUEFIからは64ビットのOSしかブートできない。 EFIはブートサービスを定義していて、これにはさまざまなデバイス上でテキストおよびグラフィカルなコンソールが利用できる機能や、バスやブロックデバイス、ファイルシステムの機能が含まれる。ブートサービスはExitBootServices()を呼び出すまでのファームウェアがプラットフォームを制御している状態でのみ利用可能である。また、OS動作中も利用できるランタイムサービスとしては、UEFI Graphics Output Protocol、UEFIメモリマップ、ACPI、SMBIOS、SMM、日付や時間サービス、NVRAMサービスなどがある。 EFIでは2つのバイナリモジュール間の通信に使うソフトウェアインタフェース群をプロトコルとして定義している。全てのEFIドライバは、このプロトコルに則って他のモジュールにサービスを提供しなければならない。 EFIの仕様では、標準的なアーキテクチャ依存のデバイスドライバに加えて、プロセッサに依存しないデバイスドライバ実行環境を提供しており、EFI Byte CodeまたはEBCと呼ばれている。システムのファームウェアは、その環境にロードされたもしくはその環境内にあるEBCイメージ用のインタプリタを実行できることを、UEFI仕様によって要求されている。その点、EBCはOpen Firmwareに似ている。これはハードウェアに依存しないファームウェアで、PowerPCベースのAppleのMacintoshやサン・マイクロシステムズのSPARCコンピュータなどの間で採用された。 いくつかのアーキテクチャに特化した(非EBCな)EFIデバイスドライバはOSから利用可能なインタフェースを持つことができる。これにより、OSに特化したドライバをロードしなくても、基本的なグラフィックスやネットワーク機能についてはOSがEFIに頼ることができる。 EFIブートマネージャーはまたOSを選択してロードするのにも使うことができる。これにより専用のブートローダ機構は必要がなくなる(OSのブートローダはEFIアプリケーションになる)。この場合、ブートセクタを使用せずに済むが、最初にロードすべき標準で定められた名前のファイルを、特殊なパーティションテーブルから参照できるようにしておく必要がある(ファイル名の例:\EFI\BOOT\boot[architecture name].efi)。 OSのブートローダーはUEFIアプリケーションの一種となるので、ファームウェアからアクセス可能なファイルシステム上にファイルとして格納しておく。
歴史
詳細EFIブートマネージャーとEFIデバイスドライバとの間の関連
2TiBを超える大きなディスクからブートできる[13]
より高速なブートが可能である
CPUに依存しないアーキテクチャ
CPUに依存しないドライバ
ネットワークも使用可能な柔軟なプレOS環境が利用できる
モジュール化設計が採用されている
ディスクのサポート
プロセッサのサポート
ブートサービス
プロトコル
デバイスドライバ
ブートマネージャー
Size:69 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef