UEFIが存在した後に起動する

最近、モバイルハードディスクのブートシステムに取り組んでおり、UEFIの多くの利点を発見しましたが、これまで注目されていなかったいくつかの問題も発見しました。
レガシーは従来のBIOS、UEFIは新しいBIOS
1、UEFI + MBRハードディスクレガシー
2、UEFI + GPTハードディスクなしbiosには独自の処理方法UEFIサポートがあり、linuxはbios-grubパーティション(約1M)を使用して
3、UEFIを解決します+ MBRハードディスク
4、UEFI + GPTハードディスク
今日のコンピューターは基本的にUEFIをサポートしていますが、サポート方法は同じではありません。BIOSで選択することもできます。
一般的に言えば、これはLegacy + MBRとUEFI + GPTの組み合わせです。ただし、Legacy + GPT、UEFI + MBRも実現できます。
ここに画像の説明を挿入しますCSM(互換性サポートモジュール)は互換性モジュールの略です。このオプションは、レガシーモードでのみ動作できるデバイス、およびUEFIをサポートしていないか完全にサポートできないオペレーティングシステムとの互換性のために設計されています。したがって、win7システムをインストールするには、Launch CSMをEnableに設定して、レガシーブート方式をサポートしていることを示す必要もあります。
一部のマザーボードでは、Secure Boot ControlがDisableに設定されている場合にのみ、Launch CSMオプションをLegacyに設定できます
。win7を変更する方法の2つのステップ:
(1)レガシーブートをサポートするようにBIOSを設定します。具体的な目標はSetです。セキュアブートコントロールを無効にし、互換性のある機能のCSMオプションを有効にし、ブートモードブートモード[UEFI /レガシー]をレガシーモードにします。
(2)ハードディスクのパーティションテーブルタイプをGUIDからMBRモードに変更します。

通常の起動については説明しません。レガシーは8086アセンブリを使用します。UEFIの99%以上がCを使用します。UEFIAPPとドライブはC / C ++を使用できます。
64ビットUEFIファームウェアは64ビットオペレーティングシステムであり(いくつかの2-in-1タブレット用の32ビットUEFIファームウェアは無視できます)、レガシーは16ビットです。
レガシーは、基盤となるハードウェアの詳細を直接対象としています。UEFIは、ファームウェア-OSインターフェイス、ブートサービス、およびランタイムサービスを通じて、オペレーティングシステムとブートデバイスの基盤となるハードウェアの詳細を保護します。
UEFIは拡張可能です。ほとんどのハードウェアはUEFIドライバーモジュールをロードすることで初期化できます。ドライバーモジュールはファームウェアまたはグラフィックカードのGOPなどのデバイスに配置でき、システムの起動時に自動的にロードされます。 。UEFIの各テーブルとプロトコルにはバージョン番号があり、スムーズにアップグレードできます。開発者は、仕様に従ってUEFIアプリケーションとドライバーを開発できます。
UEFI時間ベースの非同期操作により、CPUの効率が向上し、待機時間が短縮されます。
UEFIは、外部デバイスの割り込み動作モードを破棄し、クロック割り込みのみを保持します。外部デバイスの動作は、イベント+非同期動作を採用し、外部デバイスは起動時にオンデマンドでロードされます。
UEFIにはセキュアブート機能があり、プログラムの証明書が信頼されている場合にのみ実行されます。
UEFIモードで起動すると、EFIドライバーとアプリケーションが起動し、システムが起動している限り、直接64ビットになります。(いくつかの2-in-1タブレットの32ビットUEFIファームウェアは無視されます。)
次に、UEFIモードで起動することを選択した場合、すべての16ビットMS-DOSユーティリティ、DOSツールキットおよびその他のメンテナンスツール、および32ビットアプリケーションは利用できません。ロードされ、開始されました。UEFIは64ビットシステムを使用してインストールする必要があります!
したがって、UEFIモードでは、32ビットシステムを起動できません。

GPTパーティションテーブルは、ディスクの論理セクターNo. 2-33にあり、合計32セクターを占め、128(4 * 32)のパーティションテーブルエントリを収容できます。各パーティションテーブルエントリのサイズは128バイトであるため、WindowsシステムではGPTディスクで128のプライマリパーティションを作成できます。
パーティションテーブルエントリには、パーティションの開始アドレスと終了アドレス、パーティションタイプのGUID、パーティションの名前、パーティション属性、およびパーティションGUIDが記録されます。

GPTにもMBRに似たものがありますが、ブートレコードが空で、Windowsディスク署名が使用可能で、パーティションテーブルもありますが、この形式が存在しないため、パーティション形式はEEとして定義されているため、古いものです。ディスクパーティションツールが開かれますディスクはディスクのフォーマットを認識できないことを検出し、ディスクはパーティション分割されません。

これを見て、私たちはすでに理解しているので、実際には、パーティションテーブルは同じものです。GPTとMBRは、ハードディスクデータを割り当てる2つの方法にすぎません。
GPTパーティションのセクター0は、マスターブートレコードまたはパーティションテーブルに書き込むことができますが、手動で変換する必要があります。
したがって、従来のレガシーBIOSがGPTパーティションを開始することは完全に実行可能です。
また、UEFI自体がハードディスクの最初のFAT32パーティションの\ efi \ boot \ bootx64.efiファイルを読み取ってシステムを起動するため、パーティション形式がMBRかGPTかに関係なく、UEFIの通常の起動には影響しません。
これは、従来のBIOSでGPTディスクのオペレーティングシステムを正常に起動するための理論的基礎です。UEFIにMBRディスクのオペレーティングシステムを起動させます。
UEFIはMBRを開始します。まず、MBRパーティションテーブルにはFAT32パーティションが必要です。UEFIにはアクティブなパーティションがないため、アクティブなパーティションであるかどうかは関係ありません。
FAT32パーティションのBCDファイルを手動で修復し、BOOTICEツールで編集して
、従来のレガシーBIOSでGPT開始するだけです。これは少し複雑ですが、実際には少し複雑です...
実際、から選ぶ。
まず、gptパーティションテーブルを起動できる従来のレガシーを備えた大容量のハードディスクが必要です。これは非常に面倒で、いくつかの技術的なルートがあります。まず、レガシーはマスターブートレコードの440バイトを読み取ることができますが、読み取った後はパーティション形式を認識できないため、を含むミラーファイルを作成する必要があります。使用する必要のある情報。現在、一部のセクター編集は直接行われ、特定のセクターにジャンプします。このセクターの情報を使用してターゲットに誘導するのは非常に面倒であり、この手法は複雑すぎて普及できません。
もう1つの技術的なルートは、カメレオン、クローバー、クローバー、デュエットで一般的なuefiをシミュレートすることです。この技術的なルートは比較的単純です。1つはmbr、もう1つはgptの2つのハードディスクがある場合、これは非常に簡単です。mbrディスクから起動し、シミュレートされたuefiをロードしてから、gptディスクを使用してシステムを起動します。
ただし、単一のgptディスクの場合は、セクター編集を行い、前にスペースを残してから、画像を16進数で書き込み、メモリにロードしてから、uefiをシミュレートするプログラムを実行する必要があります。これは少し複雑です。たとえば、回路を実行している場合は、ACをDCに変換してから、電圧を整流および低減してから、フィルタリングすることができます。

「EFIシステムパーティション」とは、FATバリアント(UEFI仕様で定義されているバリアントの1つ)でフォーマットされたパーティションのことです。パーティションには、ファームウェアがパーティションを識別しやすいように、特定のGPTパーティションタイプが割り当てられます。このパーティションの目的は上記のとおりです。ファームウェアレイヤーは実際に「通常の」ディスクパーティションのデータを読み取ることができます
。UEFI仕様では、より直感的で厳密な方法を採用しようとしています。ファームウェアが他の操作を実行することを禁止することはめったにありません。UEFI仕様は、他の形式で記述されたコードの実行、他のタイプのパーティションテーブルの読み取り、およびUEFIバリアントファイルシステム(非FAT)でフォーマットされたパーティションの読み取りに使用されるファームウェアの記述に反対していません。ただし、UEFI互換ファームウェアは、少なくともEFI実行可能ファイルの実行、GPTパーティションテーブルの読み取り、ESPの読み取りができる必要があるため、オペレーティングシステムなどを作成していて、UEFI互換ファームウェアで実行する場合は、次の手順も実行する必要があります。 UEFI仕様、これがEFIシステムパーティションの概念が非常に重要である理由です:それは(少なくとも理論的には)UEFI FATでフォーマットされたパーティションにEFI実行可能ファイルを置くことを可能にし、GPTパーティションタイプは正しいです。さらに、システムファームウェアが必要ですパーティションを読み取ることができます。このメカニズムは非常に厳密であり、BIOSの「ファームウェア実行可能ファイル」と同等です。UEFI仕様は、3つの重要な基盤を提供します。これらの重要な基盤は、上位層アーキテクチャの通常の操作の基盤です。

读取分区表
访问某些特定文件系统中的文件
执行特定格式的代码 

BIOSファームウェアによって提供される機能と比較して、UEFIははるかに豊富な機能を備えています。ただし、ファームウェアレイヤーが(ディスクだけでなく)複数のターゲットの起動を処理できるというビジョンを完成させるには、他の基盤が必要です。ファームウェアがさまざまな可能な起動ターゲットを見つけて、対応する構成方法を提供できるメカニズムを確立する必要があります。 。MBRスペースでのブートローダーコード」
。UEFI経由でLinuxを起動した場合は、efibootmgrツールを使用してこれらすべての操作を完了することができます。Windowsにも対応するツールがありますが、Windowsのツールにはあま​​り詳しくありません。いくつかの典型的なツールを見てみましょう。 Fedoraフォーラムから転送したefibootmgrの出力は、わずかに調整されました。

[ルート@システムディレクトリ] #efibootmgr -v
BootCurrent:0002
タイムアウト:3秒
BootOrder:0003,0002,0000,0004
Boot0000 * CD / DVDDrive BIOS(3,0,00)
Boot0001 *ハードドライブHD(2,0,00 )
Boot0002 * Fedora HD(1,800,61800,6d98f360-cb3e-4727-8fed-5ce0c040365d)File(\ EFI \ fedora \ grubx64.efi)
Boot0003 * opensuse HD(1,800,61800,6d98f360-cb3e-4727-8fed-5ce0c040365d) File(\ EFI \ opensuse \ grubx64.efi)
Boot0004 *ハードドライブBIOS(2,0,00)P0:ST1500DM003-9YN16G。
[ルート@システムディレクトリ]#この
例は非常に明確です。そこから細部を観察することができます。
最初の行は、「ブートメニュー」のどの項目から開始したかを示しています。2行目は非常に明白です(ファームウェアUEFIブートマネージャーがブートメニューと同様のインターフェイスを表示する場合、この行はデフォルト項目のブートを続行する前のタイムアウトを示します)。BootOrderは、リスト内のスタートアップ項目が試行される順序です。残りの出力には、実際の起動項目が表示されます。各スタートアップアイテムの具体的な役割については、後で説明します。
UEFIファームウェアが調整なしで正常に完全に起動された場合(後で説明します)、UEFIファームウェアは、BootOrderにリストされている順序で「ブートメニュー」の各「アイテム」から起動しようとします。したがって、このコンピューターでは、UEFIファームウェアは「opensuse」という名前のアイテムを起動しようとします。起動に失敗した場合は、「Fedora」という名前のアイテム、「CD / DVDドライブ」、最初の2つのアイテムの順に起動してみてください。ハードドライブ」。

「フォールバックパス」UEFIネイティブブートアイテム

UEFI仕様では、このタイプのブートマネージャーアイテムを開始するための「フォールバックパス」が定義されています。これは、BIOSドライブブートのように機能します。標準の場所でブートローダーコードを探します。ただし、詳細はBIOSとは異なります。

この方法で起動しようとすると、ファームウェアが実際に実行することはかなり単純です。ファームウェアは、ディスク上のすべてのEFIシステムパーティションを(ディスク上のパーティションの順序に従って)トラバースします。ESP内で、ファームウェアは特定の場所で特定の名前のファイルを探します。x86-64 PCでは、ファームウェアはファイル\ EFI \ BOOT \ BOOTx64.EFIを探します。ファームウェアは実際には\ EFI \ BOOT \ BOOT {コンピュータータイプの略語} .EFIを探します。ここで、「x64」はx86-64PCの「コンピュータータイプの略語」です。ファイル名は、BOOTIA32.EFI(x86-32)、BOOTIA64.EFI(Itanium)、BOOTARM.EFI(AArch32、32ビットARM)、およびBOOTAA64.EFI(AArch64、64ビットARM)の場合もあります。次に、ファームウェアは最初に見つかった有効なファイルを実行します(もちろん、ファイルはUEFI仕様で定義された実行可能形式に準拠している必要があります)。

このメカニズムは、日常的に使用されるオペレーティングシステムを起動するようには設計されていません。その設計目的は、ホットプラグ対応のデバイスに依存しないメディア(ライブイメージやオペレーティングシステムメディアなど)を開始することに似ています。これは、このメカニズムの一般的な使用法でもあります。Linuxまたはその他のオペレーティングシステムのUEFI互換のライブメディアまたはインストールメディアを確認すると、デバイスの開始位置(またはその近く)にGPTとFATパーティションが含まれていることがわかります。このパーティションのGPTパーティションタイプは次のとおりです。 EFIシステムパーティションとして識別されます。そのパーティションには、上記の特別な名前のファイルの少なくとも1つを含む\ EFI \ BOOTディレクトリがあります。このメカニズムは、FedoraLiveまたはインストールメディアをネイティブUEFIモードで起動するときに使用されます。BOOTx64.EFI(またはその他の)ファイルは、メディアに含まれている実際のオペレーティングシステムを起動するために、残りの起動プロセスを処理します。

Linuxディストリビューションは、efibootmgrツールを使用してUEFIブートマネージャーを処理します。ネイティブUEFIインストールを実行する場合、ブートロードに関するLinuxディストリビューションの実際の操作は非常に簡単です。EFIシステムパーティションを作成し(このパーティションが存在しない場合)、対応する構成を使用してEFIブートローダー(通常はgrub2)をインストールします。 -efi、ただし例外があります)EFIシステムパーティションの正しいパスにインストールしてから、efibootmgrを呼び出して、対応するUEFIブートマネージャーアイテム(ブートローダーを指す)を追加します。EFIシステムパーティションがすでに存在する場合、ほとんどのディストリビューションは既存のパーティションを使用します(ただし、新しいEFIシステムパーティションを作成してこの新しいパーティションを使用することは完全に可能です):UEFIは、それが緩い仕様である限り、すでに述べました。論理的にはその設計に従っており、EFIシステムパーティションがいくつあるかは関係ありません。

多くのファームウェアのスタートアップコンフィギュレーションインターフェイスは、より直感的です。優れたファームウェア設計では、少なくとも起動シーケンスとその中の各起動アイテムが表示され、ユーザーはアイテムを追加/削除したり、起動シーケンスを変更したり、特定の起動で元の起動シーケンスを無視したりできます(その起動にのみ有効、またはファームウェアは特定のメニュー項目を直接起動します。ファームウェアをBIOS互換モードまたはUEFI「フォールバック」モードで「このディスクを起動」させることもできます。私のファームウェアはそれを実行できます)。このタイプのインターフェースは通常、完全なネイティブUEFIブートアイテムを名前のみで表示できます(前述のFedoraおよびOpenSUSEの例など)。efibootmgr-vの出力をチェックして、それらが何を実行するかを詳細に理解する必要があります。 。

一部のファームウェアは構成を抽象化して単純化しようとしますが、最終的な結果はまちまちです。たとえば、「有効または無効」BIOS互換モードを選択できる場合、ファームウェアは、接続されたドライブのUEFIブートマネージャー構成のBIOS互換項目を追加または削除する可能性があります。ネイティブUEFIブートを「有効または無効」に選択できる場合、ユーザーがネイティブUEFIブートを「無効」にすると、ファームウェアがUEFIブートマネージャー構成を変更し、BootOrderからすべてのネイティブUEFIブートアイテムを削除する可能性があります。

ネイティブUEFIブートおよびBIOS互換ブート

ユーザーは次のことを見落とすことがあります。

如果以“原生 UEFI”模式启动安装介质,安装介质将以原生 UEFI 模式安装操作系统:它将尝试向 EFI 系统分区写入 EFI 格式的启动装载程序,并尝试向 UEFI 启动管理器的“启动菜单”中添加启动项,用于启动该启动装载程序。
如果以“BIOS 兼容”模式启动安装介质,安装介质将以 BIOS 兼容模式安装操作系统:它将尝试向磁盘上的 MBR 空间写入 MBR 类型的启动装载程序。 


UEFI UEFIBIOS→EFIシステムパーティション→\ efi \ boot \ bootmgfw.efi→efi \ Microsoft \ Boot \ BCD→\ Windows \ system32 \ winload.efiでのWindowsブートプロセス
EFIパーティションには、システムの起動に必要なファイル(bootmgfw .efi)が格納されます。 、BCDなど)

uefiでLinuxを起動します

  1. 2つの方法があります
      。1.1uefiシェルから直接Linuxカーネルを起動します。1.2uefiシェル
      からgrubを起動してから、grubからlinuxカーネルを起動します。

  2. 何が必要ですか?   2.1linux
      カーネル2.2initrd
      ミラー
    2.3.nshサフィックス付き起動スクリプト(オプション、手動でコマンドを入力できます)
        .nshの内容は次のとおりです
          。Imageinitrd= \ initrd.gz root = / dev / ram0 Earlycon = uart
      2.4 BOOTAA64.EFI(これは、arm64のEFIファームウェアであり、オプションです)
      注:これらのものは、fatファイルシステムに配置する必要があります。

  3. Linuxカーネルを起動するためのuefiシェルの操作プロセス
      3.1ターゲットパーティションを入力します
      Shell> fs0:
      FS0:>
      3.2 Linuxカーネルを起動します
      FS0:> boot.nsh

  4. スタートUEFIシェルからグラブし、その後は、Linuxカーネル起動
      対象のパーティションを入力4.1
      シェル> FS0を:
      FS0:>
      。4.2入力グラブ
      FS0:> BOOTAA64.EFI
      4.3設定での一時的なアクセスのためのルート・ノード
      グラブグラブ>ルート=( hd0、msdos1)(hd0、msdos1にはlinuxカーネルミラーリングとinitrdミラーリングがあります)4.4linux
      カーネルの起動
      grub> linux / Image initrd = /initrd.gz Earlycon = uart root =(hd0、msdos1)rw rootwait

おすすめ

転載: blog.csdn.net/seaship/article/details/111298362