从Linux内核模块禁用输入设备
我正在编写一个内核模块,用于检测平板电脑模式 模块正在访问工业I/O(或传感器),需要禁用输入设备(例如:内部键盘和鼠标)。如果笔记本电脑在平板电脑模式下开机,我希望在内核空间中尽早禁用输入(或设备本身),避免用户在启动时移除启动屏幕(例如)。到目前为止,我还没有找到一种在不修改内核源代码的情况下禁用输入的方法 第一个想法: 在不修改内核源代码的情况下, 我的第一次尝试是从从Linux内核模块禁用输入设备,linux,input,module,kernel,driver,Linux,Input,Module,Kernel,Driver,我正在编写一个内核模块,用于检测平板电脑模式 模块正在访问工业I/O(或传感器),需要禁用输入设备(例如:内部键盘和鼠标)。如果笔记本电脑在平板电脑模式下开机,我希望在内核空间中尽早禁用输入(或设备本身),避免用户在启动时移除启动屏幕(例如)。到目前为止,我还没有找到一种在不修改内核源代码的情况下禁用输入的方法 第一个想法: 在不修改内核源代码的情况下, 我的第一次尝试是从linux/input.h调用以下函数,该函数通过忽略给定输入的事件来“禁用”该输入: void input_set
linux/input.h
调用以下函数,该函数通过忽略给定输入的事件来“禁用”该输入:
void input_set_ignore_events(struct input_dev *dev, bool ignored)
我已经找到了一种方法来获取一个名为如下的struct device*
设备,但是我无法从struct device*
获取struct input\u dev*
指针:
bus_find_device_by_name(&platform_bus_type, NULL, name);
另一个想法是从外部访问静态列表头(input\u dev\u LIST)代码>位于驱动程序/input/input.c
中
第二个想法:
不要尝试访问内核输入抽象,而是利用include/linux/device.h中struct bus_type*
的offline()和suspend()函数。根据文档/ABI/testing/sysfs devices online
的说明,它可能会工作。我很快就会试试的
问题:
- 是否可以正确禁用任何外部模块的事件或输入
- 是否可以从任何外部模块检索到结构输入
谢谢你抽出时间