запись из драйвера в файл

Взгляд изнутри

Модератор: Модераторы разделов

Ответить
IMB
Сообщения: 2559
ОС: Debian

запись из драйвера в файл

Сообщение IMB »

Доброго дня!
Есть драйвер который при возникновении прерывания должен записать 1 в файл, как это лучше реализовать?
Использование /proc, насколько я понял, не подходит, потому что при чтении файла фактически происходит чтение из драйвера.
Спасибо.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: запись из драйвера в файл

Сообщение serzh-z »

IMB писал(а):
12.04.2010 17:47
как это лучше реализовать?
Использовать printk или debugfs. Писать из ядра в файл - возможно, но это моветон.
Спасибо сказали:
IMB
Сообщения: 2559
ОС: Debian

Re: запись из драйвера в файл

Сообщение IMB »

serzh-z писал(а):
12.04.2010 18:48
Использовать printk или debugfs. Писать из ядра в файл - возможно, но это моветон.

Не подходит. Драйвер контролирует микроконтроллер, который контролирует реле и тревожные входы устройства.
По срабатыванию реле или тревожного входа микроконтроллер генерирует прерывание, которое отлавливается драйвером. Пользователь должен сразу узнать о этом.
Сейчас это сделано через постоянный опрос, но работает не стабильно.
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2042
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: запись из драйвера в файл

Сообщение Stauffenberg »

IMB писал(а):
12.04.2010 20:53
Пользователь должен сразу узнать о этом.
Сейчас это сделано через постоянный опрос, но работает не стабильно.

Ядро пишет в файл, а какая-нить GUI (плазмойд, если это KDE), работающий в user_space, может выскакивать из панели, и показывать то, что ядро скинуло в файл.
Не, не то?
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
stari_maček
Сообщения: 116
ОС: RFRemix 18

Re: запись из драйвера в файл

Сообщение stari_maček »

IMB писал(а):
12.04.2010 20:53
serzh-z писал(а):
12.04.2010 18:48
Использовать printk или debugfs. Писать из ядра в файл - возможно, но это моветон.

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

Попробуйте eventfd().
Если использовать epoll() на стороне приложения, должно получиться достаточно стабильно и без лишнего оверхеда
Спасибо сказали:
IMB
Сообщения: 2559
ОС: Debian

Re: запись из драйвера в файл

Сообщение IMB »

Stauffenberg писал(а):
13.04.2010 05:34
Ядро пишет в файл, а какая-нить GUI (плазмойд, если это KDE), работающий в user_space, может выскакивать из панели, и показывать то, что ядро скинуло в файл.
Не, не то?

Общая идея правильная, но только всё это работает на автономной железке. Простейшая аналогия - пожарная сигнализация. Микроконтроллер сообщил о задымлении драйверу, драйвер выставил флаг в user-space, системный демон заметил появление флага и проинформировал пользователя.


stari_maček писал(а):
13.04.2010 08:34
Попробуйте eventfd().
Если использовать epoll() на стороне приложения, должно получиться достаточно стабильно и без лишнего оверхеда

Замечательный механизм, но увы... Он реализован с ядра 2.6.27, а у нас 2.6.10.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: запись из драйвера в файл

Сообщение serzh-z »

IMB писал(а):
13.04.2010 09:24
Микроконтроллер сообщил о задымлении драйверу, драйвер выставил флаг в user-space, системный демон заметил появление флага и проинформировал пользователя.
Как всё иначе, оказывается,.. нужно лишь сигнал в юзерспейс передать, а не писать в файл.

Как понимаю, netlink тоже в столь старом ядре отсутствует... Если уж опускаться до записи в файл и ядра, то передача сигнала *от драйвера приложению* через файл - уже сама по себе абсурдна - дисковая операция может заблокироваться. Сгорит всё, пока такой сигнал дойдёт... =)
Спасибо сказали:
IMB
Сообщения: 2559
ОС: Debian

Re: запись из драйвера в файл

Сообщение IMB »

serzh-z писал(а):
13.04.2010 11:21
IMB писал(а):
13.04.2010 09:24
Микроконтроллер сообщил о задымлении драйверу, драйвер выставил флаг в user-space, системный демон заметил появление флага и проинформировал пользователя.
Как всё иначе, оказывается,.. нужно лишь сигнал в юзерспейс передать, а не писать в файл.

Да,общая цель - передать сигнал в user-space, просто изменение в файле, как мне кажется, проще отследить.
Каким механизмом я могу передать сигнал в user-space, что бы его можно было отследить системным демоном?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: запись из драйвера в файл

Сообщение serzh-z »

IMB писал(а):
13.04.2010 11:57
Каким механизмом я могу передать сигнал в user-space, что бы его можно было отследить системным демоном?
netlink, /proc или ioctl (при условии, что демон будет постоянно вычитывать этот файл в /proc или вызывать ioctl для /dev). Самый лучший вариант - первый.
Спасибо сказали:
IMB
Сообщения: 2559
ОС: Debian

Re: запись из драйвера в файл

Сообщение IMB »

Спасибо, ioctl используется сейчас.
Вот бы пример реализации для netlink?
Спасибо сказали:
Аватара пользователя
PodBot
Сообщения: 13
ОС: GNU/Linux

Re: запись из драйвера в файл

Сообщение PodBot »

http://www.linuxjournal.com/article/7356?page=0,0
Не менее важными и интересными являются так же комментарии к статье :rolleyes:
Спасибо сказали:
Ответить