当前位置: 首页 > news >正文

ELF 1技术贴|在NXP源码基础上适配开发板的按键功能

本次源代码适配是在NXP i.MX6ULL EVK评估板的Linux内核源代码(特定版本号为Linux-imx_4.1.15)的基础中展开的。

首要任务集中在对功能接口引脚配置的精细调整,确保其能无缝匹配至ELF 1开发板。接下来,我们将详细阐述适配过程中关于按键功能实现的完整步骤。

值得一提的是,ELF 1开发板上预置了标识为K1、K2、K3的三个按键。为了启用这些按键功能,需要在设备树中进行按键配置,以及在内核中完成驱动配置。

01、硬件原理

图片

图片

02、IOMUX配置

从上图可以看出GPIO5_4连接到了连接器的22脚,GPIO5_2连到了34脚,GPIO5_9连接到了43脚。接下来需要找到这几个引脚在软件上的信号名称。在ElfBoard官网硬件资料中的 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     0x80000000MX6ULL_PAD_SNVS_TAMPER2__GPIO5_IO02     0x80000000MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09     0x80000000>;
};

添加后效果如下:

图片

03、添加设备节点

 在根节点下添加:

gpio-keys {compatible = "gpio-keys";pinctrl-names = "default";pinctrl-0 = <&pinctrl_keys>;#address-cells = <1>;#size-cells = <0>;autorepeat;key1 {label = "KEY1";linux,code = <KEY_ENTER>;gpios = <&gpio5 4 GPIO_ACTIVE_LOW>;};key2 {label = "KEY2";linux,code = <KEY_UP>;gpios = <&gpio5 2 GPIO_ACTIVE_LOW>;};key3 {label = "KEY3";linux,code = <KEY_DOWN>;gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;};};

添加后效果如下:

 

gpio-keys的compatible属性值为“gpio-keys”,用于驱动匹配。pinctrl-name属性值为“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,就是指高电平有效还是低电平有效,需要根据具体电路配合使用。

04、配置按键驱动编译进内核

在根目录下使用make menuconfig命令,在如下路径查看是否有配置:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make menuconfig

找到以下位置,Keyboards驱动默认已经编译进内核。

-> Device Drivers
->Input device support
->Keyboards

图片

05、编译测试

由于使用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,与在设备树中配置的键值一致。

至此,已在NXP提供的源代码基础上成功完成了对ELF 1开发板按键功能的适配工作,期待这一实践教程能够切实为屏幕前的小伙伴带来实质性指导

http://www.lryc.cn/news/312482.html

相关文章:

  • Linux:kubernetes(k8s)pod的基础操作(6)
  • 【Docker】掌握 Docker 镜像操作:从基础到进阶
  • flink重温笔记(十一):Flink 高级 API 开发——flink 四大基石之 Checkpoint(详解存储后端)
  • React富文本编辑器开发(九)位置
  • 一次直播和图像识别技术应用的探索之旅
  • Ubuntu 下使用 Pybind11 实现 C++ 调用 Python 接口的示例
  • docker安装和使用kafka
  • CTP-API开发系列之接口对接准备
  • C++小记 -链表
  • 网络协议学习DAY1
  • vue3中全局变量的定义和获取
  • 1.2 数据模型 数据库系统概论
  • C#中openFileDialog 对话框不在最顶层,TopMost的异常情况
  • 信息安全与阿里云等保三级方案实践总结
  • 嵌入式学习记录——线程
  • 同步服务器操作系统公网仓库到本地 _ 统信UOS _ 麒麟KYLINOS
  • 【数仓】flume常见配置总结,以及示例
  • 统计信息锁定
  • 光猫改为bridge模式
  • 回溯算法01-组合(Java)
  • 初始网络 --- 网络基础
  • 在Linux/Ubuntu/Debian中计算MD5,SHA256的方法
  • mybatis mysql insert 主键id为空
  • 批次大小对ES写入性能影响初探
  • c语言十大核心用法
  • 网页打开慢,这锅该谁背?
  • 题目 1538: 蓝桥杯-格子位置
  • 第十三届蓝桥杯嵌入式省赛程序设计详细题解
  • Go 语言指针
  • 指针运算笔试题解析