输入子系统二:如何写一个输入子系统框架下的驱动程序
【摘要】 首先看看一下整体框架:
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)