浅谈Linux输入子系统

浅谈Linux输入子系统

ID:42871072

大小:314.64 KB

页数:7页

时间:2019-09-23

浅谈Linux输入子系统_第1页
浅谈Linux输入子系统_第2页
浅谈Linux输入子系统_第3页
浅谈Linux输入子系统_第4页
浅谈Linux输入子系统_第5页
资源描述:

《浅谈Linux输入子系统》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、浅谈Linux输入子系统输入子系统是Linux内核用于管理各种输入设备(键盘,鼠标,遥控杆,触摸屏等等)的部分,用户通过输入子系统进行内核,命令行,图形接口之间的交换。输入子系统在内核里实现,因为设备经常要通过特定的硬件接口被访问(例如串口,ps/2,usb等等),这些硬件接口由内核保护和管理。内核给用户导出一套固定的硬件无关的inputAPI,供用户空间程序使用。Linux下的输入设备(如按键、键盘、触摸屏、鼠标等)是典型的字符设备,其-般的T作机理是底层在按键、触摸等动作发送时产生一个中断(或驱动通过timer定吋查询),然后CPU通过SPI、I2C或

2、外部存储器总线读取键值、坐标等数据,放入1个缓冲区,字符设备驱动管理该缓冲区,而驱动的read()接口让用户可以读取键值、坐标等数据。输入子系统(InputSubsystem)的架构如下图所示输入子系统由输入子系统核心层(InputCore),驱动层和事件处理层(EventHandler)三部份组成。一个输入事件,如鼠标移动,键盘按键按下,joystick的移动等等通过Driver->InputCore->Eventhandler->userspace的顺序到达用户空间传给应用程序。inputdevice的优点是统一应用程序使用外部输入设备的接口。这样简化

3、编程。Inputcore是没有缓存队列的,如果应用程序没有及时取事件,则事件被丢弃。其中InputCore即InputLayer由driver/input/input.c及相关头文件实现。对下提供了设备驱动的接口,对上提供了EventHandler层的编程接口。1.主要数据结构表1InputSubsystemmaindatastructure数据结构用途定义位置具体数据结构的分配和初始化Structinput_dev驱动层物理Input设备的基木数据结构Input.h通常在具体的设备驱动中分配和填充具体的设备结构StructEvdevStructMouse

4、devStructKeybdev...EventHandler层逻辑Mput设备的数据结构Evdev.cMousedev.cKeybdev.cEvdev.c/Mouedev.c…中分配StructInput_handlerEventHandler的结构Input.hEventHandler层,定义一个具体的EventHandleroStructInput_handle用來创建驱动层Dev和Handler链表的链表项结构Input.hEventHandler层屮分配,包含在Evdev/Mousedev...中。2.输入子系统架构示例图XW'nddtt'sJ

5、

6、5』

7、网JCuslomAppllc^lion/dev^npul^s

8、Consd^~

9、4♦♦♦[Kcrno*Space}:jn11riHartf^areiii4iiTAiiTAjcceierotneierHollerV4uinlnr输入核心提供了底层输入设备驱动程序所需的API,如分配/释放一个输入设备:structinput_dev*input_allocate_device(void):voidinput_free_device(structinput_dev*dev);input_allocate_device()返凹的是1个input_dev的结构体

10、,此结构体用于表示1个输入设备。注册/注销输入设备用的如下接口:int_must_checkinput_register_device(structinput_dev*);voidinput_unregister_device(structinput_dev*);报告输入承件用的如卞接口:/*报告指定type、code的输入事件*/voidinput_event(structinput_dev*dev,unsignedinttype,unsignedintcode,intvalue);广报告键值*/voidinput_report_key(structin

11、put_dev*dev,unsignedintcode,intvalue);广报告相窈坐标*/voidinput_report_rel(structinput_dev*dev,unsignedintcode,intvalue);广报告绝对坐标*/voidinput_report_abs(structinput_dev*dev,unsignedintcode,intvalue);广报告同昜事件*/voidinput_sync(structinput_dev*dev);Input驱动的子系统已经控制I/O,换句话read/write不需要驱动直接.驱动只需要i

12、nput_report_xxx()±传信息。它们最终调用input

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。