[国嵌攻略][139][输入子系统原理分析]

输入子系统核心架构

1.设备驱动层

2.核心层

3.事件层

4.用户空间

 

输入设备注册

1.拿设备ID去匹配handler的ID,找到对应的handler(事件处理者)

最常用的handler是evdev_handler,相应的匹配表在evdev_ids中。如果设备的ID在事件驱动的ID表中,那么两者就匹配起来了。按键驱动在注册的时候,没有设定ID,所以是一个随机值。在evdev_ids匹配表中能匹配所有的ID,所以按键驱动就和evdev_handler建立起了联系。

2.调用handler的connect函数建立连接,创建设备文件。但是注册字符设备是在核心子系统初始化的时候,并且只创建了一个字符设备。以后创建的多个设备文件都与这一个字符设备连接起来。

 

事件上报

1.当事件出现时,会找到handler中的event函数来处理

2.event函数主要做的事是打包input_event结构,保存到buffer

3.当用户程序从设备文件中进行系统调用时,首先打开的是输入子系统初始化时实现的file_operations,但是这个这个操作集里面只有open调用。在该调用中,原有的file_operations会被handler中的file_operations替换,这样调用的就是匹配的handler的操作集合。然后把保存在buffer中的input_evnet结构交给用户空间。

posted @   盛夏夜  阅读(176)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示