2015-08-01 4 views
-1

Я работаю в драйвере USB ACM, «там, где мне нужно отправить уведомление из пространства ядра в приложение пользователя для вызова функции обратного вызова». Я не очень хорошо понимаю использование ядра для пользовательских интерфейсов в коде. как хорошо могут помочь sysfs для этого сценария. Пожалуйста, отправьте пример кода для использования sysfs, чтобы я получил идею реализовать в своем коде. Я не мог найти его нигде. Кроме того, PLS рассказать любой другой простой способ добиться ядро ​​для пользовательского пространства уведомления. Заранее спасибо.Как отправить уведомление из ядра в приложение для пользовательского пространства с помощью SYSFS

+0

Вторым вопрос в «Связанном» списке: http://stackoverflow.com/questions/2689975/is-it-possible -в-называть-а-пользовательское пространство-обратный вызов функцию-из-пространства ядра-в-Linux. Это должно помочь вам сделать ваш вопрос более конкретным. – Tsyvarev

ответ

0

Мое предложение было бы создать интерфейс sysfs для вашего драйвера ядра, к которому может обращаться пользовательское пространство. Каждый атрибут sysfs, если он создан с правильными свойствами, может быть прочитан как файл из пользовательского пространства. Затем вы можете использовать функцию опроса из пользовательского пространства для опроса для действия над этим файлом. Чтобы вызвать это действие из пространства ядра, вы можете использовать функцию sysfs_notify для вашего атрибута, и это приведет к тому, что ваш код пользовательского пространства проснется. Вот как бы я это сделать

Kernel 1. Создать Kobject или прикрепить атрибут к предыдущему kobject 2. Если вы хотите, чтобы сигнал вызова sysfs_notify пользовательского пространства на kobject и приписывать

UserSpace

  1. Создать новую нить, которая будет блокировать во время ожидания sysfs_notify
  2. Откройте sysfs атрибут из этого потока
  3. опроса атрибут, как только sysfs_notif у из ядра называется он разблокирует ваш опрос
  4. называют обработки событий функции
+0

Обратите внимание, что уведомление sysfs не может быть вызвано из контекста прерывания, поэтому, если ваше событие является прерыванием, вам необходимо создать какой-либо отложенной работы. Вы также можете использовать интерфейс sysfs_dirent, который позаботится о вашей отсроченной работе – whh4000

 Смежные вопросы

  • Нет связанных вопросов^_^