Linux input设备子系统的软件架构

来源:互联网 发布:在淘宝买散片cpu可靠吗 编辑:程序博客网 时间:2024/04/28 22:33


1、设备号

所有的输入设备的主设备号都是13,其通过次设备来将输入设备进行分类,如下图:

 joystick(游戏杆):0~31

mouse(鼠标):32~62

mice(鼠标):63

Event设备(事件):64~95


2、软件架构


linux输入子系统分为三层,包括input核心层、input事件处理层和input设备驱动层。如下图:

                                        


(1)kernel初始化时,事件处理层(input-handler)向input-core注册,并告知input-core其能处理的设备驱动的类型,例如event_handler事件处理(evdev.c)能够处理触摸屏和按input-device键驱动。

(2)设备驱动层:当输入设备驱动在初始化时向input-core注册input-device时,input-core会给其匹配合适的事件处理层的input-handler,最终用input-handle来关联两者,并在input-handler的控制下生成用户访问的字符设备文件。

(3)设备核心层:假如设备文件名为/dev/input/event0,那次设备号即64,input_open_file通过次设备号得到对应的事件处理层event_handler,并交给该handler进行管理。

(4)事件处理层:event_handler根据次设备号可以得到该输入驱动在其管理设备数组中evdev_table的偏移(为0),进而得到对应的input_handle,最终找到关联的输入设备驱动input-device。

 

                                                  input1


3、触屏消息的产生和读取过程。

(1)可以想象出在应用框架中会有一个高优先级的线程一直在等待读取触摸和按键消息。当没有消息产生时,该线程处于休眠状态。

(2)当用户触屏时,触摸屏会产生一个外部硬件中断,在输入设备驱动的中断处理中会读取触屏坐标,并向其对应的input-handler汇报,而input-handler在分析该消息是否是重复消息等过程后向打开该handler的线程发送信号量进行唤醒,并将该触屏消息填入线程的消息队列。

(3)应用框架线程会通过相应接口来读取该消息,最终获得LCD坐标系坐标,并进行后续处理。

0 0