Я пытаюсь (м) карту следующий адрес в виртуальном адресном пространстве:Почему ММАП терпит неудачу при попытке отобразить Upper BIOS памяти в виртуальном адресном пространстве
--- Phys Адрес является 0xf6c50 --- Это адрес является суммой базового указателя EBDA и окна памяти большего биоса (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