输入子系统
1、概念:内核对分散的,多种不同类别的输入设备进行统一处理的驱动程序。
2、输入子系统的好处:
a) 统一物理形态各异的相似的输入设备的处理功能
b) 提供了用于分发输入报告给用户应用程序的简单事件(event)接口。驱动程序不必创建、管理/dev节点以及相关的访问方法,因此它能方便地被调用输入API以发送鼠标移动,键盘按键或者触摸事件给用户空间
c) 抽取了输入驱动程序的通用部分,简化驱动程序并引入一致性
3、输入子系统架构图
图解:
设备驱动层:将底层的硬件输入转化成统一事件形式,向输入核心汇报
输入核心层:为设备驱动层提供输入设备注册与操作接口
事件驱动层:主要作用是和用户空间层进行数据交互
4、输入设备驱动程序: /driver/input 目录下
a) serio:该层提供了访问老式输入硬件的库例程。为了与serio提供服务的硬件通讯,如发送命令给PS/2鼠标,需要用到:
serio_register_driver():向serio注册规定的回调例程
serio_register_port():注册open/close/write/stop/start入口函数
b) 键盘(EV_KEY/0X01):键盘驱动程序的独特之处在于它传送数据给另外一个内核子系统(TTY层),而不是通过 /dev目录下的节点传送给用户空间。驱动文件在/dev/char目录下
可以通过以下命令查看矩阵键盘的扫描码:showkey -s 或者 showkey
根据加载的键盘映射,键盘事件驱动程序进行键值翻译(查看loadkeys的操作帮助和/lib/kbd/keymaps中提供的映射文件)
c) 鼠标:鼠标输入事件驱动称为 mousedev, 通过/dev/input/mice报告鼠标事件给用户
d) 指点杆(EV_REL/0X02