我想我必须轮询其他驱动程序创建的/ dev / input / event对象,但我似乎找不到如何执行此操作的指南?
这是最好的方式吗?有没有办法可以实际捕获由其他驱动程序将事件输入输入系统所创建的中断?
答案 0 :(得分:2)
您似乎希望从不相关的模块接收输入事件。但是你无法从内核空间读取/dev/input/event*
,所以你必须选择:
/dev/input/event*
并转发到您的驱动程序,可能使用char设备或sysfs参数。选项1应该是直截了当的。我将详细说明备选方案2。
要从内核挂接输入设备,您可以使用模块初始化函数中的函数input_register_handler()
(当然也可以使用退出函数中的input_unregister_handler()
)。
此函数以struct input_handler
为参数,它有很多成员,但您可能只需要填充name
,id_table
,connect
,{{1 }和disconnect
。
然后,在您的event
回调中,您拨打connect
(注意input_register_handle()
vs handle
名称)和handler
,您将获得输入事件input_open_device()
回调。
当然,不要忘记撤消event
回调中的这项工作。
在内核中有几个这种API用法的实例,但到目前为止,更容易读取的是disconnect
驱动程序:它只是将所有输入事件转储到内核日志中。