linux input子系统 pdf,[计算机]linux内核input子系统解析.pdf

[计算机]linux内核input子系统解析

linux input

linux input

lliinnuuxx内核iinnppuutt子系统解析

Android Xwindows qt linux

、 、 等众多应用对于 系统中键盘、鼠标、触摸屏等输入设备的支持都通过、或越

来越倾向于标准的input输入子系统。

因为input子系统已经完成了字符驱动的文件操作接口,所以编写驱动的核心工作是完成input系统留出的

接口,工作量不大。但如果你想更灵活的应用它,就需要好好的分析下input子系统了。

input

input

一、iinnppuutt输入子系统框架

下图是input输入子系统框架,输入子系统由输入子系统核心层( InputCore ),驱动层和事件处理层(Event

Handler)三部份组成。一个输入事件,如鼠标移动,键盘按键按下,joystick 的移动等等通过 inputdriver->

Inputcore->Eventhandler->userspace 到达用户空间传给应用程序。

注意:keyboard.c不会在/dev/input下产生节点,而是作为ttyn 终端(不包括串口终端)的输入。

Inputdriver

Inputdriver

二、IInnppuuttddrriivveerr编写要点

1 input

1 input

11、分配、注册、注销iinnppuutt设备

structinput_dev*input_allocate_device(void)

intinput_register_device(structinput_dev*dev)

voidinput_unregister_device(structinput_dev*dev)

2 input input_id

2 input input_id

22、设置iinnppuutt设备支持的事件类型、事件码、事件值的范围、iinnppuutt__iidd等信息

usb usbkbd.c

参见 键盘驱动:

usb_to_input_id(dev,&input_dev->id);// bustype vendo product

设置 、 、 等

input_dev->evbit[0]=BIT(EV_KEY)| BIT(EV_LED)| BIT(EV_REP);//支持的事件类型

input_dev->ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL) |

BIT(LED_COMPOSE)| BIT(LED_KANA);//EV_LED 事件支持的事件码

for(i= 0;i<255;i++)

set_bit(usb_kbd_keycode[i],input_dev->keybit);//EV_KEY事件支持的事件码

include/linux/input.h中定义了支持的类型(下面列出的是2.6.22内核的情况)

#defineEV_SYN 0x00

#defineEV_KEY 0x01

#defineEV_REL 0x02

#defineEV_ABS 0x03

#defineEV_MSC 0x04

#defineEV_SW 0x05

#defineEV_LED 0x11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值