linux驱动之按键输入实验(基于系统自带gpio-keys.c驱动)

概述

采用Linux自带的按键驱动gpio-keys.c,实现按键输入读取。与上一章实现leds-gpio类似。

修改设备树文件

在根节点‘/’下创建key节点,节点名称为keys。节点内容如下(可参考别的平台的key节点编写):

keys:
{
	compatible = "gpio-keys";
	key1{
		label = "volume-up"
		linux,code = <114>;
		gpios = <&pioC 0 GPIO_ACTIVE_LOW>;	/* PC0*/
		debounce-interval = <10>;
	};
	key2{
		label = "volume-down"
		linux,code = <115>;
		gpios = <&pioC 2 GPIO_ACTIVE_LOW>;	/* PC2*/
		debounce-interval = <10>;
	};
}

对于以上属性的功能不清楚,可以在gpio-keys.c中查找到,例如debounce-interval值提取过后,存放在结构体为gpio_keys_button的button中,查看结构体释义,可知道配置的参数是消抖时间,单位为ms。同理,linux,code的值表示输入事件的代码。当然,也可以在\Documentation\devicetree\bindings\input\gpio-keys.txt中了解属性的含义。
在这里插入图片描述
在这里插入图片描述
写完之后,执行make dtbs可以单独进行设备树进行编译。

编译驱动

(一)把驱动编译进内核
通过搜索compatible匹配内容,可以找到”gpio-keys”位于/drivers/input/keyboard/gpio-keys.c中。
打开/drivers/input/keyboard/Makefile可找到obj-$(CONFIG_KEYBOARD_GPIO) += gpio_keys.o,所以需要在根目录下的.config设置CONFIG_KEYBOARD_GPIO=y,或者通过menuconfig进行配置。
(二)编译下载
下载过后,可以在系统设备树中看到增加的key1和key2节点。
在这里插入图片描述
在/dev/input/目录下新增了一个event1是我们注册的驱动所对应的设备文件,可以通过hexdump命令来查看/dev/input/event1文件内容。可以通过按下按键或释放来测试内容变化。
在这里插入图片描述

应用测试

应用程序通过读取/dev/input/event1设备来判断按键是否按下。驱动如下:

#include <linux/input.h>                                                                                                                                                                                     
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>

#define INPUT_DEV "/dev/input/event1"

int main(int argc, char * const argv[])
{
    int fd = 0;
    struct input_event event;
    int ret = 0;
    fd = open(INPUT_DEV, O_RDONLY);

	if(fd <= 0)
	{
		perror("open err\r\n");
		exit(1);
	}
    while(1){
        ret = read(fd, &event, sizeof(event));
	    if(ret == -1) {
            perror("Failed to read.\n");
            exit(1);
        }
        if(event.type != EV_SYN) 
		{
            printf("type:%d, code:%d, value:%d\n", event.type, event.code, event.value);
        }
    }   
    return 0;
}

测试现象如下:
在这里插入图片描述

发布了49 篇原创文章 · 获赞 76 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/fengweibo112/article/details/102780966