Skip to content
hikalium edited this page Jul 10, 2016 · 5 revisions

From http://wiki.osdev.org/UEFI (25 November 2015, at 09:40.)


(U)EFIもしくは(Unified) Extensible Firmware Interfaceは、x86や x86-64、 ARM、 Itaniumプラットフォームにおいて、OSとファームウエア間のインターフェイスを定義する規格です。元々となったEFIは、1990年代中頃にIntelによって、Itaniumプラットフォームのために開発されたものでした。2005年に、Intelはこの規格をUnified EFI Forumと呼ばれる、AMDやMicrosoft、Apple、そしてIntel自身を含むワーキンググループに移しました。現代的なPCはすべてUEFIファームウエアを含んでおり、またUEFIは商用・オープンソースいずれのOSでも広くサポートされています。またUEFIには、過去のOSのために後方互換性があります。

UEFIの基礎

UEFIと過去のBIOS

UEFIがBIOSを置き換えてしまうものである、というのはよくある思い違いです。実際のところ、旧来のマザーボードとUEFIベースのものはどちらも、BIOS ROMを持っており、そこには電源投入時のシステム初期化を行ったり、第三者のコードを読み込んでそれに制御を移すようなコードが含まれています。旧来のBIOSとUEFIの違いは、それらがブートローダーをどこから探してくるのかと、どのようにシステムを初期化するか、そしてどのような便利機能をそれらが提供するか、という3点です。

プラットフォームの初期化

旧来のシステムでは、通常のプラットフォーム初期化はすべてBIOSが行っていました。(メモリコントローラの設定やPCIバスの設定、BARのマッピング、グラフィックカードの初期化等々。) しかし、それらの設定が終わると、後方互換性のためにリアルモードに戻ってしまいます。 そのためブートローダーは、A20ゲートを有効にし、GDTとIDTを設定して、保護モードに切り替え、そしてx86-64CPUにおいては、ページングを設定して32ビットモードに切り替えなければなりませんでした。

UEFIはこれらを同様の手順で行いますが、加えてフラットなセグメント割り付けで保護モードを準備し、仮想アドレスと物理アドレスが同じになるようにページングを設定して32ビットモードへの移行も行います。A20ゲートも同様に有効にしてくれます。

また、UEFIによるプラットフォーム初期化は標準化されているため、ベンダに依存しない形でUEFIが拡張できるようになっています。

Clone this wiki locally