关闭

利用linux 内核所提供的input子系统编写字符设备驱动的步骤

628人阅读 评论(0) 收藏 举报
分类:



利用linux 内核所提供的input子系统编写字符设备驱动的步骤:


包含头文件:
#include <linux/input.h>
涉及核心接口体:
struct input_dev {
 .........
 unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; //用于描述设备所产生数据的事件分类
 unsigned long keybit[BITS_TO_LONGS(KEY_CNT)]; //根据事件分类设置具体编码
 unsigned long relbit[BITS_TO_LONGS(REL_CNT)];
 unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];
 unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];
 unsigned long ledbit[BITS_TO_LONGS(LED_CNT)];
 unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];
 unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];
 unsigned long swbit[BITS_TO_LONGS(SW_CNT)];
};


//第一步:实例化输入设备对应的结构体指针
 static struct input_dev *inputdev;


//第二步:为输入设备结构体指针指向的对象分配空间。
 inputdev = input_allocate_device();
//第三步:设置事件分类对应的成员数组和根据事件分类设置编码数组。
可以使用如下两种方法设置:
 
 宏:
 BIT_WORD(), BIT_MASK();
 利用函数来设置:
 
 set_bit(nr, long *array);
 
 button_dev->evbit[BIT_WORD(EV_KEY)] = BIT_MASK(EV_KEY);
 button_dev->keybit[BIT_WORD(BTN_0)] = BIT_MASK(BTN_0);
 
 //set_bit(EV_KEY, evbit); //告诉输入子系统支持哪些事件
 //set_bit(BTN_0, keybit); //告诉输入子系统支持哪些按键
 事件类型:EV_RST   EV_ABS  等
 按键类型(只有当事件类型为KEY时):BTN_0   BTN_LEFT  BTN_1   等
//第四步:向内核注册输入设备
error = input_register_device( );
//反向注册: input_unregister_device();
 如果注册失败,需要使用input_free_device(); 释放利用
 input_allocate_device(); 分配的空间。
//第五步:在拿到数据的地方向用户态上报。
 input_report_abs();
 input_report_rel();
 input_report_key();
 input_sync();  //同步全部结束
 input_mt_sync(); //一个循环的同步结束
 他们都调用input_event();
1
0
查看评论

Linux实现字符设备驱动的基础步骤

Linux应用层想要操作kernel层的API,比如想操作相关GPIO或寄存器,可以通过写一个字符设备驱动来实现。 1、先在rootfs中的 /dev/ 下生成一个字符设备。注意主设备号 和 从设备号。可用如下shell脚本生成: if [ ! -e audioIN ];then ...
  • liukang325
  • liukang325
  • 2014-07-16 15:57
  • 2116

一个简单的字符设备驱动程序和测试程序

------------------------字符设备驱动程序------------------------------ #include  #include  #include  #include  #include  #i...
  • howhot2008
  • howhot2008
  • 2015-11-09 13:48
  • 1121

linux设备驱动第三篇:写一个简单的字符设备驱动

在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动。本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存。 下面就开始学习如何写一个简单的字符设备驱动。首先我们来分解一下字符设备驱动都有那些结构或者方法组...
  • HAOMCU
  • HAOMCU
  • 2015-03-28 19:05
  • 24380

代码:编写一个简单的字符设备驱动(自动创建设备文件)

说明: (1)该篇在上篇的基础上实现了自动创建设备文件的功能; (2)自动创建文件主要用到了class_create()、device_create()两个函数,声明在inclue/linux/device.h里; (3)设备文件的创建和销毁放在模块加载和卸载函数中; #include #incl...
  • liuqinglong_along
  • liuqinglong_along
  • 2016-07-01 17:22
  • 902

linux高级字符设备驱动以及实例(TQ2440)

应用程序即用户空间中,ioctl 原型如下:int ioctl(int fd,unsignedlong cmd,...) 设备驱动方法中:int (*ioctl)(struct inode *inode,struct file *filp,unsigned int cmd,unsigned...
  • zbffff
  • zbffff
  • 2013-09-22 15:25
  • 1341

Linux input子系统分析之一:软件层次

输入输出是用户和产品交互的手段,因此输入驱动开发在Linux驱动开发中很常见。同时,input子系统的分层架构思想在Linux驱动设计中极具代表性和先进性,因此对Linux input子系统。
  • yueqian_scut
  • yueqian_scut
  • 2015-08-23 10:49
  • 3174

简单字符设备驱动流程

1.linux系统将设备分为3类:字符设备、块设备、网络设备。使用驱动程序: 其中,字符设备是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。 2.字符设备驱动模型 ...
  • zq979999
  • zq979999
  • 2015-09-10 18:36
  • 1411

字符设备驱动编写流程以及大概框架

本文主要是针对Linux的字符设备驱动,Linux设备驱动中字符设备驱动的注册类型与注册方式 字符设备是Linux驱动中最简单的驱动,也是最常的驱动! 字符设备驱动除了注册为字符设备类还可以注册为混杂设备类 字符设备可以动态注册也可以静态注册
  • softwoker
  • softwoker
  • 2015-04-18 14:40
  • 2710

Linux Input子系统浅析(二)-- 模拟tp上报键值

通过前一节的分析得到,linux Input子系统上传数据本质上是将input_dev的数据,上报给input_handler, 当用户读入event时,驱动层只需要利用copy_to_user将数据传递至用户空间。当然,以上只是内核中Linux input 的机制,作为驱动工程师我们该如何使用...
  • xiaopangzi313
  • xiaopangzi313
  • 2016-08-31 12:36
  • 1248

字符设备驱动模块与测试代码编写(转)

 设备驱动程序:以内核模块的形式存在也就是*.ko 设备驱动程序和系统调用关系. 系统调用:应有程序和操作系统(内核) 之间的接口(应用程序与内核的交互) 设备驱动程序:内核和设备硬件之间接口(内核与硬件的交互) 整个过程实现了应用程序间接访问了底层的硬件。 test.c中调用ope...
  • horse6508
  • horse6508
  • 2017-11-17 08:48
  • 95
    个人资料
    • 访问:120747次
    • 积分:2142
    • 等级:
    • 排名:千里之外
    • 原创:94篇
    • 转载:53篇
    • 译文:0篇
    • 评论:10条
    最新评论