必杀忍蜂:Android Event输入设备驱动

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 23:19:53
/*
* J.
* Fri Oct 29,2010
*/
Input驱动程序是Linux输入设备的驱动程序,分成游戏杆(joystick),鼠标(mouse和mice)
和事件设备(Event queue)3种驱动程序。其中事件驱动程序是目前通用的驱动程序,可支持
键盘,鼠标,触摸屏等多种输入设备。

Input驱动程序的主设备号是13,3种驱动程序的设备号分配是:
*joystick游戏杆:0~61;
*mouse鼠标:33~62;
*mice鼠标:63;
*事件设备(Event queue):64~95.
实际上,每一种Input设备占用5位,因此每种设备个数是32个。

Event设备在用户空间大多使用read,ioctl,poll等文件系统的接口进行操作,read用于读取
输入信息,ioctl用于获取和设置信息,poll调用可以进行用户空间的阻塞,当内核有按键等中断
时,通过在中断中唤醒poll的内核实现,这样在用户空间的poll调用也可以返回。

Event设备在文件系统中的设备节点为:/dev/input/eventX.
主设备号为13,次设备号递增生成,为64~95,各个具体的设备在misc,touchscreen,keyboard等
目录中。

Event输入驱动的架构如下:



Input驱动程序的头文件:include/linux/input.h
Input驱动程序的核心和Event部分代码:
* drivers/input/input.c   核心代码
* drivers/input/evdev.c   Event部分的实现

input.h中定义了struct input_dev结构,它表示Input驱动程序的各种信息,对于Event
设备分为同步设备,键盘,相对设备(鼠标),绝对设备(触摸屏)等。

Event驱动程序通过Input驱动程序的统一函数进行注册:
int __must_check input_register_device(struct input_dev *);

具体的Event驱动程序需要定义struct input_dev结构体,并且通过input_register_device()
函数进行注册。

Input设备驱动在内核进行menuconfig配置时,配置选项为"Device Drivers" > "Input Device Drivers"

Event驱动程序配置对应的文件是driver/input/Kconfig
其中,Event的配置选项是Event Interface,各个具体设备的接口在各自下面进行支持。

Android中使用Event驱动作为标准的输入设备,在GUI系统中打开Event驱动程序的设备节点,
通常的输入设备是鼠标和触摸屏。

备: Android由init进程在/dev/input/自动建立Event设备的节点,被libui库调用作为
系统的输入。