在开发板上有三个用户按键,K1,K2,K3,Linux系统中也集成了gpio-keys驱动,依照上一节中的步骤,在设备树中进行按键设备配置。 硬件原理 ![]() ![]() IOMUX配置 从上图可以看出GPIO5_4连接到了连接器的22脚,GPIO5_2连到了34脚,GPIO5_9连接到了43脚。接下来我们需要找到这几个引脚在软件上的信号名称。我们需要打开硬件资料中的 ELF 1开发板资料包\05-硬件资料\05-4 管脚分配表找到22、34、43引脚的信号名称。 ![]() 可以看到连接器的34引脚信号名称为SNVS_TAMPER2;22引脚的信号名称为SNVS_TAMPER4;43引脚的信号名称为SNVS_TAMPER9。 因为需要使用这几个引脚控制按键,所以我们需要把它们复用成GPIO功能,在arch/arm/boot/dts/imx6ull-pinfunc-snvs.h中找到它们的宏定义,分别如下: ![]() 然后打开设备树文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts,在&iomux_snvs节点下添加子节点pinctrl_keys: pinctrl_keys: keysgrp { fsl,pins = < MX6ULL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x80000000 MX6ULL_PAD_SNVS_TAMPER2__GPIO5_IO02 0x80000000 MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x80000000 >; }; 添加后效果如下: ![]() 添加设备节点 在根节点下添加: gpio-keys { compatible = "gpio-keys"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_keys>; #address-cells = <1>; #size-cells = <0>; autorepeat; key1 { label = "KEY1"; linux,code = ; gpios = <&gpio5 4 GPIO_ACTIVE_LOW>; }; key2 { label = "KEY2"; linux,code = ; gpios = <&gpio5 2 GPIO_ACTIVE_LOW>; }; key3 { label = "KEY3"; linux,code = ; gpios = <&gpio5 9 GPIO_ACTIVE_LOW>; }; }; 添加后效果如下: ![]() 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,与在设备树中配置的键值一致。 |
ESP32驱动ST7789触摸屏开发指南:LVGL主题设置与示波器面板
356 浏览 0 评论
ULink2 和keil4 连接显示 SWD通讯失败,硬件在另一台电脑上是可以连接成功的,有没有大佬能帮忙解答一下的
1978 浏览 0 评论
2567 浏览 1 评论
1017 浏览 0 评论
1044 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
13009 浏览 31 评论