input输入子系统讲解

        Linuxinput子系统提供了输入设备的驱动框架,比如鼠标、键盘、触摸屏等就属于输入设备。Linux中关于input子系统的文档在Documentation/input目录,input的核心代码在input.cinput.h中。

 

 

 

        input_handle, input_handler, input_dev

input_handle, input_handler, input_devinput子系统中最重要的3个数据结构。

 

 

        (1)input_handler用于上层应用获取输入事件。上层应用打开输入设备的设备节点,然后对节点进行读写操作以获得鼠标移动信息,或者键盘信息等等。这里对设备节点的文件操作函数就是由input_handler提供。

 

 

 

 

 

 

       (2)input_dev代表的是具体的设备,比如鼠标、键盘等等。 

        对于一台Linux电脑,可能会连着多个鼠标、多个键盘。每一个鼠标都能控制光标的运动,每一个键盘也都能正常使用。这在input子系统中,体现为一个input_handle关联多个input_dev,能够同时从多个input_dev获取输入消息。与此同时,linux中可能会有多个device节点同时与一个input具体设备关联,这样,应用程序通过任何一个设备节点,都可以获得例如鼠标、键盘等具体设备的输入信息。所以,input_devinput_handler之间是多对多的关联关系,而这些关联就是由input_handle表示。

 

 

 

        (3)handlerdev之间关联的建立

   首先看看input_handle的结构体成员:

        input_handle中包含一个input_dev的指针和一个input_handler的指针,所以能建立handlerdev之间的一个一对一的关联。在input_handler中,有一个链表h_list,指向和这个handler关联的所有input_handle,通过这些handle就可以找到与handler关联的所有dev。同样的,在input_dev中,也有一个链表h_list,指向与dev关联的所有input_handle,通过这些handle可以找到与dev相关的所有handler。通过这两个链表和input_handleinput_handlerinput_dev之间建立了一个复杂的网状结构。

 

    那么,input_handlerinput_dev之间建立关联的规则是什么?即在什么情况下需要建立关联,什么时候不需要建立关联?这就需要handlerdev之间有一个匹配机制。

 

        input_handler中有两个指针,id_tableblacklist,其中blacklist是黑名单,凡是与之匹配的dev都将被强制过滤;而与id_table中任意一项匹配的dev才能与handler建立关联。

 -------------------------------------------------------------------------

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值