input子系统(一)

2015年8月28日:至此工作一年有余,分享一些linux模块的学习经验和学习内容给初学者,还望对初学者们有点帮助。

初学安卓底层驱动开发,首先我们肯定要找一个切入点,input子系统是再好不过的一个切入点。熟悉input子系统以后可以再学习sensor模块,这里会涉及到HAL层的知识,这样对于理解其他的模块有很大的帮助。

下面开始input子系统的架构分析:

input子系统主要和触摸屏、鼠标、MSR(磁卡)、hid设备、游戏手柄等有关,这些设备都分别有各自的驱动程序,这里不去一一说明,以下以触摸屏为例来介绍input子系统:

1.硬件基础(作为开发人员应该熟知硬件的工作原理):

电容屏工作原理:

电容屏主要分为表面式电容屏(SCT,SurfaceCapacitive Touch)和投射式电容屏(PCT, Projected Capacitive Touch),其工作原理主要借助耦合电容和寄生电容的容值来断定手指的位置。电容的电极采用ITO铟锡氧化物,ITO薄膜是一种n型半导体材料,具有高的导电率、高的可见光透过率、高的机械硬度和良好的化学稳定性。具体不再赘述,读者若有疑问,可以提出共同探讨。

2.软件主要设计的文件:

2.1 内核层次:

 

输入子系统由设备驱动层、输入子系统核心层和事件处理层组成。

即input.c(核心层)、evdev.c/mousedev.v/joydev.c(事件处理层) 、各类输入设备驱动程序(驱动层)。

 

设备驱动层(inputdevice)提供对硬件寄存器的读写访问,将底层硬件对用户输入访问的响应转换为标准的输入事件;

核心层(inputcore)对下提供了设备驱动层的编程接口(事件上报、设备注册等),对上提供了事件处理层的编程接口;

事件处理层(inputhandler)为用户空间的应用程序提供统一访问设备的接口,如open,read,write等等;

以下分析:

1.注册过程:

         

注册设备

以上过程完成设备的注册和设备的匹配,读者可以跟随流程图静心摸索。

2.事件上报:

凡是底层驱动,无不是调用input_event等类似的接口来上报事件的,鼠标上报按键事件,触屏上报abs事件。

 

事件处理

以上流程主要是把事件放到buffer中,buffer中数据会在inputreader.cpp中被eventhub.cpp中的getevent使用evdev.c中的函数操作集操作,诸如读取,写入等等。

本文从宏观上描述了input子系统kernel层次的的工作流程,一些细节上的问题就需要读者自己去钻研。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值