/* * 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库调用作为 系统的输入。 |
|
来自: wanwanstudy > 《Input的系统架构》