linux驱动开发之路(五)输入子系统

本文介绍了Linux输入子系统,作为I/O设备驱动的中间层,提供统一的上层接口。内容包括输入子系统的定义、框架解析,以及设备空间申请、input设备注册和事件上报的代码编写步骤,帮助开发者理解并简化驱动开发工作。
摘要由CSDN通过智能技术生成

一、前言

在前面的开发过程中,我们都是直接创建一个设备类,然后注册这一个类的设备。那么这样的方法无疑会带来一些问题,我们自己尚且可以调用这些类和设备,对于其他的开发者那可能就需要特殊的文档说明来帮助使用。为了避免这种情况,在linux中,存在一个linux输入子系统来管理输入设备。

二、input输入子系统:

2.1、定义:

Input子系统是所有I/O设备驱动的中间层,为上层提供了一个统一的界面。例如,在终端系统中,我们不需要去管有多少个键盘,多少个鼠标。它只要从input子系统中去取对应的事件(按键,鼠标移位等)就可以了。今天就对input子系统做一个详尽的分析。
这篇文章比较详细的介绍了关于输入子系统的概念

  • 当然作为一个入门的开发者,对这个概念的理解也只能说是浅浅的知道,但是不妨在实际的开发中来体会用处的特点。

2.2、框架:

这是韦老师画的理解图:

在这里插入图片描述

  • 在这个框架中,主要分为两个部分,也就是handler部分,和device部分。中间,可以通过建立一个handle来实现连接。

三、代码编写:

我们研究input的具体实现当然需要费一番功夫,但是对于我们开发驱动的来说,其实过程相对于之前的开发,过程反而比较简单和快捷。

3.1、申请设备空间和注册input设备:

input已经定义了一些设备类,这里我们只需要为设备申请空间然后注册这个我们自己的input设备就可以啦。

static int buttons_init(void)
{
	int i = 0;
	/*1. 分配一个input_dev结构体*/
	buttons_dev = input_allocate_device();
	
	/*3. 注册*/
	input_register_device(buttons_dev);

	/*4. 硬件相关操作*/

	return 0;
}

3.1、在定时器函数中上报事件:

关于事件的上报,这篇文章写的很详细,直接点击观看

我们通过上报事件这一种方式,来实现数据的传送,

	if(pinval)
	{
		/* 松开:最后一个参数,0表示松开,1表示按下 */
		//这里上报的设备为buttons_dev,类型为EV_KEY按键,上报的数据为pinsdesc->keyval,上报的数值为0
		input_event(buttons_dev,EV_KEY,pindesc->key_val,0);
	}
	else
	{
		/* 按下 */
		input_event(buttons_dev,EV_KEY,pindesc->key_val,1);
		input_sync(buttons_dev);
	}

四、总结:

其实,在了解了input系统的实现过程之后,我们编写代码反而变得比较容易了,因为很多工作框架已经帮助我们完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值