LINUX.ORG.RU

как сделать журналирование из драйвера


0

0

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

на ум пока что приходит только периодичное чтение из символьного устройства создаваемой в драйвере очереди сообщений неким демоном.. но криво все это как-то..

ядро 2.6

Почему криво? syslogd/klogd так и работает.

Murr ★★
()
Ответ на: комментарий от yuriy123

да в ldd забыл посмотреть, спасибо.. но собствено ничего там нового не узнал, читал ее, правда давно..

я думал может в 2.6 чтонть новенькое появилось... слышал про какие-то сокеты между ядром и юзер-левел... такое существует?

apels1n
() автор топика
Ответ на: комментарий от idle

спасибо.. если кто кинет ссылку полезную на то как их используют - буду благодарен, а то я искал помнится - не нашел

apels1n
() автор топика
Ответ на: комментарий от idle

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

apels1n
() автор топика
Ответ на: комментарий от apels1n

> и не было бесконечного цикла с проверкой, но видимо так не получится

ничего не понимаю, почему это не получится ???
это абсолютно стандартная практика.

не может быть, чтобы в LDD не было ничего про
wakeup и friends.

idle ★★★★★
()
Ответ на: комментарий от apels1n

>вдруг данных много пойдет

много - это сколько?

>успевать считывать демон

если демон настолько медлен, то он не будет успевать это делать и по др схеме. не прочитанные данные имхо никуда не денутся /fixme/

Pi ★★★★★
()
Ответ на: комментарий от Pi

честно говорю, что я не мастер реализовывать всякие сложные алгоритмы и не гуру ядра, но мне это видится так:

в драйвере создается очередь сообщений некоторой постоянной(??) длины (мной придуманная и реализованная), она заполняется-заполняется... а потом раз демон все забрал (запрашивает скока сообщений в очереди и следующим запросом читает столько инфы), обработал, в файл кинул и в драйвере очередь обнулилась/сдвинулась...

как вам такое?

ну собственно запрос из юзер-левел периодичен и очередь может забить всю выделенную под нее память...

apels1n
() автор топика
Ответ на: комментарий от idle

что такое wakeup и friends покопаю и поищу.. спасибо

apels1n
() автор топика
Ответ на: комментарий от idle

>netlink

Много в линупсе всякой дряни. netlink - одна из них. Кроме того, сторонние приложения не могут на ней строить обмен.

автор:

Так в чем проблема с архитектурой syslogd? Ты так толком и не сказал.
Проблему захлебывания данными ты никак цивилизованно решить не сможешь, разве что на событиях будешь уходить в sleep(что не всегда возможно из контекста).

Murr ★★
()
Ответ на: комментарий от apels1n

я что-то не очень понимаю ваши проблемы.

почему бы вам не сделать просто и сердито? не надо
опрашивать периодично, и не надо спрашиватьу драйвера
сколько там накопилось. пусть ваш демон просто в цикле
считывает сколько есть. когда ничего нету - он спит.
драйвер при появлении сообщения добавляет его в очередь,
и делает wake_up, все.

2 Murr.

ну, дрянь не дрянь, но то, что автору не слишком облегчит
жизнь - согласен.

idle ★★★★★
()
Ответ на: комментарий от idle

Да.. картина нарисовалась.. Я к стыду своему и не знал что можно усыпить процесс при сисколе. спасибо. пошел читать и реализовывать..

2Murr а syslog не подходит только потому что нужен отдельный файл логов именно из этого драйвера по тз.

apels1n
() автор топика
Ответ на: комментарий от cvv

насколько я понял.... даже если я вытащу мою инфу в отдельный лог, то из /var/log/massages она все равно никуда не денется.. я правильно понял?

если я понял правильно, то мой лог может на фиг забить весь messages.. а мне это не хочется

apels1n
() автор топика
Ответ на: комментарий от apels1n

> даже если я вытащу мою инфу в отдельный лог, то из /var/log/massages
> она все равно никуда не денется

не совсем. что в какой файл писать - это уже настройки
user-level, ядро (printk) и знать не знает о том, что
они вообще куда-то пишутся.

но вообще-то, printk/klogd/syslogd действительно не очень
подходят для большого обьема данных, так что ваша затея,
возможно, имеет смысл. хотя и не факт.

idle ★★★★★
()
Ответ на: комментарий от apels1n

>то из /var/log/massages она все равно никуда не денется.. я правильно понял?

нет ниправильно

cvv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.