③tiny4412 Linux驱动开发之输入子系统

本次介绍Linux的输入子系统的驱动开发.

Linux  内核的输入子系统为鼠标、键盘、触摸屏、游戏杆等输入设备提供了驱动框架。 当程序员要为自己的输入设备编写驱动程序时,只需要实现从设备获取输入事件即可。至于 输入事件如何处理,用户接口如何实现,都由输入子系统完成。这大大减轻了输入驱动程序 的编码工作,也提高了驱动程序的稳健性。  

同时输入子系统为所有输入设备都为应用层提供了标准的接口,这大大提高了驱动程序 的易用性。  

输入子系统的驱动代码在内核的<drivers/input/> 目录下。

输入子系统构成  
   输入子系统的实现需要满足以下需求:  
   (1)  输入子系统要为每个输入设备都在/dev/ 目录下生成一个设备文件,以方便应用程序 读取指定输入设备产生的事件;  
   (2)  对于每一个输入设备,在输入子系统只需要实现其事件获取即可,至于事件如何处理、如何到达设备文件则不需要考虑;  

   (3)  在Linux 输入设备的可以分为事件类(如USB  鼠标、USB 键盘、触摸屏等)、MOUSE 类(特指 PS/2  接口的输入设备)、游戏杆等类型,为这些输入设备而实现的设备文件的接口必须有所差别。因此输入子系统需要为不同类型的输入设备实现正确的设备文件接口。

本次将通过开发一个简单的输入子系统代码来了解输入子系统,本次结合平台总线 + 输入子系统的方式开发,以下是相关代码:

先定义一个头文件:

#ifndef __PLAT_INPUT_H__
#define __PLAT_INPUT_H__



struct key_info {
    char    *name;
    int     gpio;
    int     code;
    int     flags;
};

struct key_platdata {
    struct key_info    *key_desc;
    int         num;
};



#endif

输入子系统平台设备信息代码:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/input.h>
#include <linux/gpio.h>
#include <linux/interrupt.h>
#include <linux/platform_device.h>


#include "key_info.h"



struct key_info key_pdesc[4] = {
    [0] = {
        .name = "KEY_UP",
        .gpio = EXYNOS4_GPX3(2),
        .code = KEY_UP,
        .flags = IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
    
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值