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.mzph.cn/news/723237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MapReduce内存参数自动推断

MapReduce内存参数自动推断。在Hadoop 2.0中&#xff0c;为MapReduce作业设置内存参数非常繁琐&#xff0c;涉及到两个参数&#xff1a;mapreduce.{map,reduce}.memory.mb和mapreduce.{map,reduce}.java.opts&#xff0c;一旦设置不合理&#xff0c;则会使得内存资源浪费严重&a…

KingbaseES-V8R3下载安装及基础配置以及创建用户数据库

KingbaseES-V8-R3安装 1 下载准备安装包 下载地址&#xff1a;https://gitlab.cn/renfei/KingbaseES-V8-R3 准备好安装包及license.dat文件上传至服务器 2 挂载安装包 安装包为iso文件&#xff0c;需要挂载到目录 mount KingbaseES_V008R003C002B0340_Lin64_install.iso /…

Oracle中使用alter table move命令的方法降低表中的高水位(High Water Mark)

Oracle中使用alter table move命令的方法降低表中的高水位&#xff08;High Water Mark&#xff09; 导读 在Oracle数据库中&#xff0c;“高水位”&#xff08;High Water Mark&#xff09;是指表中数据的存储位置已经达到的最高位置。在表中插入、更新或删除数据时&#xff0…

裸机程序--时间片调度

1.为什么自己写一个时间片调度呢 a. 网上其实有很多成熟的时间片调度例程, 包括我最开始参加工作也是抄的网上的例程(还记得当时领导问我看明白了它的调度原理吗, 作为一个自学刚参加工作的我来说, 看懂别人的意思真的很难, 当时只能含糊其词的说看得差不多) b. 在我看来网上的…

Day 6.有名信号量(信号灯)、网络的相关概念和发端

有名信号量 1.创建&#xff1a; semget int semget(key_t key, int nsems, int semflg); 功能&#xff1a;创建一组信号量 参数&#xff1a;key&#xff1a;IPC对像的名字 nsems&#xff1a;信号量的数量 semflg&#xff1a;IPC_CREAT 返回值&#xff1a;成功返回信号量ID…

Java 中进行数据类型的强制转换

在Java中&#xff0c;数据类型的强制转换是指将一个数据类型的值转换为另一种数据类型的操作。这在编程中经常会用到&#xff0c;特别是在需要将不同类型的数据进行计算或者比较时。Java中的数据类型强制转换分为两种&#xff1a;隐式转换和显式转换。 1、隐式转换&#xff08…

5G智能制造热力工厂数字孪生可视化平台,推进热力行业数字化转型

5G智能制造热力工厂数字孪生可视化平台&#xff0c;推进热力行业数字化转型。在当今这个信息化、数字化的时代&#xff0c;热力生产行业也迎来了转型的关键时刻。为了提升生产效率、降低成本、提高产品质量&#xff0c;越来越多的热力生产企业开始探索数字化转型之路。而5G智能…

Linux-网络相关函数接口-012

1.UDP编程 socket套接字编程 1.1【socket】 1.1.1函数原型 【int socket(int domain, int type, int protocol);】 1.1.2函数功能 创建一个用来通信的文件描述符1.1.3函数参数 【domain】&#xff1a;使用的协议族 AF_INET (IPv4协议族) 【type】&#xff1a;套接字类型【…

SAP 工单CO02删除标记设置增强

需求&#xff1a;工单打上删除标记时检查&#xff0c;满足才能打上删除标记 位置&#xff1a;PPCO0002 -> EXIT_SAPLCORO_001 -》INCLUDE ZXCO1U02.中 如果没有&#xff0c;就新建 然后写下代码测试&#xff1a; MESSAGE test TYPE I. 然后就可以写下自己要的检查了&…

three.js如何实现简易3D机房?(一)基础准备-下

接上一篇&#xff1a; three.js如何实现简易3D机房&#xff1f;&#xff08;一&#xff09;基础准备-上&#xff1a;http://t.csdnimg.cn/MCrFZ 目录 四、按需引入 五、导入模型 四、按需引入 index.vue文件中 <template><div class"three-area">&l…

基于springboot+vue实现会议室预约系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现会议室预约系统演示 摘要 一个企业的发展离不开相关的规定流程。信息化到来的今天在我们的生活当中。离不开各种信息化的支持。比如钉钉会议预约、美团买菜、扫码签到等各种信息化软件。他们涉及我们生活中的方方面面给我们的生活提供了更大的便利性。大到政…

将nodejs项目打包为exe方便在没有Node的环境中部署

nodejs21之前可以使用pkg&#xff0c;21版本之后支持单个可执行应用程序 https://github.com/vercel/pkg?tabreadme-ov-file https://nodejs.org/api/single-executable-applications.html 这样能解决服务器上没有exe的问题了 Windows中使用WinSW工具进行服务的安装

css网格布局简单介绍

前端网格布局是一种用于在网页上创建复杂网格系统的布局技术。它允许开发者通过简单的语法来定义和控制元素的排列方式&#xff0c;使得页面布局更加灵活和可预测。在CSS中&#xff0c;网格布局可以通过display: grid属性来实现。 特点 1. **灵活性**&#xff1a;网格布…

python基础使用之“__name__==‘__main__‘”作用

if __name__ "__main__": 是一个常见的 Python 编程习惯&#xff0c;其作用是在一个 Python 模块被直接运行时执行一些特定的代码&#xff0c;而不是被导入到其他模块中。这个条件语句检查模块的 __name__ 属性是否等于 "__main__"。 当一个 Python 模块…

288.【华为OD机试】AI面板识别(排序算法—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解…

微信小程序开发系列(十一)·小程序页面的跳转设置以及参数传递

目录 1. 跳转到商品列表 1.1 url: 当前小程序内的跳转链接 1.2 navigate&#xff1a;保留当前页面&#xff0c;跳转到应用内的某个页面。但是不能跳到 tabbar 页面 1.3 redirect&#xff1a; 关闭当前页面&#xff0c;跳转到应用内的某个页面。但不能跳转到 tabbar 页面…

在 Flutter 中使用 flutter_gen 简化图像资产管理

你是否厌倦了在 Flutter 项目中手动管理图像资产的繁琐任务&#xff1f; 告别手工输入资源路径的痛苦&#xff0c;欢迎使用“Flutter Gen”高效资源管理的时代。在本文中&#xff0c;我将带您从手动处理图像资源的挫折到动态生成它们的便利。 选择1&#xff1a;痛苦手动添加–…

Jenkins如何做到parameter页面里2个参数的联动

在Jenkins中&#xff0c;参数化构建是一种非常有用的功能&#xff0c;它可以让用户在构建过程中输入参数&#xff0c;从而实现更灵活的构建流程。有时候&#xff0c;我们希望两个参数之间能够实现联动&#xff0c;即一个参数的取值会影响另一个参数的取值。要实现这样的功能&am…

ChatGPT编程省钱、方便小示例——实现PDF转成PNG文件

ChatGPT编程省钱、方便小示例——实现PDF转成PNG文件 今天登录一个网站发现一个pdf文件很漂亮&#xff0c;于是想下载下来转成png图片。 于是用wps软件打开&#xff0c;然后进行转换。。。。。。 果然天下没有免费的午餐。既然AI时代已经到来&#xff0c;那就交给无所不能的AI…

DataGrip 连接 Centos MySql失败

首先检查Mysql是否运行&#xff1a; systemctl status mysqld &#xff0c; 如果显示没有启动则需要启动mysql 检查防火墙是否打开&#xff0c;是否打开3306的端口 sudo firewall-cmd --list-all 如果下面3306没有打开则打开3306端口 publictarget: defaulticmp-block-inver…