2010-01-07 6 views
1

Я мог бы подойти к этому все неправильно, но ...Могу ли я установить Linux SIGUSR1 из ядра?

У меня есть драйвер устройства ядра Linux, который обрабатывает внешнее прерывание и в настоящее время выполняет printk(), когда это происходит.

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

Можно ли (/ простой/хорошая практика), чтобы установить SIGUSR1 внутри ядра, а затем захватить его из пользовательского пространства с помощью

signal (SIGUSR1, <handler function>); 

Благодарности

ответ

3

Это не звучит как очень хорошая идея. Если это даже возможно, вам нужно каким-то образом дать водителю идентификатор процесса пользователя-космонавта, чтобы водитель мог сигнализировать об этом.

Я бы создал/dev/xxx, откройте его, и драйвер может сделать дескриптор файла активным при возникновении события. Возможно, даже предоставить больше информации.

+0

Да, это хороший совет. Зарегистрируйте устройство на устройстве символов; программа userpace затем открывает соответствующий узел устройства и блокирует в 'read' или' select'; драйвер устройства создает сообщение (может быть, даже один байт), доступное для чтения, когда происходит прерывание, и пробуждает приложение пользовательского пространства. – caf

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

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