linux设备之输入子系统框架及API

Linux的输入子系统提供了一个统一处理键盘、鼠标、触摸屏等设备的驱动框架,简化驱动程序开发。该系统包含核心层、设备层和驱动层。编程步骤包括:分配input_dev结构体,设置支持的事件,注册设备,硬件初始化,上报事件,并在退出时释放资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

输入子系统

对不同的输入设备进行统一处理的设备驱动程序框架,包括键盘,鼠标,触摸屏等任何的输入设备都可以通过输入子系统的接口注册到内核中。使用它的好处:

它提供了用于分发输入报告给用户程序的简单事件(envent)的接口,抽取出了输入驱动程序的通用部分,简化了驱动程序,引入了一致性.简便了设备驱动程序的开发。



输入子系统的三层结构: 核心层,具体设备相关的设备层dev和与设备处理的驱动drv层。

input_dev 是硬件驱动层,代表一个input设备

input_handler 是事件处理层,代表一个事件处理器

input_handle 核心层,代表一个配对的input设备与input事件处理函数


输入子系统程序的编写步骤:

1: 分配一个输入设备即input_dev结构体:

声明:static struct input_dev *buttons_dev;

buttons_devinput_allocate_device(); 

必要的判断:

if (!buttons_dev)
{
printk("Bad input_allocate_device()\n");
return ENOMEM;
}

2: 支持的输入事件的相关设置

在source insight里面查找input_dev可得到这个结构体的定义:

/*a:产生那类事件*/
set_bit(EV_KEY,buttons_dev->evbit);
产生按键类事件

set_bit(EV_REP, buttons_dev->evbit);产生重复性事件

/*b:产生类里面的哪些事件L,S,ENTER, LEFTSHIT*/
set_bit(KEY_L, buttons_dev->keybit);
set_bit(KEY_S, buttons_dev->keybit);
set_bit(KEY_ENTER, buttons_dev->keybit);
set_bit(KEY_LEFTSHIFT, buttons_dev->keybit);

3:分配一个输入设备

input_register_device(buttons_dev);

4:硬件相关的初始化:

。。。。


5:上报事件:

input_event(buttons_dev,EV_KEY,pindesc->key_val, 0);

input_sync(buttons_dev); 表示此事件已经完成。

6 在出口函数里面释放和注销相应的设备:

input_unregister_device(buttons_dev);
input_free_device(buttons_dev);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值