2024年4月28日发(作者:)

第7章 输入设备驱动

内核的输入子系统是为了对分散的、多种不同类别的输入设备(如键盘、鼠标、跟

踪球、操纵杆、辊轮、触摸屏、加速计和手写板)进行统一处理的驱动。输入子系统带

来了如下好处:

统一了物理形态各异的相似的输入设备的处理功能。例如,各种鼠标,不论

PS/2、USB,还是蓝牙,都被同样处理。

提供了用于分发输入报告给用户应用程序的简单的事件(event)接口。你的驱

动不必创建、管理/dev节点以及相关的访问方法。因此它能很方便的调用输入

API以发送鼠标移动、键盘按键,或触摸事件给用户空间。X Windows这样的

应用程序能够无缝地运行于输入子系统提供的event接口之上。

抽取出了输入驱动的通用部分,简化了驱动,并提供了一致性。例如,输入子

系统提供了一个底层驱动(成为serio)的集合,支持对串口和键盘控制器等硬

件输入设备的访问。

图7.1展示了输入子系统的操作。此子系统包括一前一后运行的两类驱动:事件驱

动和设备驱动。事件驱动负责和应用程序的接口,而设备驱动负责和底层输入设备的通

信。鼠标事件产生者mousedev,是前者的实例;而PS/2鼠标驱动是后者的实例。事件

驱动和设备驱动都可以利用输入子系统的高效、可重用的核心提供的服务。

图 7.1. 输入子系统

事件驱动是标准的,对所有的输入类都是可用的,所以你更可能的是实现设备驱动而

不是事件驱动。你的设备驱动可以利用一个已经存在的、合适的事件驱动通过输入核心和

用户应用程序接口。需要注意的是本章使用的名辞“设备驱动”指的是输入设备驱动,而

不是输入事件驱动。

输入事件驱动

输入子系统提供的事件接口已经发展成为很多图形窗口系统理解的标准。事件驱动提

供一个硬件无关的抽象,以和输入设备交互;如同帧缓冲接口(在第12章《视频设备驱

动》中讨论)提供一个通用的机制以和显示设备通信一样。事件驱动和帧缓冲驱动一起,

将图形用户接口(GUI)和各种各样的底层硬件隔离开来。