すべての DXE ドライバーがロードされた直後、BDS フェーズの前に EFI アプリケーションを自動的にロードして実行できますか? DXE ドライバの直後にアプリケーションを .fdf ファイルに含めた場合、アプリケーションは自動的にロードされて実行されますか?
1 に答える
この質問は非常に難しいので、私の答えは表面をなぞるだけです。詳細については、私が言及したドキュメントをお読みください。
ハードウェア用の UEFI ファームウェアの完全なソース コードがある場合は、BDS フェーズの前に実行する UEFI モジュールを追加できます。それ以外の場合は、シェル コマンドExitBootServices
を使用して UEFI アプリケーションを追加することで、起動順序 (呼び出しの直前) のみに影響を与えることができます。この質問を確認してください。bcfg
BDS の前にコードを実行する場合は、DXE モジュール (つまりDRIVER
、RUNTIME_DRIVER
) である必要があります。使用できる多くのモジュール タイプがあり、正確にはユース ケースによって異なります。モジュールの種類の詳細については、INF ファイル仕様の付録 G を参照してください。
コードを実行するには、ファイルに追加するFDF
だけでは不十分です。FDF
ファイルには、フラッシュ レイアウトのみが記述されています。各バイナリが最終的なフラッシュ イメージに配置される方法と場所です。DXE ドライバーを追加するには、INF
ファイルをプラットフォームDSC
ファイルに追加する必要もあります。次に、INF に正しい[Depex]
セクションを作成します。これは次のように簡単です。
[Depex]
TRUE
あなたが理解しなければならない最後のことはDXE Dispatcher
. 各ブートDXE Dispatcher
は、既知のイメージ リストを繰り返し処理し、EFI_DRIVER_BINDING_SUPPORTED
関数 ( で定義EFI_DRIVER_BINDING_PROTOCOL
) を呼び出します。このメソッドは、サポートされているハードウェアがプラットフォームで利用可能かどうかを確認する必要があります。成功が返された場合EFI_DRIVER_BINDING_SUPPORTED
、他のドライバ バインディング メソッドが呼び出され ( EFI_DRIVER_BINDING_START
)、デバイスが起動します。エントリ ポイントはプロトコルの登録にのみ使用する必要があります。エントリ ポイントでデバイスを起動することはお勧めしません。
役立つリソース:
- EDK II 仕様- さまざまなファイル タイプ (
INF
、FDF
、DSC
などDEC
)の仕様 - 開発者リソース- Drivers Writers Guide および Drivers Wizard。
- EDK2 sourceforge - EDK2 に関する非常に役立つリソースのリポジトリ