Используйте do_mmap () в драйвере устройства Linux - PullRequest
4 голосов
/ 15 марта 2011

Устройство, на котором мы сейчас работаем, должно иметь адрес виртуальной памяти в пространстве пользователя, мы пытаемся использовать do_mmap (), как показано ниже:

*uvaddr = (void *)do_mmap(0, 0, size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS, 0);

Но мы получили следующую ошибку

Unable to handle kernel paging request for data at ad8

Можно ли использовать do_mmap () в драйвере устройства?Если нет, то какой правильный способ сделать это?

1 Ответ

1 голос
/ 15 марта 2011

Возможно, что do_mmap успешно, но uvaddr не указывает на правильное местоположение для сохранения результата.Чтобы убедиться в этом, сделайте что-то вроде:

void *mmap_result;
printk(KERN_DEBUG "uvaddr = %p", uvaddr);
mmap_result = (void *)do_mmap(0, 0, size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS, 0);
printk(KERN_DEBUG "mmap_result = %p", mmap_result);
*uvaddr = mmap_result;

Это должно точно сказать вам, что происходит сбой: вызов do_mmap или присвоение *uvaddr.

...