Если нужно просто прочитать данные из буфера ядра, то просто делаете обычный блокирующий вызов read(). Гляньте в LDD3, что-то подобное там было. Если коротко, то при вызове read будет что-то такое userspace read() -> libc обертка для системного вызова -> функция read() вашего драйвера, в пространстве ядра. Если данные готовы, то возвращаем данные, если данные не готовы, то ждем пока станут готовы, при этом пользовательский процесс останется "заблокирован" в системном вызове.
|