`
阅读更多

Linux输入子系统(Input Subsystem)


1.1.input子系统概述

1.2. input子系统结构图


input子系统结构图如下图1所示:

图1 输入子系统结构图


1.3.linux中输入设备驱动的分层

linux中输入设备驱动的分层如下图2所示:


图2 linux中输入设备的分层

1.4. 输入子系统设备驱动层实现原理


在Linux中,Input设备用input_dev结构体描述,定义在input.h中。设备的驱动只需按照如下步骤就可实现了。
1).在驱动模块加载函数中设置Input设备支持input子系统的哪些事件;
2).将Input设备注册到input子系统中;
3).在Input设备发生输入操作时(如:键盘被按下/抬起、触摸屏被触摸/抬起/移动、鼠标被移动/单击/抬起时等),提交所发生的事件及对应的键值/坐标等状态。

1.5.软件设计流程


软件设计流程如下图3所示

图 3 input子系统软件设计流程

1.6.与软件设计有关的API函数


1.6.1.分配一个输入设备


Struct input_dev *input_allocate_device*(void);

1.6.2.注册一个输入设备


Int input_register_device(struct input_dev *dev);


1.6.3.驱动实现-事件支持


Set_bit告诉inout子系统它支持哪些事件
Set_bit(EV_KEY,button_dev.evbit)
Struct input_dev中有两个成员,一个是evbit;一个是keybit.分别用来表示设备所支持的事件类型和按键类型。


1.6.3.1事件类型


Linux中输入设备的事件类型有(这里只列出了常用的一些,更多请看linux/input.h中):EV_SYN 0x00 同步事件
EV_KEY 0x01 按键事件
EV_REL 0x02 相对坐标
EV_ABS 0x03 绝对坐标
EV_MSC 0x04 其它
EV_LED 0x11 LED
EV_SND 0x12 声音
EV_REP 0x14 Repeat
EV_FF 0x15 力反馈


1.6.4.驱动实现-报告事件


Void input_event(struct input_dev *dev,unsigned int type,unsigned int code,int value);//报告指定type,code的输入事件
Void input_report_key(struct input_dev *dev,unsigned int code,int value);//报告键值
Void input_report_rel(struct input_dev *dev,unsigned int code,int value);//报告相对坐标
Void input_report_abs(struct input_dev *dev,unsigned int code,int value);//报告绝对坐标
Void input_sync(struct input_dev *dev);//报告同步事件
在触摸屏驱动设计中,一次坐标及按下状态的整个报告过程如下:
Input_report_abs(input_dev,ABS_X,x);//X坐标
Input_report_abs(input_dev,ABS_Y,y);//Y坐标
Input_report_abs(input_dev,ABS_PRESSURE,pres);//压力
input_sync(struct input_dev *dev);//同步

1.6.5释放与注销设备


Void input_free_device(struct input_dev *dev);
Void input_unregister_device(struct input_dev *);

 

分享到:
评论

相关推荐

    linux输入子系统

    总结,Linux输入子系统是一个高效且灵活的框架,它简化了输入设备的驱动编写,同时为应用程序提供了统一的事件处理方式。通过对输入子系统的深入理解和利用,开发者可以更好地管理和控制各种输入设备,从而提升系统...

    Linux输入子系统

    Linux内核的输入子系统是操作系统与用户交互的重要部分,主要负责处理来自各种输入设备(如键盘、鼠标、触摸屏等)的事件。在Linux 3.0.1内核中,输入子系统的设计和实现分为三个层次:Input核心层、Device设备层和...

    Linux输入子系统在触摸屏驱动上的实现.pdf

    "Linux输入子系统在触摸屏驱动上的实现" Linux输入子系统是Linux操作系统中的一种输入设备管理机制,它负责管理和控制各种输入设备,如键盘、鼠标、触摸屏等。 Linux输入子系统在触摸屏驱动上的实现是指使用Linux...

    基于Linux 输入子系统模型的按键驱动在S3C6410

    基于Linux 输入子系统模型的按键驱动在S3C6410 基于Linux 输入子系统模型的按键驱动在S3C6410

    linux 输入子系统驱动资料

    在这个资料包中,你将深入学习Linux输入子系统的原理和实践操作。 首先,Linux输入子系统的核心概念包括设备驱动、事件处理和多设备支持。设备驱动是连接硬件和操作系统之间的桥梁,它们负责与具体的输入设备交互,...

    linux输入子系统框架

    本文档主要介绍了为何要引进输入子系统,以及实现流程,并附有一例子说明实现的过程。

    Linux输入子系统及触摸屏驱动分析.doc

    以下是关于Linux输入子系统及触摸屏驱动的一些关键知识点: 1. **Input子系统架构**: - 输入设备由`input_dev`结构体描述,包含了设备的所有属性,如支持的事件类型和按键。 - 输入事件通过`input_event`结构体...

    Linux中Input输入子系统分析.pdf

    Linux 中 Input 输入子系统分析 Linux 操作系统中的 Input 输入子系统是一个非常重要的组件,它负责处理各种输入设备的事件,例如键盘、鼠标、触摸屏等。Input 子系统是一个多层次结构,主要分为三层:Input driver...

    Linux输入子系统流程结构图

    Linux输入子系统的流程结构图,给你一个对于Linux下的输入子系统一个清晰地认识。

    Linux 输入子系统1

    Linux 输入子系统是Linux内核中的一个重要组成部分,它负责管理和处理来自各种输入设备的事件,如键盘、鼠标、触摸屏等。这个子系统为设备驱动提供了标准化的接口,简化了驱动开发过程,使得驱动开发者无需关注底层...

    Linux_Android——输入子系统input_event传递 (二) - CSDN博客1

    【Linux/Android 输入子系统input_event传递 (二)】 在Linux和Android系统中,输入子系统扮演着至关重要的角色,它负责处理来自各种输入设备(如键盘、鼠标、触摸屏等)的事件,并将这些事件转发给用户空间的应用...

    Linux输入子系统的分析与应用.pdf

    Linux 输入子系统是Linux内核中的一个重要组成部分,它负责管理和协调各种输入设备,如键盘、...通过分析和应用Linux输入子系统,我们可以更高效地实现对各类输入设备的支持,从而更好地服务于Linux操作系统及其应用。

    Linux内核Input子系统初始化驱动架构.pdf

    一旦设备被注册,输入子系统就可以开始接收和处理来自输入设备的事件。当输入事件发生时,内核会通过已注册的handler来处理这些事件,并最终将事件传递给用户空间。 用户空间程序通常通过读取位于/dev/input目录下...

    linux input子系统

    总的来说,Linux输入子系统是一个高效且灵活的框架,允许内核支持多种输入设备,并且能轻松地添加新的设备驱动。通过对硬件资源的精细管理和事件处理机制,它为用户提供了一致且可靠的输入体验。

    Linux Input子系统分析.pdf

    Linux Input子系统是Linux内核中的一个重要组成部分,它负责管理各种输入设备,包括但不限于键盘、鼠标、触摸屏、游戏控制器以及非传统的输入设备如蜂鸣器等。Input子系统的灵活性和可扩展性使得它能够很好地适应...

    基于输入子系统的Linux触摸屏驱动的实现.pdf

    本文主要探讨了基于输入子系统的Linux触摸屏驱动的实现,涉及Linux操作系统、系统开发以及专业指导。在Linux内核中,输入子系统是负责处理各种输入设备(如键盘、鼠标、触摸屏等)的框架。对于触摸屏驱动,它需要与...

    Linux设备模型之input子系统详解

    Linux 输入子系统(input subsy

    基于触摸屏驱动的Linux内核输入子系统研究.pdf

    【Linux内核输入子系统】 Linux内核输入子系统是Linux操作系统中负责处理各种输入设备,如键盘、鼠标和触摸屏等输入事件的核心模块。它为设备驱动提供了一个统一的接口,使得开发者可以更容易地编写和管理这些设备的...

Global site tag (gtag.js) - Google Analytics