2017-02-16 14 views
0

Я пишу драйвер и пытаюсь отправить что-то из ядра в пространство пользователя, что я собираюсь (что единственный способ узнать) - отправить сигнал от ядра к пользовательскому пространству и вызвать сигнал (...) где-то в пользовательском пространстве, которое поймает его и будет использовать ioctl (...), теперь ядро ​​отправляет вещи в пространство пользователя.Передано ли сигнал от ядра к пользовательскому пространству в реальном времени?

Мой вопрос в том, когда сигнал посылается, ему приходится ждать, используя сигнал вызова пользовательского пространства(), а затем что-то делать?

И есть ли другие способы разговора между ядром и пользовательским пространством?

+1

Я считаю, что посылающие сигналы являются асинхронными. Одним из простейших способов взаимодействия между ядром и пользователем являются операции ioctl/read/write на устройствах с разным символом. – yeputons

+0

Какой именно драйвер вы кодируете, и что вам нужно для отправки с ядра на пользовательское пространство и когда? Пожалуйста, ** отредактируйте свой вопрос **, чтобы дать * намного больше деталей * –

ответ

0

Считаете ли вы, что ваш драйвер просто отправил несколько байтов в файловый дескриптор (например, некоторые socket(7) или pipe(7) или устройство с символами.)? Или используя netlink(7)? Или взаимодействовать с systemd?

Общим способом было бы иметь некоторый вспомогательный процесс на земле пользователя (начатый во время загрузки), обрабатывающий этот файловый дескриптор. Эта программа, вероятно, будет использовать некоторый мультиплексирующий системный вызов, такой как poll(2).

Остерегайтесь, что, когда ваш драйвер работает (и вы пытаетесь отправить какой-либо сигнал), текущая задача может быть не процессом с использованием вашего драйвера. Поэтому отправка сигналов с земли ядра может быть сложной задачей.