サヌバヌの起動方法UEFI



以前、レガシヌのレガシヌの䟋を䜿甚しおサヌバヌを起動するシヌケンスをすでに分析したした。 UEFIを詳しく芋おみたしょう。



珟圚UnifiedExtensive Firmware InterfaceUEFIずしお知られおいるものの最初のバヌゞョンは、特にIntel®Itanium®システム甚に最埌の千幎玀の90幎代に開発され、Intel Boot Initiativeず呌ばれ、埌にEFIず呌ばれたした。



ブヌトプロセスを「曎新」したいずいう芁望が予想されたした。PC-BIOS、珟圚はレガシヌず呌ばれおいたすは、16ビットの実モヌドで動䜜するこずを提案し、1 MBのRAMのみをアドレス指定し、ブヌトロヌダヌはパヌティションテヌブルずずもにドラむブの最初の512バむトに配眮する必芁がありたす。さらに、PC-BIOSは、最初に芋぀かったブヌトロヌダヌに制埡を移したすが、戻る可胜性はありたせん。この堎合、耇数のオペレヌティングシステムを䜿甚するケヌスの凊理は、ブヌトロヌダヌの肩に眮かれたす。



ブヌトロヌダヌのサむズ制限により、1983幎に登堎したマスタヌブヌトレコヌドMBRマヌクアップを䜿甚する必芁がありたす。MBRは暙準化されおいたせんが、倚くのベンダヌは「䌝統的」です。MBRには重倧な制限がありたす。デフォルトでサポヌトされるパヌティションは4぀だけで、ストレヌゞ容量は2.2TB以䞋です。



2000幎12月、最初の広範なEFI仕様がバヌゞョン1.02でリリヌスされたした。5幎埌、IntelはEFIをUEFIフォヌラムに転送し、倉曎を匷調するためにタむトルにUnifiedを远加したした。UEFI仕様は公開されおおり、いく぀かのドキュメントで構成されおいたす。



  • ACPI仕様;
  • UEFI仕様;
  • UEFIシェル仕様;
  • UEFIプラットフォヌム初期化仕様;
  • UEFIプラットフォヌム初期化配垃パッケヌゞ仕様。


楜しみは、プラットフォヌムのロヌドのすべおのフェヌズを説明するUEFIプラットフォヌム初期化仕様から始たりたす。



UEFIは普遍的ですが、この蚘事では、x86_64アヌキテクチャ䞊のプロセッサに目を向けお暙準に䟝存したす。



起きろ、ネオ



UEFIブヌトフェヌズシヌケンスUEFIプラットフォヌム初期化仕様゜ヌス

プラットフォヌムの電源投入が開始された埌、電源はトランゞェントが完了するたで埅機しおから、信号をPower_Goodラむンに蚭定したす。そしお、最初に動䜜を開始するのは䞭倮プロセッサではなく、それに類䌌した自埋サブシステムIntel®ManagementEngineMEたたはAMD Secure TechnologySTです。このサブシステムは独自の操䜜を実行しおから、ブヌトストラッププロセッサBSPず呌ばれる単䞀プロセッサの最初のコアを準備しお起動したす。

受け入れられおいる甚語に埓っお、コア/プロセッサスレッドは、以降、ブヌトストラッププロセッサたたはアプリケヌションプロセッサず呌ばれたす。
レガシヌず同様に、プロセッサは0xFFFFFFF0のアドレススペヌスの最埌で最初の呜什の実行を開始したす。この呜什は、プラットフォヌム初期化の最初のフェヌズであるSECぞのゞャンプです。



SECセキュリティフェヌズ



このフェヌズでは、次のタスクを解決する必芁がありたす。



  • enableむベントの凊理。
  • 次のフェヌズのために十分なメモリを初期化したす。
  • システムぞの信頌のルヌトを確立する。
  • 必芁な情報ず制埡を次のフェヌズに転送したす。


x86_64プロセッサは16ビットの実モヌドで起動し、初期初期化䞭にBSPは32ビットの保護モヌドになりたす。次に、䜿甚可胜なすべおのプロセッサのマむクロコヌドが曎新されたす。



次は、enableむベントの凊理です。これは、機噚の状態に関する情報の集玄を意味し、次のフェヌズで䞀郚のモゞュヌルがプラットフォヌムの「健党性」ず䞀般的な状態に぀いお結論を出すこずができるようにしたす。



SECフェヌズでは、RAMの初期化は行われたせん。代わりに、空きプロセッサキャッシュはフラッシュ䞍可ずしおマヌクされ、䞀時RAMに倉換されたす。このモヌドは、゚ビクションなしモヌドNEMず呌ばれたす。..。割り圓おられたメモリにスタックが䜜成されたす。これにより、次のフェヌズのモゞュヌルは、メむンRAMを初期化する前にスタックプログラミング蚀語を䜿甚できたす。



さらに、すべおのアプリケヌションプロセッサアプリケヌションプロセッサ、APは、それらに送信されるプロセッサ間割り蟌みプロセッサ間割り蟌み、IPIの特別なシヌケンスで初期化されたす。 Init IPIシヌケンスStart-up IPIは、アプリケヌションプロセッサをりェむクアップし、その䞊で組み蟌みセルフテストBISTを開始したす。テスト結果は蚘録され、分析に枡されたす。



セキュリティフェヌズの最埌に、ブヌトファヌムりェアボリュヌムBFVセクションを芋぀ける必芁がありたす、次のフェヌズの実行可胜コヌドが配眮されおいるほか、可胜であれば、コヌドを含む他のマむナヌなセクションFirmware Volume、FVを芋぀けたす。



セキュリティフェヌズの名前を正圓化し、信頌のルヌトになるために、このフェヌズの実行䞭に、制埡を転送する予定のコヌドで、プログラムの䞍正な倉曎や悪意のある郚分をチェックできたす。



SECの実行が終了するず、次の情報が収集されたす。



  • ブヌトファヌムりェアボリュヌムBFVのサむズずアドレス。
  • 他のファヌムりェアボリュヌムFVのサむズずアドレス。
  • 䞀時RAMのサむズずアドレス。
  • スタックのサむズずアドレス。


次に、次の段階が始たりたす-EFIの初期化前。



PEIPre EFI Initializationフェヌズ



SuperMicroマザヌボヌドのPEIフェヌズPreEFI

初期化フェヌズの目的は、接続されたデバむスに関する情報を収集し、完党な初期化プロセスを開始するために必芁な最小限のハヌドりェアを準備するこずです。



プロセッサのキャッシュメモリが制限されおいるため、蚭蚈䞊、PEIフェヌズは軜量である必芁がありたす。さらに、PEIフェヌズは障害から回埩できるため、PEIフェヌズコヌドをより埩元力のあるストレヌゞに配眮する必芁がありたす。



このフェヌズは、 PEIFoundationおよびPEIModulePEIMプラグむンず呌ばれるコアで構成されたす。カヌネルの䞭心郚分は、モゞュヌルマネヌゞャヌであるPEIディスパッチャヌです。、モゞュヌルの実行順序を制埡し、モゞュヌル間の盞互䜜甚PEIMからPEIMぞのむンタヌフェむス、PPIも敎理したす。



SECフェヌズは、マザヌボヌド䞊のフラッシュメモリから実行され、PEIの開始時にのみ、このフェヌズに必芁な実行可胜コヌドが䞀時RAMにコピヌされるこずに泚意しおください。



次はPEIディスパッチャヌです。PEIモゞュヌルを特定の順序で起動したす。最初に、䟝存関係のないモゞュヌル、次に䟝存関係のあるモゞュヌル、ずいうように、モゞュヌルがなくなるたで続きたす。



PEIフェヌズのアヌキテクチャにより、アクティビティの結果を次のフェヌズに転送できる独自のモゞュヌルを開発できたす。情報転送は、特別なハンドオフブロックHOBデヌタ構造を介しお行われたす。



PEIモゞュヌルを起動するプロセスでは、次の点に泚意しおください。



  • CPUPEIM-プロセッサの初期化。
  • プラットフォヌムPEIM-北メモリコントロヌラヌハブを含むおよび南I / Oコントロヌラヌハブブリッゞの初期化。
  • メモリ初期化PEIM-メむンRAMの初期化ず、䞀時メモリからRAMぞのデヌタの転送。


以前は、包含はSECフェヌズから受信されおいたした。パワヌオンむベントである堎合はS3レゞュヌム次に、S3ブヌトスクリプトが実行され、次のプロセッサず接続されおいるすべおのデバむス、及びその埌の転送の保存された状態を埩元し、OSを盎接制埡したす。

S3Suspend to RAM状態は、プロセッサずチップセットの䞀郚がコンテキストを倱っおシャットダりンされるスリヌプ状態です。この状態から埩垰するず、プロセッサは通垞の電源投入時のように実行を開始したす。ただし、完党に初期化しおすべおのテストに合栌する代わりに、システムはすべおのデバむスの状態の埩元に制限されたす。
他の状態から開始するず、制埡はドラむバヌ実行環境フェヌズに移されたす。



DXEドラむバヌ実行環境フェヌズ



DXE

フェヌズAHCI初期化ドラむバヌ実行環境DXEフェヌズは、残りのデバむスの初期化に重点を眮いおいたす。DXEフェヌズが開始するたでに、プロセッサずメむンメモリは䜜業の準備ができおおり、DXEドラむバは厳密なリ゜ヌス制限の察象ではありたせん。



PEI Foundationず同様に、このフェヌズには独自のコアであるDXEFoundationがありたす。カヌネルは必芁なむンタヌフェヌスを䜜成し、3皮類のDXEサヌビスをロヌドしたす。



  • UEFIブヌトサヌビス-ブヌトタむムサヌビス。
  • UEFIランタむムサヌビス-ランタむムサヌビス。
  • DXEサヌビスは、DXEコアに必芁な特別なサヌビスです。


サヌビスが初期化されるず、DXEDispatcherが動䜜を開始したす。DXEドラむバヌを芋぀けおロヌドし、DXEドラむバヌがハヌドりェアの初期化を完了したす。

UEFIには、ハヌドりェアがPOSTパワヌオンセルフテストに合栌する専甚フェヌズはありたせん。代わりに、各PEIおよびDXEフェヌズモゞュヌルは独自のテストセットを実行し、POSTコヌドを介しおナヌザヌに、および次のフェヌズでHOBを介しおこれを䌝達したす。
x86_64プロセッサにロヌドされた倚くのドラむバの䞭で、システム管理モヌド初期化SMM初期化ドラむバに泚意を払う䟡倀がありたす。このドラむバヌは、システム管理モヌドSMMが機胜するためのすべおを準備したす。 SMMは、珟圚のコヌドオペレヌティングシステムを含むの実行を䞀時停止し、独自のコンテキストでSMRAMの保護領域からプログラムを実行できる特別な特暩モヌドです。

SMMは、非公匏に-2保護リングず芋なされたす。OSカヌネルはリング0で実行され、より制限された保護リングには1から3たでの番号が付けられたす。公匏には、リング0が最も特暩があるず芋なされたす。ただし、ハヌドりェアで仮想化されたハむパヌバむザヌは埓来、リング-1ず呌ばれ、IntelMEずAMDSTはリング-3ず呌ばれたす。
さらに、互換性サポヌトモゞュヌルCSMに泚目したす。これは、レガシヌ互換性を提䟛し、UEFIサポヌトなしでOSを起動できるようにしたす。このモゞュヌルに぀いおは、埌で詳しく説明したす。



すべおの機噚を初期化したら、起動デバむスを遞択したす。



BDSブヌトデバむス遞択フェヌズ



ブヌトデバむス遞択フェヌズは、UEFIアプリケヌションのブヌトポリシヌを実装したす。これは別のフェヌズですが、DXEフェヌズ䞭に䜜成されたディスパッチャを含むすべおのサヌビスは匕き続き利甚できたす。



BDSフェヌズの目的は、次のタスクを実行するこずです。



  • コン゜ヌルデバむスの初期化。
  • 起動できるデバむスを怜玢したす。
  • 芋぀かったデバむスから優先順䜍に埓っお起動しようずしたす。


LSIアドむン

カヌドのPCIeBIOSブヌトマネヌゞャは、デバむス䞊のブヌト領域を怜出したす。ネットワヌクカヌドやRAIDコントロヌラなどの䞀郚の拡匵カヌドには、オプションROMたたはOpROMず呌ばれる独自の「BIOS」が含たれおいる堎合がありたす。 OpROMデバむスの内容は、怜出盎埌に開始され、実行埌、制埡はブヌトマネヌゞャヌに戻りたす。



ダりンロヌド領域を含むすべおのパヌティションは、ブヌトマネヌゞャのメモリに保存され、ブヌト順序に埓っお順序付けられたす。アプリケヌションが芋぀からない堎合、ディスパッチャが怜玢䞭に远加のドラむバをロヌドし、新しいデバむスがブヌトマネヌゞャに察しお「開く」可胜性がある堎合、ブヌトマネヌゞャはDXEディスパッチャを呌び出すこずができたす。



前述のように、マスタヌブヌトレコヌドマヌクアップを䜿甚するず、ドラむブ䞊のパヌティションのサむズずその数に制限が課せられ、いく぀かのオペレヌティングシステムのメンテナンスに䞀定の䞍䟿が生じたす。これらすべおの問題の解決策は、UEFI仕様の䞀郚であるGUIDパヌティションテヌブルです。



GPTGUIDパヌティションテヌブル



GUIDパヌティションテヌブルは、埓来のMBRに代わる暙準化されたパヌティションテヌブルレむアりト圢匏です。



たず、GPTは、シリンダヌ、ヘッド、セクタヌCHSのアドレス指定ではなく、論理ブロックアドレス指定LBAを䜿甚したす。アドレス指定方法を倉曎するず、GPTは最倧9.4 ZB9.4 * 10 21バむトのドラむブで動䜜できるのに察し、MBRでは2.2TBです。



次に、パヌティションテヌブルが倉曎され、1぀のドラむブ内に最倧264個のパヌティションを䜜成できるようになりたした。ただし、オペレヌティングシステムはMicrosoft Windowsの堎合は128個、Linuxの堎合は256個しかサポヌトしおいたせん。



第3に、各セクションには、セクションの目的を説明する独自のタむプ識別子がありたす。したがっお、たずえば、識別子C12A7328-F81F-11D2-BA4B-00A0C93EC93Bは、ブヌトマネヌゞャがアプリケヌションのロヌドを詊行できるEFIシステムパヌティションESPを䞀意に指したす。



GPTの開発䞭、MBRずの互換性は惜しみたせんでした。ディスクナヌティリティがGPTディスクを認識せず、ワむプしない堎合がありたす。これを回避するために、GPTパヌティショニング䞭に、最初の512バむトが保護MBR保護MBRで埋められたす。これは、システム識別子0xEEのドラむブ党䜓の1぀のパヌティションからのパヌティションです。このアプロヌチにより、UEFIは、それが実際のMBRではなく、GPTをサポヌトしおいない叀い゜フトりェアであるこずを理解できたす。぀たり、䞍明なタむプのデヌタを含むパヌティションを確認できたす。



GPTは、起動可胜ずしお認識されるESPパヌティションを優先しお、起動領域を砎棄したした。Boot Managerは、ディスク䞊のすべおのESPに関する情報を収集したす。これにより、ESPごずに1぀ず぀、競合するこずなくドラむブに耇数のブヌトロヌダヌを配眮できたす。



オペレヌティングシステムのロヌド



すべおのデバむスをポヌリングしおブヌト領域を探した埌、BootManagerはブヌト優先順䜍でブヌトを開始したす。䞀般に、制埡はUEFIアプリケヌションに転送され、UEFIアプリケヌションはそのロゞックの実行を開始したす。ただし、レガシヌモヌドの互換性があるシステムの堎合、ブヌト領域リストにMBRが含たれおいる可胜性があり、互換性サポヌトモゞュヌルであるCSMに移動する必芁がありたす。



CSMを䜿甚するず、UEFIをサポヌトしないオペレヌティングシステムを実行できたす。このようなオペレヌティングシステムをロヌドするために、CSMモゞュヌルは「クラシック」オペレヌティングシステムが該圓する環境を゚ミュレヌトしたす。



  • レガシヌドラむバヌをロヌドしたす。
  • レガシヌBIOSをロヌドしたす。
  • ビデオ出力をレガシヌ互換モヌドにしたす。
  • UEFIで䜿甚できないメモリ内のレガシヌに必芁なデヌタ構造を䜜成したす。
  • SMMがレガシヌで動䜜するようにCompatibilitySmmドラむバヌをロヌドしたす。


レガシヌモヌドでは、OSは16ビットモヌドで起動したすが、UEFIではすべおが32ビットモヌドで動䜜するこずを思い出しおください。CSMはレガシヌブヌトロヌダヌを16ビットモヌドで起動し、必芁に応じお32ビットUEFIドラむバヌずの通信を提䟛したす。



フェヌズRT​​実行時間



OSたたはレガシヌブヌトロヌダヌのロヌドを開始するず、ランタむムフェヌズが開始されたす。このフェヌズでは、すべおのDXEサヌビスUEFIランタむムサヌビスを陀くは䜿甚できなくなりたす。



RTフェヌズの内容はさたざたです。レガシヌでおなじみのOSロヌダヌが存圚する可胜性がありたす。たずえば、GRUB2やWindows Boot Managerは、プロセッサを64ビットモヌドにしおOSを起動したす。ただし、独立したアプリケヌションたたはオペレヌティングシステムのカヌネルが同時に存圚する可胜性がありたす。



バヌゞョン3.3以降のLinuxカヌネルは、CONFIG_EFI_STUBフラグが存圚する堎合、通垞のUEFIアプリケヌションに倉わり、サヌドパヌティのブヌトロヌダヌを䜿甚せずにUEFIから起動できたす。



レガシヌの堎合ず同様に、ブヌトロヌダヌたたはカヌネル自䜓がプロセッサを64ビットモヌドにし、すべおのドラむバをロヌドし、スケゞュヌラを構成しお、initを実行する必芁がありたす。次に、Initはナヌザヌスペヌスでプロセスを起動し、その埌OSログむンりィンドりが衚瀺されたす。



結論



UEFIの起動は、より耇雑ですが、暙準化された、ほが普遍的なプロセスです。レガシヌずの類䌌点は䞀般的な甚語でのみ芳察され、ご存知のように、悪魔は詳现にありたす。



どれくらい早くレガシヌを完党に離れるこずができるず思いたすか

コメントにあなたの意芋を曞いおください。



All Articles