输入子系统浅析-guolele出品.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
输入子系统浅析-guolele出品

输入子系统浅析作者:guolel1-11网上有很多它们的解析,但是对于实际应用却很少有人举例,笔者在文章中先是解析一下输入子系统(input subsystem)构架先大概说一下,再是针对2440触摸屏的设计应用再讲,希望对大家有作用。输入子系统架构输入子系统在2.6内核的版本中用得很广,主要是有三层结构,input driver、input core、Input handler,至于应用层怎么应用,那不是这系统内容,是实例的内容。先例几个网上的经典图讲一下它们的关系。表一虽然是2.4内核的描述,但是思想还是相同的,表一:数据结构用途定义位置具体数据结构的分配和初始化Struct input_dev驱动层物理Input设备的基本数据结构Input.h通常在具体的设备驱动中分配和填充具体的设备结构Struct EvdevStruct MousedevStruct Keybdev…Event Handler层逻辑Input设备的数据结构Evdev.cMousedev.cKeybdev.cEvdev.c/Mouedev.c …中分配?Struct Input_handlerEvent Handler的结构Input.hEvent Handler层,定义一个具体的Event Handler。Struct Input_handle用来创建驱动层Dev和Handler链表的链表项结构Input.hEvent Handler层中分配,包含在Evdev/Mousedev…中。 输入子系统驱动层(input driver)这层主要的描述结构是struct input_dev,而这层设计的主要工作就是填充这结构体,然后注册,很简单?也很简单,就是填充时有点点麻烦,下面看看。Struct input_dev{const char *name;const char *phys;const char *uniq;struct input_id id;unsigned long evbit[BITS_TO_LONGS(EV_CNT)];unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];unsigned long relbit[BITS_TO_LONGS(REL_CNT)];unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];……int sync;……int (*open)(struct input_dev *dev);void (*close)(struct input_dev *dev);int (*flush)(struct input_dev *dev, struct file *file);int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);struct input_handle *grab;……struct device dev;struct list_headh_list;struct list_headnode;}红色内容就是你要注意一下的内容,其中struct input_id id是用来填充你注册时匹配的依据,这等下会分析;open与close都是给handler层调用的函数,不然我怎么操作你这该死的硬件?flush函数是定义用来重新初始化设备,假如你串口乱了,我就再重新初始化一次;event函数是应用层输入子系统设备时得到调用,具体还在后面有点讲解。struct input_handle是用来连接handler层与driver层,具体连接就是双向链表,它既有driver层的struct input_dev结构也有handler层struct input_handler结构;struct device dev是什么?这不就是linux设备驱动模型里的设备吗?其实linux所有驱动都这种模型(总线、设备、驱动),只是应用于不同的地方,被不同的包装就成不同的子系统,更实际的就是kobject与kset的关系。好填充完了就注册。注册使用input_register_device,这主要的工作就是创建个input device 和匹配handler(这与设备模型很像?也是注册是在链表中都找一次,找到了就匹配,其实都那么一回事)看看内核描述。/** * input_register_device - register device with input core * @dev: device to be registered * * This function registers device with input core. The

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档