TianocoreのEDK2を使用して独自のUEFIドライバーを作成しました。 OSがロードされるたびに実行したい。 bootmgfw.efi
を変更する必要がありますか? BootCheck.efi
に制御を渡し、Windowsのロードを実行した後にのみ制御を渡す方法は?
もう1つの質問ですが、ドライバーで使用できるフラグを追加するにはどうすればよいですか?最初の起動時に0
に設定し、その後の起動時に1
に設定する必要があります。
ステップバイステップガイドまたは有用な情報をいただければ幸いです、ありがとうございます。
@編集:それが可能であれば、ペンドライブまたはディスクを使用してインストールすることをお勧めします。
UEFIドライバーライターガイドには、UEFIドライバーをインストールするには次の つの方法 と記載されています。
そのためには、プラットフォームの製造元と協力する必要があります。プラットフォームメーカーは通常、ハードウェアOEM(HP、ギガバイトなど)です。製造時に、OEMはインストールするすべてのUEFIドライバーをファームウェアイメージにパッケージ化してフラッシュします(つまり、マザーボードのフラッシュチップに保存します)。最終的にはチップセットの製造モードを閉じ、サードパーティによるチップセットの変更を防ぎます。ファームウェアを更新するには、更新カプセルを作成し、OEMの秘密鍵で署名する必要があります。 一部のOEMは製造モードを閉じないという間違いを犯しました したがって、1つ(ブートキット/ルートキットを含む)はこれを利用して独自のUEFIドライバーをファームウェアにインストールできます。ただし、これは非常に複雑な作業であり、ほとんどのOEMがこの問題を修正しているため、この道を進む価値はありません。
ただし、VMwareイメージではそうする方がはるかに簡単なので、試してみたい場合は、これに従うことができます ガイド 。
PCIハードウェアデバイスを開発していないと思われるため、このオプションも適用できません。正直なところ、これがどのように詳細に機能するかもわかりません。
Driver Writer's Guideに記載されているように、ドライバービンをEFIシステムパーティションに保存してから、_Driver####
_およびDriverOrder
UEFI変数を更新する必要があります。
WindowsでEFIシステムパーティションにアクセスするには、管理者としてcmd
を実行し、_mountvol X: /S
_と入力し、X
をコンピューターで使用されていないドライブ文字に置き換えます。アクセスには引き続き管理者権限が必要であり、マウントされたドライブをエクスプローラーで表示することはできません。 diskpart
を使用したより長いメソッドについては、編集履歴を参照してください。
ここで、_Driver####
_およびDriverOrder
UEFI変数を更新するために、UEFIアプリケーションまたはWin32アプリケーションのいずれかを作成できます。 EFI仕様バージョン2.8 のセクション「3.1.1ブートマネージャープログラミング」では、これらの変数の処理方法に関する背景情報を提供し、セクション「3.1.3ロードオプション」では、関連するデータ構造と定数について詳しく説明します。 UEFIアプリケーションの場合は、SetVariable()
を使用します(仕様のセクション「8.2変数サービス」)。 Win32の場合は、 SetFirmwareEnvironmentVariableA
または SetFirmwareEnvironmentVariableExA
を使用します。
Win32サンプルの場合、 dumpEfiVars プロジェクトを見ることができます。変数を読み取るだけで、変数には書き込みませんが、コードは書き込みを実行するように簡単に適合させることができます。このツールを使用して、テストコンピューターの_Boot####
_変数とBootOrder
変数をダンプし、_Driver####
_とDriverOrder
がどのように見えるかを把握することもできます。ほとんどのコンピューターでは、EFIシステムパーティションにサードパーティのUEFIドライバーがインストールされていないため、_Driver####
_変数とDriverOrder
変数は空になります。
P.S.この質問は、スーパーユーザーよりもスタックオーバーフローの方が適切だと感じています。また、ドライバーの旗に関する質問は、別の投稿に値します。