Linux input 子系统分析之一 总体框架说明

     从今天开始我们进行linux input子系统内容的分析,针对linux子系统,涉及字符设备、input device、input handler,还可能涉及我们之前介绍的tty子系统。针对input子系统专栏,我们大致划分如下几个方面:

一、linux input子系统软件架构说明

二、input相关字符设备驱动分析

三、input device分析

四、input handler分析

五、input device开发流程说明

六、虚拟input device实现

 

input子系统框架

       本章我们主要介绍input子系统框架,针对input子系统而言,对上层而言主要提供字符设备文件节点,以便应用程序通过vfs完成对input device的访问操作。

 

如下图所示,input子系统主要包括input_handler、input_device、input_handle这三个部分;

其中:

  1. input_handler可以理解为一个input 设备的驱动;
  2. input_device即代表一个input设备的抽象;
  3. 而input_handle则表示完成了input device与input handler的绑定操作,通过input_handle完成了input_handler、input_device的关联。针对input_device而言,若其接收到数据(如按键按下、鼠标点击等),则将针对该input_device上所有的input_handle,均调用该input_handle所关联的input_handler的event接口,从而将该input_device接收的事件发送给所有该input_device绑定的input_handler;
  4. 其实input_handler、input_device的匹配及探测过程和linux设备驱动模型中bus_type、device、device_driver的匹配及探测过程是类似的,在input子系统中,当进行input_handler/input_device注册时,均会遍历当前系统中已注册的input_device/input_handler,并调用匹配函数进行匹配检测,若input_device与input_handler完成匹配后,则创建input_handle作为input_device与input_handler匹配的关系纽带(即input_handler可以通过input_handle找到其匹配的input_device,实现向input_device发送数据;而input_device也可以通过input_handle找到其匹配的input_handler,实现向input_handler中发送数据);而input_handler与input_device匹配后,则调用input_handler的connect函数进行探测操作(与设备驱动模型中的probe函数是一样的);而在该connect函数中,则可以进行该input_device对应的字符设备的创建(这点和我们在设备驱动的probe函数中创建字符设备是一样的)。而有些input_handler的connect函数中,则不需要创建字符设备文件,如key board handler,则不需要创建字符设备文件,只需要将接收的数据发送给对应tty子系统对应的tty_port缓存中,然后再唤醒tty_ldisc的读接口,最终实现将数据发送到tty_port对应的字符设备文件中去。
  5. input子系统最下层的input_device,可以是键盘、鼠标、led、按键等,而这些设备可以是uart、usb等设备;

 

 

 

 

     如上便是input子系统的框架,其实input子系统相对来说比较简单,如果理解设备驱动模型的话,基本上对input子系统就比较熟悉了。虽然input子系统框架并不复杂,但是input子系统中也涉及多个内核子系统,比如字符设备驱动、tty子系统、iic子系统、spi子系统、uart子系统、usb2uart子系统等等;读者可以多看看input device相关的驱动程序,对驱动能力的提高会有好处。

 

 

      以上便是本章的主要内容,内容相对比较简单,主要让大家对input子系统有个感性的认知,后续几章我们将对input子系统的实现进行分析。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值