LINUX.ORG.RU

Память, device -> User, do_mmap,


0

1

Доброго времени суток!

Допустим есть некоторое PCI-устройство с памятью (видеокарта), и необходимо дать приложению из User-Space записать что-то в память этого устройства.

Если я правильно понял, то адресное пространство устройства в таком случае отображается на реальное адресное пространство ЦП. Диапазон адресов такого отображение можно увидеть с помощью /proc/iomem. Как я понимаю, отбражение выполняется системой (мб. железом или самим ядром) без участия драйвера непосредственно устройства, это так?

Далее по запросу соответствующий модуль должен сделать отображение из диапазона адресов устройства в виртуальное адресное пространство приложения User-Space, и делается это функцией do_mmap. Как правильно её вызвать и отранслировать адреса?

Правилен ли такой вызов: do_mmap(NULL, <адрес>, <размер>, <флаги защиты>, <флаги памяти>, <смещение>).

В этом вызове я не до конца понял, что имено означают пара значений <адрес> и <смещение>, и какой адрес вернет сама функция - в пространстве ядра или в пространстве вызвавщего процесса?

Как должен выглядеть вызов функции когда надо получить 10-ый мегабайт из устройства, если результат lspci: Memory at c0000000 (64-bit, prefetchable) [size=256M]

Или может я не в ту сторону смотрю и необходимо использовать remap_pfn_range?

Спасибо!

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.