2016-05-02 43 views
1

私はBIOSのint 15 - E820関数に慣れています。固定のという物理的な場所を選ぶことができます。あなたが望むものを置いて、それを上書きしません。その固定メモリアドレス(最初に仮想ポインタにマップするかもしれません)。UEFIからOSに情報を渡す

しかしUEFIのケースでは、私が知っている限り、ユーザー用に予約されたメモリ領域がないため、特定のメモリアドレスにバッファを割り当てることに頼ることはできませんでした。したがって、私はUEFIメモリメモリ関数を使用する必要があります - ではないポインタを返します。は固定されていません。

は、だから私の質問がある -

  1. それはOSが上がるいったん上書きされないバッファを割り当てることは可能ですか?

  2. どのようにOSに割り当てられたバッファのポインタを渡すことができるので、私はOSからアクセスすることができます(割り当ては、バッファ自体が上書きされないので、 )。

ありがとうございます!

+0

INT 15h、AX = E820hのいずれかのユーザ用に予約されたメモリ領域はありません。これは単にメモリの使用領域のリストを返します。この機能を使用するOSはメモリの一部の領域を使用しないように、変更されたリストを提供する独自のルーチンで置き換えることができます。同じUEFI関数 'GetMemoryMap'を使っても同じことができます。 –

答えて

1
  1. はい。 EfiRuntimeServicesDataのような、再生不可タイプのメモリメモリを割り当てます。
  2. UEFIが使用するメカニズムは、構成テーブルと呼ばれます。

注:EfiPersistentMemoryは全く違うものです。

構成テーブルは、ブートサービス中にInstallConfigurationTableを呼び出してインストールされます。この2つのパラメータは、GUIDと、渡すデータ構造の物理アドレスへのポインタです。このペアは、UEFI System Tableが指す配列にリンクされます。

Windowsでその情報を抽出する方法はわかりません。 Linuxでは、UEFIシステムテーブルはカーネル空間(efi->systab)でグローバルにアクセス可能であるため、そこからポインタを抽出できます。

関連する問題