1

Bootservices 関数 LoadImage を使用して、メモリから UEFI アプリケーション イメージをロードすることを検討しています。関数パラメータは次のとおりです。

typedef
EFI_STATUS
LoadImage (
  IN BOOLEAN BootPolicy,
  IN EFI_HANDLE ParentImageHandle,
  IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
  IN VOID *SourceBuffer OPTIONAL,
  IN UINTN SourceSize,
  OUT EFI_HANDLE *ImageHandle
  );

ロードする PE/COFF イメージが既に取り込まれている sourcebuffer を提供することが許可されている場合。現在 sourcebuffer を使用しており、有効な PE/COFF ファイルの内容でバッファを事前設定しました。これを SourceBuffer の下に渡し、DevicePath を Null に設定します。エラー「 」が表示されますEFI_LOAD_ERROR Image was not loaded because the image format was corrupt or not understood

私は何を間違っていますか?

4

1 に答える 1

3

メモリ バッファに関する情報をデバイス パスとしてDevicePath引数に指定する必要があります。

UEFI 2.5 仕様の第 9 章Device Path Protocolを参照してください ( UEFI フォーラムから)。特に 9.3.2.3 Memory Mapped Device Path .

ファイル全体をそのままロードする必要があります。セクションを個別に選択する必要はありません。

例として、まさにこれを行うGRUB arm64 Linux loaderを見ることができます。

于 2015-07-03T13:47:41.060 に答える