Исходя из вашего вопроса, я предполагаю, что это аппаратный модуль, записывающий данные непосредственно в буфер памяти. На пути к файлу вам всегда понадобится промежуточный буфер памяти, но есть несколько способов управлять этим в драйвере вашего устройства.
Простейший случай - реализовать драйвер символьного устройства, который возвращает данные в пространство пользователя с помощью операции чтения. Ваше пользовательское приложение, которое записывает в файл, может быть таким простым, как cat
. Ваш модуль запишет в буфер памяти, выделенный вашим драйвером, а метод read
скопирует данные из этого буфера в буфер пространства пользователя. Это указано в DMA-Mapping.txt
в документации к ядру и в драйверах устройств Linux (LDD).
Если скорость передачи данных высока (где высокая по сравнению с производительностью устройства), вам необходимо рассмотреть более сложную операцию чтения, при которой страницы запроса read
блокируются в памяти Модуль пишет прямо на эти страницы. Это более сложно, и документация в LDD по этой области довольно старая. Я бы посоветовал изучить источник драйверов захвата видео в ядре, чтобы понять это.
Если у вашего драйвера есть больше видов связи, вы можете использовать Netlink .