`
carywei
  • 浏览: 191244 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Linux input系统(转)

 
阅读更多

Linux 系统提供了input子系统,按键、触摸屏、键盘、鼠标等输入都可以利用input接口函数来实现设备驱动,因此,12.1~12.2节的按键和触摸屏设备驱动都可以作为input设备驱动而实现。

在Linux 内核中,input设备用input_dev 结构 体描述,使用input子系统实现输入设备驱动的时候,驱动的核心工作是向系统报告按键、触摸屏、键盘、鼠标等输入事件(event,通过 input_event结构 体描述),不再需要关心文件操作接口,因为input子系统已经完成了文件操作接口。驱动报告的事件经过InputCore和 Eventhandler最终到达用户空间。

通过input子系统,具体的输入设备驱动只需要完成如下工作。

l 在模块加载函数中告知input子系统它可以报告的事件。

设备驱动通过set_bit()告诉input子系统它支持哪些事件,如下所示:

set_bit(EV_KEY, button_dev.evbit);
 l 在模块加载函数中注册输入设备。

注册输入设备的函数为:

int input_register_device(struct input_dev
 *dev);
 l 在键被按下/抬起、触摸屏被触摸/抬起/移动、鼠标被移动/单击/抬起时通过input_ report_xxx()报告发生的事件及对应的键值/坐标等状态。

主要的事件类型包括EV_KEY(按键事件)、EV_REL(相对值,如光标移动,报告的是相对最后一次位置的偏移)和EV_ABS(绝对值,如触摸屏和操纵杆,它们工作在绝对坐标系统)。

用于报告EV_KEY、EV_REL和EV_ABS事件的函数分别为:

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);
 input_sync()用于事件同步,它告知事件的接收者驱动已经发出了一个完整的报告。

例如,在触摸屏设备驱动中,一次坐标及按下状态的整个报告过程如下:

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(input_dev
);  //同步
 在模块卸载函数中注销输入设备。注销输入设备的函数为:

void input_unregister_device(struct input_dev
 *dev);
 代码清单12.28给出了一个最简单的使用input接口实现按键设备驱动的范例,它在中断服务程序中向系统报告按键及同步事件。

代码清单12.28 最简单的input设备驱动

1  /*在按键中断中报告事件*/
2  static void button_interrupt(int irq, void *dummy, struct pt_regs *fp)
3  {
4    input_report_key(&button_dev, BTN_1, inb(BUTTON_PORT) &1);
5    input_sync(&button_dev);
6  }

8  static int _ _init button_init(void)
9  {
10   /*申请中断*/
11   if (request_irq(BUTTON_IRQ, button_interrupt, 0, "button", NULL))
12   {
13     printk(KERN_ERR "button.c: Can't allocate irq %d ", button_irq);
14     return  - EBUSY;
15   }
16
17   button_dev.evbit[0] = BIT(EV_KEY);    //支持EV_KEY事件
18   button_dev.keybit[LONG(BTN_0)] = BIT(BTN_0);
19
20   input_register_device(&button_dev);   //注册input设备
21 }
22
23 static void _ _exit button_exit(void)
24 {
25   input_unregister_device(&button_dev);   //注销input设备
26   free_irq(BUTTON_IRQ, button_interrupt); //释放中断
27 }

 

 

本篇文章来源于:开发学院 http://edu.codepub.com    原文链接: http://edu.codepub.com/2010/0701/23935.php

分享到:
评论

相关推荐

    Linux Input子系统分析.pdf

    ### Linux Input子系统详解 #### 一、Input子系统概述 Linux Input子系统是Linux内核中的一个重要组成部分,它负责管理各种输入设备,包括但不限于键盘、鼠标、触摸屏、游戏控制器以及非传统的输入设备如蜂鸣器等...

    linux input子系统简单范例

    通过按键中断驱动程序实现linux input子系统的简单范例,简单易懂,内含input子系统的注册,上报和同步

    Linux 下的input 子系统 原理

    在Linux操作系统中,input子系统是负责处理各种输入设备的关键组件。它为键盘、鼠标、触摸屏、游戏控制器等提供了一种统一的接口,使得内核可以高效地管理和响应来自这些设备的输入事件。理解input子系统的原理对于...

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

    Linux 输入子系统(input subsy

    linux_input子系统详截

    Linux Input子系统是Linux内核中负责处理各种输入设备(如键盘、鼠标、触摸屏、传感器等)的关键部分。它作为一个中间层,将底层硬件驱动与上层应用程序隔离开来,提供了一种统一的方式来处理来自不同输入设备的事件...

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

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

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

    Linux设备模型中的Input子系统是Linux内核中处理输入设备的核心部分,它负责管理各种输入设备,如键盘、鼠标、触摸屏、游戏控制器等。Input子系统的架构设计旨在提供一个统一的接口,使得驱动程序可以方便地与内核...

    lis3dh linux input driver

    标题中的“lis3dh linux input driver”指的是Linux操作系统下的一个驱动程序,用于支持STMicroelectronics公司的LIS3DH三轴加速度传感器。LIS3DH是一款高性能、低功耗的微电子机械系统(MEMS)传感器,能检测设备在...

    linux input subsystem 剖析

    Linux 输入子系统(Input Subsystem)是Linux内核中处理各种输入设备的关键部分,它为键盘、鼠标、触摸屏、游戏控制器等设备提供了一个统一的框架。本篇将深入剖析Linux驱动中的input subsystem机制,通过具体的实例...

    linux input子系统

    在输入子系统中,驱动程序通常会实现`input_event`函数,用于向输入子系统报告设备事件,如按键按下或移动。输入子系统接收到这些事件后,会通过中断服务例程(ISR)或者轮询方式来处理,然后将事件传递给用户空间的...

    Linux input子系统学习小结

    ### Linux Input 子系统学习小结 #### 一、基本框架 Linux Input 子系统是内核中的一个重要组成部分,用于处理各种输入设备的数据。它的设计目的是为了提供一个统一且灵活的接口来支持多种类型的输入设备,包括...

    linux input子系统 内核与应用 接口 分析详解

    1. **/dev/input**:Linux内核通过在/dev/input目录下创建设备节点,为用户提供访问输入设备的接口。每个输入设备对应一个设备节点,用户空间的应用可以通过打开、读取和关闭这些节点来获取事件。 2. **Evdev**:...

    Linux2.6设备模型之Input子系统详解

    Linux 2.6设备模型中的Input子系统是一个关键的组件,它充当了操作系统与各种输入设备(如键盘、鼠标、触摸屏等)之间的桥梁。Input子系统的主要目标是为上层应用程序提供一个统一的接口,使得系统能够方便地处理...

    触摸屏驱动详细讲解(规格书+代码+linux input系统讲解+多点触摸协议)

    触摸屏详细讲解,包括: 1,FT5x06规格书,对应驱动代码,详细解释; 2,GT811规格书,对应驱动代码,详细解释;...3,Linux input系统详细解释,和上面2个驱动对比分析; 4,MT多点触摸协议介绍。

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

    Linux内核的Input子系统是操作系统中管理输入设备的核心组件。在Linux系统中,Input子系统负责处理来自不同输入设备(如键盘、鼠标、触摸屏等)的输入事件,并提供统一的接口供用户空间程序使用。本文将深入分析...

    ZYNQ 7010-7020实现input子系统驱动框架编程(Linux驱动).zip

    在提供的资源中,"ZYNQ 7010-7020实现input子系统驱动框架编程(Linux驱动)"包含了具体的代码实现,可以作为参考来理解和学习如何编写针对ZYNQ 7010-7020的input子系统驱动。通过对这些代码的阅读和实践,开发者...

    linux内核input子系统解析

    ### Linux内核input子系统深度剖析 Linux内核的`input`子系统是负责处理所有输入设备的关键组件,包括但不限于键盘、鼠标、触摸屏等。它不仅为Android、X Windows、Qt等上层应用提供了标准化的接口,还简化了驱动...

    Android Linux内核的input子系统

    《Android Linux内核的input子系统详解》 在Android操作系统中,输入设备的管理与处理是至关重要的,而这一切的核心就是Linux内核的input子系统。这个子系统旨在支持Linux中的各种输入设备,如键盘、触摸屏、鼠标等...

Global site tag (gtag.js) - Google Analytics