我正在尝试(m)将以下地址映射到虚拟地址空间:
---物理地址为 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,但这并没有太大变化。
这里的pa是上面由'ACPI_HI_RSDP_WINDOW_BASE'宏定义的地址。任何人都可以对此或如何解决这个问题有所了解。