结构简介:input子系统
2013-06-19 10:04
204 查看
数据结构 | 用途 | 定义位置 | 具体数据结构的分配和初始化 |
Struct input_dev | 驱动层物理Input设备的基本数据结构 | Input.h | 通常在具体的设备驱动中分配和填充具体的设备结构 |
Struct Evdev Struct Mousedev Struct Keybdev… | Event Handler层逻辑Input设备的数据结构 | Evdev.c Mousedev.c Keybdev.c | Evdev.c/Mouedev.c …中分配 |
Struct Input_handler | Event Handler的结构 | Input.h | Event Handler层,定义一个具体的Event Handler。 |
Struct Input_handle | 用来创建驱动层Dev和Handler链表的链表项结构 | Input.h | Event Handler层中分配,包含在Evdev/Mousedev…中。 |
input subsystem 用来统一处理数据输入设备,例如键盘,鼠标,游戏杆,触摸屏等等。
这里引用 Linux Journal 上的一个图来说明input subsystem 的架构:
(http://www.linuxjournal.com/article/6396)
我们可以看到,input core 用来协调硬件的input事件 和 用户层应用之间的通讯。
这里再引用 ELDD 上的一个图片,来详细说明其内部的结构:
在内核中,input_dev 表示一个 input设备;input_handler 来表示input设备的 interface。
所有的input_dev 用双向链表 input_dev_list 连起来,如图所示:
在调用 int input_register_device(struct input_dev *dev) 的时候,会将新的 input_dev 加入到这个链表中。
所有的input_handler 用双向链表 input_handler_list 连起来, 如图所示:
在调用 int input_register_handler(struct input_handler *handler) 的时候,会将新的 input_handler 加入到这个链表中。
每个input_dev 和 input_handler 是要关联上才能工作的,在注册 input_dev 或者 input_handler的时候,就遍历上面的列表,找到相匹配的,然后调用 input_handler 的 connect函数来将它们联系到一起。
通常在input_handler 的 connect函数中,就会创建 input_handle, input_handle就是负责将 input_dev 和 input_handler 联系在一起的,如图所示:
这里需要额外说明一下的是:
input_dev 中的 h_node 是 input_handle 链表的list节点,也就是说,一个input_dev,可以对应多个 input_handle.
当设备产生 input event 的时候,例如按下了一个键,驱动就会调用 input_handler 中的 event 函数,同时,如果input_dev 支持的话,也会调用 input_dev 的 event 函数。
这样,设备产生的事件就会被驱动记录下来。
当用户层的程序需要获知这些事件的时候,会调用 input_handler中的 struct file_operations *fops 中的相应函数,例如 read 等等。
可以看出,整个 input 框架的构思还是比较简洁方便的。
相关文章推荐
- linux 输入子系统(2)----简单实例分析系统结构(input_dev层)
- input子系统学习笔记二:数据结构
- input子系统学习笔记二 input子系统介绍及结构图
- input子系统学习笔记二 input子系统介绍及结构图
- input子系统分析之二:数据结构
- linux输入子系统(6)-input子系统介绍及结构图
- Linux时间子系统之二:表示时间的单位和结构
- V4L2 Linux驱动简介(2)驱动结构
- linux驱动由浅入深系列:输入子系统之一(input子系统概述、应用层读取event)
- Linux时间子系统之二:表示时间的单位和结构【转】
- Tomcat 简介之【目录结构】
- I2C子系统驱动架构 - 简介
- linux input输入子系统分析《一》:初识input输入子系统
- Linux设备模型之input子系统详解
- BSTR简介和内部结构【转】
- 【黑马Android】(01)android简介/工程目录结构/拨号器/四种点击事件/后台偷偷发短信
- 【C++学习笔记】结构简介
- input 子系统浅析
- linux input输入子系统分析《四》:input子系统整体流程全面分析