The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"user callback в модуле ядра Linux"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"user callback в модуле ядра Linux" 
Сообщение от nme emailИскать по авторуВ закладки on 16-Фев-05, 09:23  (MSK)
Добрый день. Пишу драйвер для Linux под некую железку. Хотелось бы предоставить пользователю механизм реагирования на различные события в устройстве: в частности, там есть таймер, по срабатыванию которого приходит прерывание. Подскажите, пожалуйста, как наиболее красиво и удобно это реализовать.

Пока мне видится такая схема: пользователь как-то (через ioctl?) регистрирует callback, а ядро в нужный момент дергает эту функцию. Правомерно ли вообще такое поведение? Что необходимо чтобы корректно вызвать userspace-код, а потом вернуться в ядро. Можно ли это делать из irq handler? Может быть что-то другое? Дергать семафор, также переданный посредством ioctl?

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "user callback в модуле ядра Linux" 
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 16-Фев-05, 11:35  (MSK)
>Добрый день. Пишу драйвер для Linux под некую железку. Хотелось бы предоставить
>пользователю механизм реагирования на различные события в устройстве: в частности, там
>есть таймер, по срабатыванию которого приходит прерывание. Подскажите, пожалуйста, как наиболее
>красиво и удобно это реализовать.
>
>Пока мне видится такая схема: пользователь как-то (через ioctl?) регистрирует callback, а
>ядро в нужный момент дергает эту функцию. Правомерно ли вообще такое
>поведение? Что необходимо чтобы корректно вызвать userspace-код, а потом вернуться в
>ядро. Можно ли это делать из irq handler? Может быть что-то
>другое? Дергать семафор, также переданный посредством ioctl?

Я бы сделал какой-то девайс (типа как bpf например), к которому бы коннектилась программа и считывала оттуда по мере поступления данные, например select'ом .. (or poll'ом).

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "user callback в модуле ядра Linux" 
Сообщение от Maxim Kuznetsov Искать по авторуВ закладки on 17-Фев-05, 10:26  (MSK)

>Пока мне видится такая схема: пользователь как-то (через ioctl?) регистрирует callback, а
>ядро в нужный момент дергает эту функцию. Правомерно ли вообще такое
>поведение? Что необходимо чтобы корректно вызвать userspace-код, а потом вернуться в
>ядро. Можно ли это делать из irq handler? Может быть что-то
>другое? Дергать семафор, также переданный посредством ioctl?
такое поведение НЕ ПРАВОМЕРНО к сожалению,
если уж так надо дёргать users callback то смотреть надо в сторону разных
RT расширений.
вообще-то про select Вам правильно сказали - делаете простой чар-девайс и вперед..добавите к нему самодельный ioctl чтобы пользователь мог диагностировать проблемы возникающие при чтении/записи и все будет ок.
с точки зрения пользователя это будет типичный цикл чтения/записи через select + обработка ошибок, к тому же с таким девайсом вполне смогут работать и все прочие приложения, а не только написанные вами для конкретной железяки и отлаживать такой драйвер проще.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "user callback в модуле ядра Linux" 
Сообщение от nme emailИскать по авторуВ закладки on 20-Фев-05, 11:33  (MSK)
>делаете простой чар-девайс и вперед..добавите
>к нему самодельный ioctl чтобы пользователь мог диагностировать проблемы возникающие при
>чтении/записи и все будет ок.

Спасибо, так и поступлю. Про неправомерность моего варианта я уже понял - уже после того, как задал вопрос :).

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "user callback в модуле ядра Linux" 
Сообщение от Murr Искать по авторуВ закладки(??) on 20-Фев-05, 17:41  (MSK)
Можно либо бросать сигнал, либо реализовать fasync для упомянутого chardev.

Напрямую реализовать callback будет очень сложно, т.к. нужно грамотно понизить привилегии и вообще в режиме 4/4 для IA32 ядро работает в другом адресном пр-ве, поэтому самым прямым аналогом этого является сигнал (для некоторых типов устройств еще желательно RT).

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру