UEFIという用語に正確に出会ったとき、私はブートローダーについて勉強していました。UEFI に関するいくつかのことは理解できます。それでも、UEFI を使用したシステムはどのモード (Real、Protected、Long) で起動しますか? 通常のブートローダーが UEFI で動作しない場合、UEFI を処理する際のブートローダーの代替手段は何ですか? また、アセンブリ以外にプログラミングを作成する必要はありますか?
5 に答える
UEFI ファームウェアは、64 ビット プラットフォームでは 64 ビット ロング モードで、32 ビット プラットフォームではフラット モードで実行されます。BIOS とは異なり、UEFI は CPU から独立した独自のアーキテクチャと独自のデバイス ドライバーを備えています。UEFI はパーティションをマウントし、特定のファイル システムを読み取ることができます。
x86 コンピューターに UEFI が装備されている場合、インターフェイスはシステム ストレージを検索して、EFI システム パーティション (ESP) としてマークする特定のグローバル一意識別子 (GUID) でラベル付けされたパーティションを探します。ところで、Windows はこのパーティションをマウントせず、OS で見ることができません。ただし、VBR のパーティション タイプを (HexWorkshop を使用して) 通常の FAT32 コードに変更するだけで、OS にマウントされるというトリックがあります。
このパーティションには、EFI アーキテクチャ用にコンパイルされたアプリケーションが含まれています。一般に、UEFI アプリケーション/ローダーを作成するためにアセンブラーを扱う必要はありません。それは単なる通常の C コードです。デフォルトでは、「EFI/BOOT/BOOTX64.EFI」にあります。ブートローダーが手動または自動で選択されると、UEFI はそれをメモリに読み込み、ブート プロセスの制御を渡します。
この質問に対する良い答えは次のとおりです。
他の最新の 64 ビット マシンには、新しい EFI ファームウェアがあります。これらは、ディスクのセクター #0 からブートストラップ プログラムをまったくロードしません。これらは、EFI ブート マネージャーが EFI ブート ローダー アプリケーションをロードして実行することによってブートストラップします。このようなプログラムは、保護モードで実行されます。これが EFI ブートストラップ プロセスです。
一般に、EFI ファームウェアは、プロセッサのリセットを終了するいくつかの命令内で保護モードに切り替わります。保護モードへの切り替えは、EFI ファームウェアの初期化のいわゆる「SEC フェーズ」の早い段階で行われます。技術的には、32 ビット以上の x86 プロセッサは適切なリアル モードでは起動しませんが、口語的に非リアル モードとして知られているモードで起動します。(CS レジスタの最初のセグメント記述子は、従来のリアル モード マッピングを記述していないため、これが「非現実的」になります。)
そのため、これらの EFI システムは、ネイティブに EFI ブートローダーにブートストラップするとき (つまり、互換性サポート モジュールを使用しないとき) に、非リアル モードから保護モードに直接切り替わるため、適切なリアル モードにまったく移行しないと言えます。それ以降は保護モードのままです。
「UEFI を使用するシステムはどのモード (Real、Protected、Long) で起動しますか?」と尋ねられたとき、どういう意味ですか? プロセッサは、過去の 80386 のモードと同様のモードで実行を開始します。しかし、あなたは本当に気にしますか。OS ローダー コードに制御が与えられている場合、プロセッサのモードを本当に気にしませんか? また、OS ローダー コードに提供されるサービスについても気にします。
環境は UEFI 仕様で定義されています。 UEFI仕様の最新バージョン
どの言語を使用するかについては、アセンブリから始めるとよいでしょう。しばらくしてから、C やその他の高級言語を使用する方がおそらく簡単です。
その他の背景:
ここには、正しく使用することに常に注意を払っているわけではない用語がたくさんあります。
プロセッサがリセットから復帰したときに実行されるコードは、システム内のさまざまなハードウェアの多くの初期化を行うシステム ファームウェアです。
UEFI フォーラムが存在する前の x86 PC システムでは、システム ファームウェアは BIOS と呼ばれていました。当時の BIOS はすべての初期化コードを実行し、次にフロッピー ディスクまたはハード ドライブからいくつかのコードをロードして、そのコードに飛び込みました。BIOS は、ハードウェアの違いから OS を分離するのに役立つ、ハードウェアとオペレーティング システム間のいくつかのインターフェイスも提供しました。しかし、何も標準化されていませんでした。唯一の標準は、BIOS インターフェイスを使用する OS およびアプリケーション レベルのソフトウェアでした。
OS とアプリが正しく機能していれば、BIOS は正しいと見なされます。しかし、失敗がないことによってのみ、正しさを証明できます。したがって、新しい OS またはアプリケーションは、ある正しいシステムでは動作しますが、別の正しいシステムでは失敗します。
今日、私たちはこれらのインターフェースの実際の標準化を提供しようとしました。これらは UEFI フォーラムによって定義されています。今日、私は自分のシステムが UEFI 仕様に適合していることを証明できます。
人々が UEFI のようなことを言うとき、彼らは通常、OS が実行を開始する前に実行される、システムにインストールされている実際のシステム ファームウェアを指しています。しかし、私たちの多くは、アルファベットのスープをこぼしたかのように、これらの用語をいまだにいじっています。
ブート ローダーは、実際にはシステム ファームウェアによってメモリに読み込まれる OS 所有のコードであり、システム ファームウェアはハードウェアの制御をブート ローダーに渡します。システム ファームウェアの最後は UEFI ブート ローダーであると言えます。または、単に BDS がシステム ポリシーを使用して OS を検出すると言うこともできます。そして、あなたはその言葉に反対する人を見つけることができました.