2013-06-02 4 views
3

У меня есть модуль ядра Linux, который содержит обработчик прерываний, и хотел бы как-то уведомить приложение пользовательского пространства после обработки прерывания. Скажите, пожалуйста, как это сделать?Как отправить «сигнал» от модуля ядра к пользовательскому пространству?

+1

Можно ли предположить, что вы говорите об Linux? В любом случае, добавьте соответствующий тег в свой вопрос. –

+0

@ OliCharlesworth Да, мы говорим о Linux, но у меня закончились теги –

+1

Вы могли бы, например, удалить «hardware» в пользу «linux». Аппаратные знания не очень важны для ответа на этот вопрос. – chirlu

ответ

3
  • Вы всегда можете использовать обычные розетки, как UDP или UNIX.
  • Вы можете экспортировать эту информацию через /proc или /sys (см. this вопрос).
  • Вы можете использовать Netlink (см. Вопрос this).
+0

Спасибо большое :) –

+1

вы можете использовать семафор IPC ??? – eduardosufan

+1

очередь сообщений или разделяемая память? – eduardosufan

3

Используйте netlink.

Соединитель Netlink является специальным IPC, используемым для передачи информации между процессами ядра и пользовательского пространства. Он обеспечивает полнодуплексную связь между двумя стандартными API сокетов для процессов пользовательского пространства и специальный API ядра для модулей ядра. Сокет Netlink использует семейство адресов AF_NETLINK, по сравнению с AF_INET, используемое сокетов TCP/IP. Каждая функция сокета netlink определяет свой собственный тип протокола в файле заголовка ядра include/linux/netlink.h.

0

Я непосредственно отвечаю на этот вопрос, так как это лучший результат в Google для «передачи сигнала ядра в пользовательское пространство».

Обычно я использую сигнал, чтобы убить процесс пользовательского пространства, чтобы проверить его стек, поскольку он вызывает ioctls. Как правило, для меня работают следующие работы:

force_sig(SIGSEGV, current); 
Смежные вопросы