gpio-keys的compatible属性值为“gpio-keys”,用于驱动匹配。
pinctrl-names属性值为“default”,定义了pincrtl的名字为“default”。
pinctrl-0的属性值为<&pinctrl_keys>,就是引用了之前在iomux_snvs中定义的pinctrl_keys也就是说,在此处对iomux_snvs的配置进行了引用,类似函数的调用。
status属性值设置为“okay”,表示LED设备可用。
接下来三个子节点,分别对应三个具体按键。子节点的lable标签属性是可选的,可有可无。
linux,code属性表示键值,在include/dt-bindings/input/input.h文件中有其宏定义。
#define KEY_ENTER 28
#define KEY_UP 103
#define KEY_DOWN 108
gpios属性值指定了具体的GPIO引脚以及引脚的极性配置。如:
gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
指定是GPIO1_IO10引脚,极性是GPIO_ACTIVE_LOW,就是指高电平有效还是低电平有效,需要根据具体电路配合使用。 配置按键驱动编译进内核
由于上一节已经全编译过,因此本节可以直接在根目录下使用make menuconfig命令,在如下路径查看是否有配置:
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make menuconfig
找到以下位置,Keyboards驱动默认已经编译进内核。
-> Device Drivers
->Input device support
->Keyboards
编译测试
由于使用build.sh全编译时间太长,我们可以将build.sh当中的第4行注释掉:
编译内核并拷贝到开发板:
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ ./build.sh
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/zImage root\@172.16.0.175:/run/media/mmcblk1p1/
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/dts/imx6ull-elf\1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/ 进行sync操作后重启开发板:
使用cat /proc/bus/input/devices命令查看key设备对应的event事件:
root@ELF1:~# cat /proc/bus/input/devices
可以看到其对应的是event2,如果连接了其他设备,比如触摸屏,event事件可能会有变化,请以实际为准:
终端输入evtest命令,选择event number为2,然后分别按键K1,K2,K3,会看到上报数据。
root@ELF1:~# evtest
可以看到KEY1上报的键值是28,KEY2上报的键值是103,KEY3上报的键值是108,与在设备树中配置的键值一致。