http://www.cnblogs.com/lifexy/p/7553861.html
输入子系统编写驱动程序(键盘按键驱动)
一、目的:
实现按键驱动,让开发板的4个按键代表键盘中的l键、s键、enter键、left-shift键。
二、介绍几个结构体和函数的使用:
2.1 input_dev驱动设备结构体中常用成员如下:
struct input_dev {
void *private;
const char *name;//设备名字
const char *phys;//文件路径,比如 input/buttons
const char *uniq;
struct input_id id;
//表示支持哪类事件,常用有以下几种事件(可以多选)
unsigned long evbit[NBITS(EV_MAX)];
unsigned long keybit[NBITS(KEY_MAX)];//存放支持的键盘键值 键盘变量定义在:include/linux/input.h,比如:KEY_L(按键L)
unsigned long relbit[NBITS(REL_MAX)];//存放支持的相对坐标值
unsigned long absbit[NBITS(ABS_MAX)];//存放支持的绝对坐标值
unsigned long mscbit[NBITS(MSC_MAX)];//存放支持的其他事件,也就是功能
unsigned long ledbit[NBITS(LED_MAX)];//存放支持的各种状态的LED
unsigned long sndbit[NBITS(SND_MAX)];//存放支持的各种声音
unsigned long ffbit[NBITS(FF_MAX)];//存放支持的受力设备
unsigned long swbit[NBITS(SW_MAX)];//存放支持的开关功能
};
2.2 函数如下:
struct input_dev *input_allocate_device(void) //想内核中申请一个input_dev设备,然后返回这个设备
void input_unregister_device(struct input_dev *dev) //卸载/sys/class/input目录下的input_dev这个类设备,一般在驱动出口函数写
void input_free_device(struct input_dev *dev) //释放input_dev这个结构体,一般在驱动出口函数写
set_bit(nr,p); //设置某个结构体成员p里面的某位等于nr,支持这个功能
/* 比如:
set_bit(EV_KEY, buttons_dev->evbit); //设置input_dev结构体buttons_dev->evbit支持EV_KEY
set_bit(KEY_S, buttons_dev->keybit); //设置input_dev结构体buttons_dev->keybit支持按键“s”
*/
void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)//上报事件
inp

本文详细介绍了一个简单的按键驱动程序开发过程,包括如何配置input_dev结构体、注册和注销设备、处理中断和服务函数等内容。
最低0.47元/天 解锁文章
2853

被折叠的 条评论
为什么被折叠?



