2013-07-29 108 views
0

我想(米)以下地址映射到虛擬地址空間時,爲什麼MMAP失敗:試圖映射上BIOS的內存虛擬地址空間

---物理學地址是0xf6c50 --- 這地址是EBDA基本指針和高位BIOS存儲器窗口的總和(ACPI_HI_RSDP_WINDOW_BASE)

其目的是將ACPI表映射到進程的地址空間並稍後使用。

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

我打開一個文件進行讀取「的/ dev/MEM」使用PREAD。我到達的地址和讀取ACPI頭結構,一旦簽名匹配我希望將其映射到虛擬地址空間,但是當我這樣做,我得到一個錯誤,如: 「無法分配內存」

我使用的是FreeBSD 8.x。我可以證實,一般mmap的作品。導致錯誤的呼叫如下:

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

我試過甚至使用MAP_SHARED,但該din't以某種方式改變很多。

這裏pa是上面由'ACPI_HI_RSDP_WINDOW_BASE'宏定義的地址。任何人都可以闡明這一點或如何解決這個問題。

+0

cdev映射(並且/ dev/mem是字符設備)不允許使用MAP_PRIVATE,但如果一切正常,則應使用MAP_SHARED。你說'pa'是'0xf6c50';什麼是「尺寸」? – torek

+0

尺寸爲36 @torek – Rohit

回答

相關問題