Re[6]: Linux. Драйвер. Память.
От: Murr Россия  
Дата: 23.12.03 09:00
Оценка:
Здравствуйте, unkn2000, Вы писали:

U>Здравствуйте, Murr.

U>Я этот же вопрос задал на соседней ветке ( низкоуровневое программирование ).
U>http://www.rsdn.ru/Forum/Message.aspx?mid=483272#483272
Автор: unkn2000
Дата: 18.12.03

U>Мне ответили, но что-то не получается. Не могли бы вы помоч разобраться.

Как работает драйвер блочного устройства?
Вы регистрируете устройство, при открытии inode передается управление в вашу функцию open.
Вы определяете для переданной inode операции a_ops (inode->i_mapping->a_ops), конкретнее — direct_IO.
Если Ваше устройство открывается в режиме O_DIRECT, то при чтении используется callback direct_IO.

В качестве примера реализации для блочного ввода-вывода просто посмотрите fs/buffer.c:generic_direct_IO.

То есть фактически Вам на вход подается массив pinned страниц — вам только остается посчитать физический адрес каждой страницы и подать на устройство. Чтобы получить физический адрес скорее всего достаточно воспользоваться макросом page_to_phys (вроде бы должно работать даже на NUMA/DISCONTIG).

P.S. Попробуйте написать Если есть какие-то вопросы — я отвечу в меру своих знаний.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.