[国嵌攻略][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结构交给用户空间。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术