Отключение устройств ввода из модуля ядра Linux - PullRequest
1 голос
/ 30 сентября 2019

Я пишу модуль ядра для определения режима планшета с ноутбука 2-в-1 .

Модуль осуществляет доступ к промышленному вводу-выводу (или датчикам) и нуждается вотключить устройства ввода (например: внутренняя клавиатура и мышь). Я хотел бы сделать это в пространстве ядра для раннего отключения входов (или самих устройств), если ноутбук включен в режиме планшета, избегая пользователей, удаляющих заставку при запуске (например). До сих пор я не нашел способа отключить входы без изменения исходных кодов ядра.

1-я идея:

Без изменения исходного кода ядра моей первой попыткой было:вызовите следующую функцию из linux/input.h, которая «отключает» данный вход, игнорируя его события:

    void input_set_ignore_events(struct input_dev *dev, bool ignored)

Я нашел способ получить устройство struct device * с его именем, как показано ниже, но яне может найти способ получить указатель struct input_dev * из struct device *:

    bus_find_device_by_name(&platform_bus_type, NULL, name);

Другая идея заключается в том, чтобы получить внешний доступ к static LIST_HEAD(input_dev_list);, расположенному в drivers/input/input.c.

2-я идея:

Не пытайтесь получить доступ к абстракции ввода ядра, вместо этого используйте offline() и suspend() функции struct bus_type * из include/linux/device.h. Согласно Documentation/ABI/testing/sysfs-devices-online это может сработать. Я скоро попробую.

Вопросы:

  • Можно ли правильно отключить события или входы от любого внешнего модуля?
  • Можно ли получить struct input_dev * с любого внешнего модуля?

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

...