输入子系统二:如何写一个输入子系统框架下的驱动程序

举报
内核笔记 发表于 2021/06/08 22:40:51 2021/06/08
【摘要】 首先看看一下整体框架: 1、 分配一个input_dev结构体: 在驱动中必须动态分配input_dev结构,使用input_allocate_device static struct input_dev *button_dev; button_dev = input_allocate_device();12 2、设置 :set_bit button_...

首先看看一下整体框架:

这里写图片描述

1、 分配一个input_dev结构体:
在驱动中必须动态分配input_dev结构,使用input_allocate_device

 static struct input_dev *button_dev; button_dev = input_allocate_device();
  
 
  • 1
  • 2

2、设置 :set_bit

 button_dev->name = "gec_input"; button_dev->id.bustype = 0x1; button_dev->id.product = 0x2; button_dev->id.vendor  = 0x3; button_dev->id.version = 0x4; button_dev->evbit[BIT_WORD(EV_KEY)] = BIT_MASK(EV_KEY); button_dev->keybit[BIT_WORD(KEY_C)] = BIT_MASK(KEY_C);
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3、注册:input_register_device(struct input_dev *dev)

4、硬件相关的代码,比如在中断服务程序里上报事件

static irqreturn_t button_interrupt(int irq, void *dev_id)
{ int key_value; key_value = gpio_get_value(S5PV210_GPH2(0)); input_report_key(button_dev, KEY_C, !key_value ); input_sync(button_dev); return IRQ_HANDLED;
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

彩蛋:

static struct input_handler *input_table[8]; 
#define INPUT_DEVICES 256 
  
 
  • 1
  • 2

一共有8个input_handler,对应256个设备,所以一个handler对应32个设备。

static struct evdev *evdev_table[EVDEV_MINORS]; 
#define EVDEV_MINORS  32 
  
 
  • 1
  • 2

evdev理论上可对应32个设备,其对应的设备节点一般位于/dev/input/event0~/dev/input/event4
下边的for循环,在evdev_table数组中找一个未使用的地方

文章来源: xuesong.blog.csdn.net,作者:内核笔记,版权归原作者所有,如需转载,请联系作者。

原文链接:xuesong.blog.csdn.net/article/details/81460280

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。