Linux输入子系统及触摸屏驱动剖析

Linux输入子系统后面章节讲解按钮设备驱动,实际上,在Linux系统中,一种更值得推荐的实现这类设备驱动的方式是借助input子系统。

Linux输入子系统分析_触摸屏驱动开发教程_linux按键驱动

Linux系统提供了input子系统,键盘、触摸屏、鼠标都可以借助input插口函数来实现设备驱动。

input子系统体系结构设备描述:在Linux内核中,input设备用input_dev结构体描述linux按键驱动,使用input子系统实现输入设备驱动的时侯linux模拟,驱动的核心工作是向系统报告按钮、触摸屏、鼠标等输入风波(event,通过input_event结构体描述),不再须要关心文件操作插口,由于input子系统那种早已完成了文件操作插口。

触摸屏驱动开发教程_Linux输入子系统分析_linux按键驱动

驱动报告的风波经过InputCore和Eventhandler最终抵达用户空间。

设备注册/注销:注册输入设备的函数为:intinput_register_device(structinput_dev*dev)注销输入设备的函数为:voidinput_unregister_device(structinput_dev*dev)驱动实现风波支持设备驱动通过set_bit()告诉input子系统它支持什么风波,如下所示:set_bit(EV_KEY,button_dev.evbit)structiput_dev有两个成员,一个是evbitlinux按键驱动,一个是keybit。

Linux输入子系统分析_触摸屏驱动开发教程_linux按键驱动

分别拿来表示设备所支持的风波类型和键盘类型。

风波类型:EV_RSTResetEV_REL相对座标EV_MSC其它EV_SND声音EV_FF力反馈EV_KEY键盘EV_ABS绝对座标EV_LEDLEDEV_REPRepeat驱动实现报告风波:用于报告EV_KEY、EV_REL、EV_ABS风波的函数分别为:voidinput_report_key(structinput_dev*dev,unsignedintcode,intvalue)voidinput_report_rel(structinput_dev*dev,unsignedintcode,intvalue)voidinput_report_abs(structinput_dev*dev,unsignedintcode,intvalue)code:风波的代码。

触摸屏驱动开发教程_Linux输入子系统分析_linux按键驱动

假如风波的类型是EV_KEY,该代码code为设备鼠标代码。

代码值0-127为鼠标上的按钮代码linux服务器系统,0x110-0x116为键盘上键盘代码,其中0x110(BTN_LEFT)为键盘左键,0x111(BTN_RIGHT)为键盘右键,0x112(BTN_MIDDLE)为键盘中键。

Linux输入子系统分析_linux按键驱动_触摸屏驱动开发教程

其代码涵义参看include/linux/input.h文件value:风波的值。

假如风波的类型

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复