精通Linux设备驱动程序开发-第7讲-输入设备驱动.pdf

精通Linux设备驱动程序开发-第7讲-输入设备驱动.pdf

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 7 章 输入设备驱动 内核的输入子系统是为了对分散的、多种不同类别的输入设备(如键盘、鼠标、跟 踪球、操纵杆、辊轮、触摸屏、加速计和手写板)进行统一处理的驱动。输入子系统带 来了如下好处: • 统一了物理形态各异的相似的输入设备的处理功能。例如,各种鼠标,不论 PS/2、USB,还是蓝牙,都被同样处理。 • 提供了用于分发输入报告给用户应用程序的简单的事件(event)接口。你的驱 动不必创建、管理/dev 节点以及相关的访问方法。因此它能很方便的调用输入 API 以发送鼠标移动、键盘按键,或触摸事件给用户空间。X Windows 这样的 应用程序能够无缝地运行于输入子系统提供的 event 接口之上。 • 抽取出了输入驱动的通用部分,简化了驱动,并提供了一致性。例如,输入子 系统提供了一个底层驱动(成为 serio)的集合,支持对串口和键盘控制器等硬 件输入设备的访问。 图 7.1 展示了输入子系统的操作。此子系统包括一前一后运行的两类驱动:事件驱 动和设备驱动。事件驱动负责和应用程序的接口,而设备驱动负责和底层输入设备的通 信。鼠标事件产生者 mousedev,是前者的实例;而 PS/2 鼠标驱动是后者的实例。事件 驱动和设备驱动都可以利用输入子系统的高效、可重用的核心提供的服务。 图 7.1. 输入子系统 事件驱动是标准的,对所有的输入类都是可用的,所以你更可能的是实现设备驱动而 不是事件驱动。你的设备驱动可以利用一个已经存在的、合适的事件驱动通过输入核心和 用户应用程序接口。需要注意的是本章使用的名辞“设备驱动”指的是输入设备驱动,而 不是输入事件驱动。 输入事件驱动 输入子系统提供的事件接口已经发展成为很多图形窗口系统理解的标准。事件驱动提 供一个硬件无关的抽象,以和输入设备交互;如同帧缓冲接口(在第 12 章《视频设备驱 动》中讨论)提供一个通用的机制以和显示设备通信一样。事件驱动和帧缓冲驱动一起, 将图形用户接口(GUI)和各种各样的底层硬件隔离开来。 Evdev 接口 Evdev 是一个通用的输入事件驱动。Evdev 产生的每个事件包都有如下格式,定义于 i nclude/linux/input.h: struct input_event { struct timeval time; /* Timestamp */ __u16 type; /* Event Type */ __u16 code; /* Event Code */ __s32 value; /* Event Value */ }; 为了学习如何使用 evdev,让我们来实现一个虚拟鼠标的输入设备驱动。 设备例子:虚拟鼠标 我们的虚拟鼠标工作过程如下:一个应用程序(coord.c)模拟鼠标移动,并通过一个 sysfs 节点/sys/devices/platform/vms/coordinates 分发坐标信息给虚拟鼠标驱动(vms. c)。虚拟鼠标驱动(vms驱动)通过 evdev 向上层传送这些移动信息。图 7.2 展示了详细 过程: 图 7.2. 虚拟鼠标的输入驱动 !--[if !vml]-- !--[e ndif]-- 通用目的鼠标(gpm)是服务器,让你在文本模式下使用鼠标,而无需 X 服务器。Gpm 能够理解 evdev 消息,因此 vms 驱动能够直接和其通信。一切就绪后,你将会看到随着由 coord.c 产生虚拟鼠标移动,光标在屏幕上跳动

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档