Потоковая передача данных в файл в драйвере устройства Linux

StackOverflow https://stackoverflow.com/questions/2409122

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Если у вашего водителя есть другие виды связи, вы можете использовать Нетлинк.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top