一、输入子系统
1、内核的输入子系统是对分散的、多种不同类别的输入设备进行统一处理的驱动程序。
2、输入子系统的好处
1)、统一了物理形态各异的相似的输入设备的处理功能。
2)、提供了用于分发输入报告给用户应用程序的简单的事件接口。
3)、抽取了输入驱动程序的通用部分,简化了驱动程序,并引入了一致性。
3、输入子系统的运行接口(P144 图7-1)
1)、此子系统包括一前一后运行的两类驱动程序:事件驱动程序和设备驱动程序。
2)、事件驱动程序负责和应用程序的接口。
3)、设备驱动程序负责和底层输入设备的通信。
二、输入事件驱动程序
1、Evdev是一个通用的输入事件驱动程序。Evdev产生的每个事件都有如下格式,其定义于include/linux/input.h中:
struct input_event {
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};
2、设备实例:虚拟鼠标
1)、虚拟鼠标的工作过程——虚拟鼠标的输入驱动程序(P145 图7-2)。
2)、相关代码以及分析。
3、其他事件接口
三、输入设备驱动程序
1、serio
1)、serio层提供了访问老式输入硬件的库例程。
2)为了与serio提供服务的硬件通信,需要用serio_register_driver()向serio注册规定的回调例程。
3)、为了给serio添加新的驱动程序,需要用serio_register_port()注册open()/close()/start()/stop()/write()入口函数。
2、键盘
1)、键盘的每种类型都有特定的输入设备驱动程序,但所有的都使用相同的键盘事件处理程序,以确保提供欸用户的接口一致。和其他的事件驱动程序相比,键盘事件驱动
程序有其独特之处:它传送数据给另一个内核子系统(tty层),而不是通过/dev节点传送给用户空间。
2)、PC键盘
I、PC键盘通过i8042兼容键盘控制器与处理器接口。态势机通常用专用的键盘控制器,而笔记本计算机的键盘接口则使用通用的嵌入式控制器。
II、PC键盘按下一个键时,内部处理流程。
3)、USB与蓝牙键盘
I、USB规范中有关HID的部分规定了USB键盘、鼠标、小键盘以及其他输入外围设备使用的通信协议。
II、在Linux上,它们是通过usbhid USB客户端驱动程序实现的,它负责USB HID类设备。
III、PS/2兼容键盘的数据流。
3、鼠标
1)、PS/2鼠标。
2)、设备实例:滚轮鼠标。
I、代码清单7-3:滚轮鼠标驱动程序
3)、指点杆
4)、触摸板
I、代码清单7-4:Synaptics触摸板的PS/2鼠标协议驱动程序
5)、USB和蓝牙鼠标。
4、触摸控制器
5、加速度传感器
1)、加速度传感器用于测试加速度。
2)、HDAPS驱动程序是平台驱动程序,向输入子系统注册。
6、输出时事件
四、调试