Как отключить доступ к клавиатуре и мыши из модуля ядра Linux? - PullRequest
3 голосов
/ 02 марта 2011

Я пытаюсь написать модуль ядра, который отключает ввод между определенными временами дня. Я узнал, как получить время ( Как узнать текущий час (время дня) в пространстве ядра Linux ) и как запланировать функцию. Я не могу понять, как отключить входы, хотя. Я думаю, что ядро ​​должно быть в каком-то месте, чтобы это сделать, но, прочитав API, я все равно не буду дальше двигаться вперед. Я полагаю, что я должен просто получить доступ к драйверам напрямую и отключить их или что-то в этом роде, но это кажется немного не общим. Это вообще возможно?

Спасибо за ваше время.

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

Я не уверен, но если вы находитесь в пользовательском пространстве, должно быть достаточно переключиться на неиспользуемую виртуальную консоль, а затем перевести клавиатуру в режим raw.Это заблокирует комбинации клавиш, которые обычно переключаются обратно в другую виртуальную консоль.Это не отключит мышь, но X должен игнорировать мышь, если это не текущий VT (просто убедитесь, что gpm не работает).

Вы также должны отключить комбинацию клавиш magic-sysrq, еслиэто включено, так как есть клавиша sysrq, чтобы вывести клавиатуру из режима raw, что в противном случае могло бы обойти это.


РЕДАКТИРОВАТЬ: должно быть возможно сделать все это из пространства ядра,при условии, что вы находитесь в нормальном контексте задачи.Я думаю, что поток ядра подойдет.

Вы можете открывать файлы и устройства из ядра, это просто не рекомендуется.Задача с пространством имен, содержащим / dev (я не уверен, что задачи ядра выполняются).Вы можете вызвать filp_open (я думаю) и получить файл *, который затем можно вызвать соответствующими методами для его file_operations (f_op).Это должно включать ioctl, необходимые для выполнения вышеупомянутых действий.

Может быть способ открыть устройство напрямую, а не через filp_open.

Короче говоря, это должно быть возможно.Это очень хитрая вещь из пространства ядра.

0 голосов
/ 03 марта 2011

Один из способов, о котором я могу думать, это отключение IRQ для ключевых слов и мыши. disable_irq и enable_irq могут использоваться для этого.

Вот номера IRQ для x86 . Возможно, вам придется обратиться к другой таблице, чтобы получить IRQ для других платформ, таких как SPARC, IA-64, если вам нужно.

...