Этот вопрос кажется простым, но я хочу отправить событие, чтобы уведомить мою программу пространства пользователя, что буфер модуля готов к чтению.Каков наилучший способ связи модуля ядра с программой пользовательского пространства?
Например, у меня есть буфер в моем модуле ядра, и его данные будут потребляться программой пользовательского пространства. Если все данные были израсходованы, модуль ядра должен уведомить мою программу, когда появятся новые данные.
Это типичная проблема производителя/потребителя. Производитель - это модуль ядра, а потребитель - программа пользовательского пространства.
Сегодня я посылаю сигнал моей программе (событию) и получаю доступ к буферу данных с помощью функции ioctl. Но я не знаю, подходит ли этот подход для решения этой проблемы. Я боюсь использовать ненужную привязку или карту памяти, чтобы решить эту проблему.
Как насчет размещения процесса в 'wait_queue' и пробуждения его из потока ядра, когда они готовы к работе? –
Ну, это зависит, если ваш модуль драйвер ввода-вывода? –
Вы можете получить некоторые подсказки здесь: http://www.nirendra.net/cms/communicate_kernel –