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'宏定義的地址。任何人都可以闡明這一點或如何解決這個問題。
cdev映射(並且/ dev/mem是字符設備)不允許使用MAP_PRIVATE,但如果一切正常,則應使用MAP_SHARED。你說'pa'是'0xf6c50';什麼是「尺寸」? – torek
尺寸爲36 @torek – Rohit