i.MX6ULL驱动开发 | 25 - 基于Linux自带的KEY驱动检测按键
Posted Mculover666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了i.MX6ULL驱动开发 | 25 - 基于Linux自带的KEY驱动检测按键相关的知识,希望对你有一定的参考价值。
一、Linux内核自带的驱动
Linux内核已经集成了采用 platform 框架编写的KEY驱动·,无需我们自己编写,只要按照要求在设备树文件中添加相应的LED节点即可。
1. 如何使能
(1)在内核源码目录中,打开 menuconfig 进行配置:
make menuconfig
(2)打开KEY驱动配置项
按下?
可以打开此选项的帮助信息:
可以看到,如果此选项打开,.config
文件中就会开启LEDS_GPIO:
配置改动后,重新编译内核,下载到开发板。
二、设备树节点编写
1. 设备树节点格式
在文档Documentation/devicetree/bindings/input/gpio-keys.txt
中。
(1)需要的属性
- compatible:应该是"gpio-keys"
(2)描述
Each button (key) is represented as a sub-node of “gpio-keys”。
(3)KEY子节点的属性
- gpios: OF device-tree gpio specification.
- interrupts: the interrupt line for that input.
- label: Descriptive name of the key.
- linux,code: Keycode to emit.
(4)示例
gpio_keys
compatible = "gpio-keys";
#address-cells = <1>;
#size-cells = <0>;
autorepeat;
button@21
label = "GPIO Key UP";
linux,code = <103>;
gpios = <&gpio1 0 1>;
;
button@22
label = "GPIO Key DOWN";
linux,code = <108>;
interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
;
其中linux\\code
表示按键映射的键值,定义在文件include/uapi/linux/input.h
中,这里找出回车键:
#define KEY_ENTER 28
2. 编写KEY节点——作为回车按键
(1)添加设备树节点
在自己的设备树描述文件中修改:
// 用于内核自带的KEY驱动——作为回车按键
gpio-keys
compatible = "gpio-keys";
#address-cells = <1>;
#size-cells = <0>;
autorepeat;
key0
label = "GPIO KEY Enter";
linux,code = <KEY_ENTER>;
gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;
;
;
(2)编译设备树,使用新的设备树启动内核
编译设备树,使用该设备树启动:
make dtbs
启动后查看是否有对应的platform驱动:
启动后查看是否有对应的platform设备:
(3)操作按键
如果屏幕作为控制终端,按下回车按键,就会在屏幕进行交互:
三、Linux自带KEY驱动浅析
1. 如何找到对应的驱动文件?
搜索该宏定义,找对应的Makefile:
grep -nR "CONFIG_LEDS_GPIO" * | grep Makefile
找到KEY驱动对应的文件为:drivers/input/keyboard/gpio_keys.c
。
2. platform驱动的注册与删除
3. 驱动兼容性
以上是关于i.MX6ULL驱动开发 | 25 - 基于Linux自带的KEY驱动检测按键的主要内容,如果未能解决你的问题,请参考以下文章
i.MX6ULL驱动开发 | 08 -基于pinctrl子系统和gpio子系统点亮LED
i.MX6ULL驱动开发 | 09 -基于Linux自带的LED驱动点亮LED
i.MX6ULL驱动开发 | 34 - 基于SPI框架驱动spi lcd(st7789)
i.MX6ULL驱动开发 | 03-基于字符设备驱动框架点亮LED