Linux INPUT 子系统

本文介绍了Linux内核的INPUT子系统,用于管理按键、鼠标、键盘等输入设备。详细阐述了input子系统框架,包括驱动层、核心层和事件层的分工。讲解了input驱动的编写流程,包括如何注册input_dev、初始化事件类型和值,以及上报输入事件的API函数input_event和input_sync的使用。
摘要由CSDN通过智能技术生成

Linux INPUT 子系统

按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设备,用户只需要负责上报输入事件,比如按键值、坐标等信息,input 核心层负责处理这些事件。

input 子系统简介

input 就是输入的意思,因此 input 子系统就是管理输入的子系统,比如按键输入、键盘、鼠标、触摸屏等等这些都属于输入设备,不同的输入设备所代表的含义不同,按键和键盘就是代表按键信息,鼠标和触摸屏代表坐标信息。input 子系统分为 input 驱动层、input 核心层、input 事件处理层。
input 子系统框架如下图所示:
在这里插入图片描述
左边就是最底层的具体设备,比如按键、USB 键盘/鼠标等,中间部分属于
Linux 内核空间,分为驱动层、核心层和事件层,最右边的就是用户空间,所有的输入设备以文件的形式供用户应用程序使用。我们编写驱动程序的时候只需要关注中间的驱动层、核心层和事件层,这三个层的分工如下:
驱动层:输入设备的具体驱动程序,如按键驱动程序,向内核层报告输入内容。
核心层:承上启下,为驱动层提供输入设备注册和操作接口。通知事件层对输入事件进行处理。
事件层:主要和用户空间进行交互。

input 驱动编写流程

我们在使用 input 子系统处理输入设备的时候就不需要去注册字符设备了,我们只需要向系统注册一个 input_device 即可。
1、注册 input_dev
input事件类型如下:
在这里插入图片描述
比如我们要使用到按键,那么就需要注册 EV_KEY 事件,如果要使用连按功能的话还需要注册 EV_REP 事件。另外,我们要使用按键事件,还要用到 keybit,keybit 就是按键事件使用的位图,Linux 内核定义了很多按键值。按键
值如下:
在这里插入图片描述
我们可以将开发板上的按键值设置为上图的任意一个,比如我们可以将按键值设置为 KEY_0。在编写 input 设备驱动的时候我们需要先申请一个 input_dev 结构体变量,使用input_allocate_device 函数来申请一个 input_dev,此函数原型如下所示:

struct input_dev *input_allocate_device(void)

参数:无。
返回值:申请到的 input_dev。
如果要注销的 input 设备的话需要使用 input_free_device 函数来释放掉前面申请到的input_dev,input_free_device 函数原型如下:

void input_free_device(struct input_dev 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值