02、输入子系统的框架
Input 子系统可以分为事件处理层、设备驱动层、核心层三层,这三层在输入子系统中有着不同的作用和分工。
一、事件处理层
这是输入系统的顶层,主要负责接收核心层传来的输入事件(比如按键、触摸等),然后把这些事件传递给上层应用程序。它还会在系统里创建一个接口路径(设备节点),让应用程序能通过这个路径和输入设备通信。比如,当你按下键盘按键时,事件处理层会先接收这个动作,再决定该通知哪个程序(比如文本编辑器或游戏)。
二、核心层
核心层是连接顶层和底层的中间层,主要作用是协调输入事件的传递。它的核心功能包括:
1. 匹配事件 把输入设备传来的原始数据(比如“按键被按下”)和对应的处理程序配对。例如,它会判断“这个按键事件应该由键盘驱动还是触摸屏驱动处理”。
2. 管理设备 记录所有输入设备的信息(比如设备类型、状态),并管理设备的注册、注销。比如,当鼠标被插上或拔掉时,核心层会更新设备列表。
3. 传递事件 把底层传来的事件暂存在队列里,再按规则分发给对应的事件处理层。比如,把鼠标移动事件发给图形界面程序,把键盘事件发给当前输入框。
4. 统一接口 为上层程序提供统一的接口,让程序不需要关心硬件细节。例如,不管用的是什么品牌的鼠标,程序都能通过核心层提供的标准接口获取按键信息。
三、设备驱动层
这是最底层,直接和硬件设备打交道。它的任务是:
- 启动硬件:比如开机时初始化键盘、触摸屏等设备。
- 接收硬件信号:比如监听鼠标移动的中断信号。
- 翻译硬件语言:把硬件产生的原始信号(如电信号)转化为核心层能理解的数据格式。
:::
总结:开发者需要做什么?
在Linux中:
核心层和事件处理层:系统已经写好了,开发者不用管。
设备驱动层:必须自己编写,因为不同硬件的工作方式不同(比如不同品牌的键盘可能需要用不同的初始化代码)。
简单来说: 开发者只需专注写设备驱动层,让硬件能和系统对话,其他层系统已经帮你搞定。 :::