2013-07-29 75 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

回答

相关问题