Linux 自带按键驱动

目录

  一、内核检查

二、驱动文件

三、设备树

四、验证


  一、内核检查

内核一般默认已经使能了 KEY 驱动,但是还是要检查一下。按照如下路径找到相应的配置选项:

Device Drivers
        -> Input device support
                -> Generic input layer (needed for keyboard, mouse, ...) (INPUT [=y])
                        -> Keyboards (INPUT_KEYBOARD [=y])
                                ->GPIO Buttons

Linux 自带按键驱动_第1张图片

选中以后就会在源码根目录下.config 文件中出现“CONFIG_KEYBOARD_GPIO=y”这一行,

Linux 自带按键驱动_第2张图片

 Linux 内核就会根据这一行来将 KEY 驱动文件编译进 Linux 内核

二、驱动文件

        打开源码根目录下的\drivers\input\keyboard\Makefile,找到在内核使能的“CONFIG_KEYBOARD_GPIO"

可以看到 ,对应的是gpio_keys.o,也就是由gpio_keys.c编译出来到,所以KEY 驱动文件为drivers/input/keyboard/gpio_keys.c

gpio_keys.c 采用了 platform 驱动框架,在 KEY 驱动上使用了 input 子系统实现。

打开gpio_keys.c,查找 .compatible 

Linux 自带按键驱动_第3张图片

设备树上面的compatible必须和这个一直,下面开始编写设备树

三、设备树

打开绑定文档,源码根目录下\Documentation\devicetree\bindings\input\gpio-keys.txt

按键参考文档规定来写

Linux 自带按键驱动_第4张图片

200行,文档规定节点名字为“gpio-keys”。
201行,文档规定 gpio-keys 节点的 compatible 属性值一定要设置为“gpio-keys”。
204行,文档说需要autorepeat 表示按键支持连按

206-207行,pinctrl系统,用来配置电气属性的,这和之前的按键实验一样

209行,所有的 KEY 都是 gpio-keys 的子节点,每个子节点可以用如下属性描述自己

210行,label: KEY 名字,这里设置可以自定

211行,linux,code: KEY 要模拟的按键,打开源码目录下/include/uapi/linux/input.h

Linux 自带按键驱动_第5张图片

 KEY 按键设置为“EKY_ENTER”这个按键,也就是回车键,效果和键盘上的回车键一样。后面学习 LCD 驱动的时候需要用到此按键,因为 Linux 内核设计的 10 分钟以后 LCD关闭,也就是黑屏,就跟我们用电脑或者手机一样,一定时间以后关闭屏幕。这里将开发板上的 KEY 按键注册为回车键,当 LCD 黑屏以后直接按一下 KEY 按键即可唤醒屏幕,就跟当电脑熄屏以后按下回车键即可重新打开屏幕一样

212行,文档说gpios: KEY 所连接的 GPIO 信息。也就是使用的 IO,这里要检查该IO有没有被别的节点使用,如果有就需要先屏蔽

四、验证

用编译好的设备树启动开发板

Linux 自带按键驱动_第6张图片

 可以在启动信息里面看到已经设置好按键

下面进入查看一下

Linux 自带按键驱动_第7张图片可以看到已经存在event1

最后运行一下Linux 自带按键驱动_第8张图片

 可以看到,按下按键就会打印对应的信息,倒数第三列为code 为事件编码,也就是按键号,

上面设置“EKY_ENTER”这个按键,值为28,转为16进制就是1c

你可能感兴趣的:(#,IMX6ULL驱动,linux,驱动开发,arm,arm开发,ubuntu)