1、什么是输入子系统

1、什么是输入子系统

我们设计驱动的时候,可以不使用子系统模型;但是使用了子系统模型,可以提高驱动的性能、简化驱动设计、使驱动可以提供一个标准的接口。


1.1、linux内核中,驱动程序的子系统
1)输入子系统:适合于输入类型的设备,如:鼠标、键盘、触摸屏、按键、游戏杆、拨码开关、….
2)RTC子系统:实时时钟
3)I2C子系统:I2C总线设备
4)SPI子系统:SPI总线设备
5)显示子系统:LCD显示设备,frame buffer
6)网设备子系统:网卡驱动
7)声卡子系统:OSS 或ALSA
8)USB子系统


1.2、什么是输入子系统
输入子系统模型,也是字符设备驱动模型的封装(如:杂项设备驱动模型)。但是比较适合与设计输入类型设备的设备驱动。
linux内核支持的输入设备类型:

#include <linux/intput.h> 宏定义:

#define EV_SYN          0x00   //同步事件
#define EV_KEY          0x01   //-->键盘或按键
#define EV_REL          0x02   //相对坐标,鼠标、手写板
#define EV_ABS          0x03   //绝对坐标,触摸屏
#define EV_MSC          0x04
#define EV_SW           0x05   //拨码开关
#define EV_LED          0x11
#define EV_SND          0x12
#define EV_REP          0x14
#define EV_FF           0x15
#define EV_PWR          0x16
#define EV_FF_STATUS        0x17
#define EV_MAX          0x1f
#define EV_CNT          (EV_MAX+1)

3、查看输入子系统

这里写图片描述


4、查看输入设备的设备文件

这里写图片描述

由此可以看出:输入子系统设备的主设备号是13.


5、读取输入子系统的内容

#cat /proc/evnet1

#cat /dev/input/event0

注意:在linux中,输入设备一般都是使用输入子系统模型来设计的,这样驱动程序可以给应用程序一个标准的数据接口

二、输入子系统中,应用程序从驱动程序中,读出的数据
数据:应用程序从驱动程序中,读出的数据是一个标准的结构体,在linux的应用程序和驱动程序中,都支持该结构体

结构体的定义:

#include <linux/input.h>
struct input_event {
    struct timeval time; //时间戳
    __u16 type; //输入设备的事件类型
    __u16 code; //该类型下的编码
    __s32 value; //编码的值
};

例:
读取键盘的按键”a”
type —-> EV_KEY —>键盘类型的输入事件
code —-> KEY_A —->按键a的编码
value —-> 1–> 按键按下; 0—>按键松开,2—>按键连击

读取触摸屏的坐标
type —-> EV_ABS —>绝对坐标类型的输入事件
code —-> ABS_X —->坐标x,ABS_Y —->坐标y
value —-> 坐标的值

注意:
1)驱动程序使用的头文件在哪里?
在内核源码包的inlucde目录下。如:
内核源码包/include/linux/input.h

2)使用gcc编译的应用程序,使用的头文件在哪里?
ubuntu系统: /usr/include/linux/input.h

3)使用交叉工具链编译应用程序,使用的头文件在哪里?
在交叉工具链中:

猜你喜欢

转载自blog.csdn.net/qq_33487044/article/details/81459915
今日推荐