2013-07-29 9 views
0

Я пытаюсь (м) карту следующий адрес в виртуальном адресном пространстве:Почему ММАП терпит неудачу при попытке отобразить 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'. Может ли кто-нибудь пролить свет на это или как это можно обойти.

+0

cdev сопоставления (и/dev/mem является символьным устройством) не разрешают 'MAP_PRIVATE', но' MAP_SHARED' должен работать, если все остальное в порядке. Вы говорите 'pa'' '0xf6c50'; что такое 'размер'? – torek

+0

Размер 36 @torek – Rohit

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^