user callback в модуле ядра Linux, nme, 16-Фев-05, 09:23 [смотреть все]Добрый день. Пишу драйвер для Linux под некую железку. Хотелось бы предоставить пользователю механизм реагирования на различные события в устройстве: в частности, там есть таймер, по срабатыванию которого приходит прерывание. Подскажите, пожалуйста, как наиболее красиво и удобно это реализовать.Пока мне видится такая схема: пользователь как-то (через ioctl?) регистрирует callback, а ядро в нужный момент дергает эту функцию. Правомерно ли вообще такое поведение? Что необходимо чтобы корректно вызвать userspace-код, а потом вернуться в ядро. Можно ли это делать из irq handler? Может быть что-то другое? Дергать семафор, также переданный посредством ioctl?
|
- user callback в модуле ядра Linux, Vladislav Lazarenko, 11:35 , 16-Фев-05 (1)
>Добрый день. Пишу драйвер для Linux под некую железку. Хотелось бы предоставить >пользователю механизм реагирования на различные события в устройстве: в частности, там >есть таймер, по срабатыванию которого приходит прерывание. Подскажите, пожалуйста, как наиболее >красиво и удобно это реализовать. > >Пока мне видится такая схема: пользователь как-то (через ioctl?) регистрирует callback, а >ядро в нужный момент дергает эту функцию. Правомерно ли вообще такое >поведение? Что необходимо чтобы корректно вызвать userspace-код, а потом вернуться в >ядро. Можно ли это делать из irq handler? Может быть что-то >другое? Дергать семафор, также переданный посредством ioctl? Я бы сделал какой-то девайс (типа как bpf например), к которому бы коннектилась программа и считывала оттуда по мере поступления данные, например select'ом .. (or poll'ом). - user callback в модуле ядра Linux, Maxim Kuznetsov, 10:26 , 17-Фев-05 (2)
>Пока мне видится такая схема: пользователь как-то (через ioctl?) регистрирует callback, а >ядро в нужный момент дергает эту функцию. Правомерно ли вообще такое >поведение? Что необходимо чтобы корректно вызвать userspace-код, а потом вернуться в >ядро. Можно ли это делать из irq handler? Может быть что-то >другое? Дергать семафор, также переданный посредством ioctl? такое поведение НЕ ПРАВОМЕРНО к сожалению, если уж так надо дёргать users callback то смотреть надо в сторону разных RT расширений. вообще-то про select Вам правильно сказали - делаете простой чар-девайс и вперед..добавите к нему самодельный ioctl чтобы пользователь мог диагностировать проблемы возникающие при чтении/записи и все будет ок. с точки зрения пользователя это будет типичный цикл чтения/записи через select + обработка ошибок, к тому же с таким девайсом вполне смогут работать и все прочие приложения, а не только написанные вами для конкретной железяки и отлаживать такой драйвер проще.
- user callback в модуле ядра Linux, nme, 11:33 , 20-Фев-05 (3)
>делаете простой чар-девайс и вперед..добавите >к нему самодельный ioctl чтобы пользователь мог диагностировать проблемы возникающие при >чтении/записи и все будет ок. Спасибо, так и поступлю. Про неправомерность моего варианта я уже понял - уже после того, как задал вопрос :).
- user callback в модуле ядра Linux, Murr, 17:41 , 20-Фев-05 (4)
Можно либо бросать сигнал, либо реализовать fasync для упомянутого chardev.Напрямую реализовать callback будет очень сложно, т.к. нужно грамотно понизить привилегии и вообще в режиме 4/4 для IA32 ядро работает в другом адресном пр-ве, поэтому самым прямым аналогом этого является сигнал (для некоторых типов устройств еще желательно RT).
|