Я хотел бы создать модуль ядра, который будет запускать тасклет при нажатии клавиши f5
.
Я понимаю, как запустить тасклет, но как мне получить событие в моем модуле? Как мне использовать request_irq
, чтобы выяснить, была ли нажата кнопка f5
?
Я хотел бы создать модуль ядра, который будет запускать тасклет при нажатии клавиши f5
.
Я понимаю, как запустить тасклет, но как мне получить событие в моем модуле? Как мне использовать request_irq
, чтобы выяснить, была ли нажата кнопка f5
?
-
Hi, 0x90,
Я думаю, вы знаете, что обработка прерывания состоит из двух частей. Первая часть, верхняя половина, это обработчик прерывания, Вторая часть, нижняя половина, может быть softtirq, тасклетом, рабочей очередью.
Таким образом, даже если вы хотите реализовать в тасклете все, что хотите, вы должны убедиться, что верхняя половина, обработчик прерывания, имеет шанс запускаться первой.
IIRC, тасклет - это просто вариант softirqs, и они обрабатываются в irq_exit (), который вызывается в do_IRQ (). Но этот поток может зависеть от конкретной архитектуры.
Что касается вашего вопроса, я думаю, это может быть платформа x86. Какая бы клавиша ни была нажата, на CPU всегда будет передаваться прерывание клавиатуры. И независимо от того, нажата ли клавиша f5, будет проверяться в вашем тасклете, вашему обработчику прерывания может просто потребоваться передать код тасклету.
Итак, вы должны прикрепить свой обработчик прерывания, который обрабатывается перед тасклетом, к прерыванию клавиатуры, вызвав request_irq ().
Обновлять:
Как сказал Проби, вы можете проверить файлы notifier.txt и notifiers.txt в каталоге Documentation /.
Спасибо.