0

次のアドレスを仮想アドレス空間に(m)マップしようとしています:

---物理アドレスは 0xf6c50 です --- このアドレスは、EBDA ベース ポインターと上位 Bios メモリ ウィンドウ (ACPI_HI_RSDP_WINDOW_BASE) の合計です。

目的は、ACPI テーブルをプロセスのアドレス空間にマップし、後で使用することです。

    acpi_mem_fd = open("/dev/mem", O_RDONLY);

ファイル記述子を開いて「/dev/mem」を読み取ります。プリアドを使用してアドレスに到達し、ACPI ヘッダー構造を読み取ります。署名が一致したら、それを仮想アドレス空間にマップしたいのですが、そうするとエラーが発生しますのような:「メモリを割り当てることができません」

FreeBSD 8.x を使用しています。一般的に mmap が機能することを確認できます。エラーにつながる呼び出しは次のとおりです。

    map->va = mmap(0, size, PROT_READ, MAP_PRIVATE, acpi_mem_fd, pa);

MAP_SHARED も使ってみましたが、どうもあまり変わりません。

ここで pa は、「ACPI_HI_RSDP_WINDOW_BASE」マクロによって定義された上記のアドレスです。誰でもこれに光を当てることができますか、またはこれを回避する方法はありますか?

4

1 に答える 1