Поток данных в файл в драйвере устройства Linux - PullRequest
0 голосов
/ 09 марта 2010

Я довольно новичок в программировании драйверов устройств Linux, но для целей отладки я хотел бы записать поток данных непосредственно в файл. Или, может быть, я должен ответить на вопрос по-другому:

У меня есть система на кристалле, где один модуль обеспечивает поток данных. Модуль должен быть инициализирован с адресом записи. Вместо записи данных в память я хотел бы перенаправить поток данных по этому адресу в файл. Это также можно сделать через пользовательское пространство, поскольку запись в файл в пространстве ядра не рекомендуется.

Может кто-нибудь набросать примерно, как это сделать?

Спасибо, Стефан

1 Ответ

0 голосов
/ 11 марта 2010

Исходя из вашего вопроса, я предполагаю, что это аппаратный модуль, записывающий данные непосредственно в буфер памяти. На пути к файлу вам всегда понадобится промежуточный буфер памяти, но есть несколько способов управлять этим в драйвере вашего устройства.

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

Если скорость передачи данных высока (где высокая по сравнению с производительностью устройства), вам необходимо рассмотреть более сложную операцию чтения, при которой страницы запроса read блокируются в памяти Модуль пишет прямо на эти страницы. Это более сложно, и документация в LDD по этой области довольно старая. Я бы посоветовал изучить источник драйверов захвата видео в ядре, чтобы понять это.

Если у вашего драйвера есть больше видов связи, вы можете использовать Netlink .

...