0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

ElfBoard 2024-07-10 09:54 次阅读

本次源码适配工作是在NXP i.MX6ULL EVK评估板的Linux内核源码(特定版本:Linux-imx_4.1.15)基础上进行的。主要目标是调整功能接口引脚配置,以适应ELF 1开发板。接下来,将以按键功能的适配作为具体示例,深入解析整个适配的流程。

一、准备工作

NXP源码路径:ELF 1开发板资料包\07-NXP 原厂资料\07-1 NXP官方源码\linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2

1、将NXP源码拷贝到开发环境home/root/work目录下解压

elf@ubuntu:~/work$ tar jvxf linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2 elf@ubuntu:~/work$ cd linux-imx-imx_4.1.15_2.0.0_ga/ elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ ls

2、添加默认配置文件

将arch/arm/configs路径下的imx_v7_mfg_defconfig复制一份,命名为imx6ull_elf1_defconfig:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp arch/arm/configs/imx_v7_mfg_defconfig arch/arm/configs/imx6ull_elf1_defconfig

3、添加ELF 1设备树将arch/arm/boot/dts路径下的imx6ull-14x14-evk.dts复制一份,命名为imx6ull-elf1-emmc.dts:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp arch/arm/boot/dts/imx6ull-14x14-evk.dts arch/arm/boot/dts/imx6ull-elf1-emmc.dts

打开arch/arm/boot/dts/Makefile,找到CONFIG_SOC_IMX6ULL,将imx6ull-elf1-emmc.dts添加到Makefile中:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi arch/arm/boot/dts/Makefile

wKgZomaN5z-AGSyRAAf8Vzjsc0Y763.png

4、建立交叉编译脚本

建立一个编译脚本build.sh:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vim build.sh

添加以下内容,保存退出:

#!/bin/bash export CPUS=`grep -c processor /proc/cpuinfo` source /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi make distclean make imx6ull_elf1_defconfig make -j${CPUS} rm -rf ./.tmp make modules_install INSTALL_MOD_PATH=./.tmp/rootfs/ cd .tmp/rootfs/ tar -jcvf modules.tar.bz2 *

给予脚本权限:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ chmod 777 build.sh

二、适配按键

1、硬件原理

wKgaomaN55KAL2hCAASNGSaEL7U300.pngwKgaomaN58eAeVYeAAPx6h_fvm8762.png

2、IOMUX配置

从上图可以看出GPIO5_4连接到了连接器的22脚,GPIO5_2连到了34脚,GPIO5_9连接到了43脚。接下来需要找到这几个引脚在软件上的信号名称。

打开ELF 1开发板资料包\05-硬件资料\05-4 管脚分配表\ELF 1引脚复用对照表找到22、34、43引脚的信号名称。

wKgZomaN5_-AHrOWAAJU9cOAKFQ104.png

34引脚信号名称为SNVS_TAMPER2;

22引脚的信号名称为SNVS_TAMPER4;

43引脚的信号名称为SNVS_TAMPER9。

因为需要使用这几个引脚控制按键,所以需要把它们复用成GPIO功能,在arch/arm/boot/dts/imx6ull-pinfunc-snvs.h中找到它们的宏定义,分别如下:

wKgaomaN6DWAEsuCAA1UORyLZp0520.png

打开设备树文件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 >; };

效果如下:

wKgZomaN6F2AHbh4AARG-pjHYQc365.png

(注意:在IOMUX配置环节,一定要确保一个引脚只被复用为一个功能,如果同一个引脚在其它地方被复用成另一个功能,很可能影响到我们期望的功能。)

3、设备节点配置

在根节点下添加子节点gpio-keys:

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>; }; };

wKgZomaN6I-AP2C7AAZvzZoSJlw513.png

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

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make imx6ull_elf1_defconfig elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make menuconfig

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

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

wKgaomaN6NeAREFdAAnK5IMWB0E125.png

5、编译

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

将编译生成的zImage和imx6ull-elf-emmc.dtb拷贝到ELF 1开发板的/run/media/mmcblk1p1 路径下:

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-elf1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/

保存并重启开发板:

root@ELF1~# sync root@ELF1~# reboot

三、按键测试

查看key设备对应的event事件:

root@ELF1:~# cat /proc/bus/input/devices

wKgZomaN6USAfmQ6AAbElvspIjU467.png

可以看到其对应的是event2,如果连接了其他设备,比如触摸屏,event事件可能会有变化,请以实际为准。

终端输入evtest命令,选择event number为2,然后分别按下按键K1,K2,K3,会看到上报数据。

root@ELF1:~# evtest

wKgaomaN6XCAcRF6AAtK9168RtA118.png

可以看到KEY1上报的键值是28,KEY2上报的键值是103,KEY3上报的键值是108,与在设备树中配置的键值一致。

至此,就完成了在NXP源码基础上适配ELF 1开发板的按键功能,期望这份详实的指南能为正在阅读的小伙伴带来实质性的助益与启发。在开发之旅上,愿我们携手共进,探索无限可能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6019

    文章

    44316

    浏览量

    627636
  • 嵌入式
    +关注

    关注

    5036

    文章

    18768

    浏览量

    297617
  • 开发板
    +关注

    关注

    25

    文章

    4735

    浏览量

    95958
  • 嵌入式开发板

    关注

    5

    文章

    78

    浏览量

    18666
收藏 人收藏

    评论

    相关推荐

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

    ELF1开发板。接下来,我们将详细阐述适配过程中关于按键功能实现的完整步骤。值得一提的是,ELF1
    的头像 发表于 03-08 16:58 794次阅读
    <b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|<b class='flag-5'>在</b><b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>开发板</b>的<b class='flag-5'>按键</b><b class='flag-5'>功能</b>

    嵌入式学习-ElfBoard ELF 1板卡-nxp源码基础上适配ELF 1开发板的LED功能

    源码适配即在NXP i.MX6ULL EVK评估对应的Linux内核源码(linux-imx_4.1.15 版本)
    发表于 01-05 14:35

    飞凌ElfBoard ELF 1板卡-如何在ELF 1开发板实现对java的支持

    /mergesort# java MergeDemo其他测试例程方法类似。 完成上述一系列步骤,即可在ELF 1开发板上成功实现Java环境的搭建与运行,我们衷心希望这篇教程指南能成为各位小伙伴
    发表于 03-20 09:51

    飞凌嵌入式-ElfBoard-项目分享|基于ELF 1S开发板完成的物联网开源项目

    方提供的移植文档。 涂鸦云服务器建立好产品,完成功能定义,完成设备交互面板设计,移植完Tuya Link SDK,等一系列操作后,就可以让ELF
    发表于 05-16 09:12

    飞凌嵌入式ElfBoard ELF 1板卡-NXP源码基础上适配ELF 1开发板按键功能

    的键值是103,KEY3上报的键值是108,与设备树中配置的键值一致。 至此,就完成了NXP源码基础上
    发表于 07-03 09:07

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-NXP源码基础上适配ELF 1开发板按键功能

    的键值是103,KEY3上报的键值是108,与设备树中配置的键值一致。 至此,就完成了NXP源码基础上
    发表于 07-04 09:11

    ELF 1开发板试用】1.开箱验货

    。 打开纸盒子,引入眼帘的是 ELF1 开发板,一张纪念卡,一份开箱必读说明书。ELF1 开发板的标准配件包里有:一字螺丝刀、尼龙柱、Type-C转接线、10P杜邦线和网线。 就拿 T
    发表于 11-21 14:20

    I.MX6ULL-ElfBoard ELF1板卡 获取内核源码的方法。

    行的适配,所以讲解均以4.1.15版本内核为例。 (二)可以选择使用git克隆,也可以选择下载ZIP压缩包 三、获取ELF1开发板源码 ELF1
    发表于 12-16 09:41

    嵌入式学习——ElfBoard ELF1板卡 获取内核源码的方法

    行的适配,所以讲解均以4.1.15版本内核为例。 (二)可以选择使用git克隆,也可以选择下载ZIP压缩包 三、获取ELF1开发板源码 ELF1
    发表于 12-16 09:44

    ELF 1技术|NXP源码基础上适配ELF 1开发板的LED功能

    本次源码适配工作是NXPi.MX6ULLEVK评估的Linux内核源码(特定版本:Linux-imx_4.1.15)
    的头像 发表于 12-29 10:04 657次阅读
    <b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|<b class='flag-5'>在</b><b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的LED<b class='flag-5'>功能</b>

    如何将Go程序编译到ELF 1开发板

    编译并运行在ELF1开发板的。一、GoLand中配置(一)配置SSH连接Ubuntu虚拟机以及ELF1
    的头像 发表于 01-29 10:42 361次阅读
    如何将Go程序编译到<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>

    ELF 1技术|如何移植Boa 到开发板

    Boa作为Web服务解决方案显得尤为适宜。接下来,将跟各位小伙伴详细介绍一下基于ELF1开发板移植Boa的方法。1、Boa官网下载源码官网网址:Boadownlo
    的头像 发表于 02-04 09:30 249次阅读
    <b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如何移植Boa 到<b class='flag-5'>开发板</b><b class='flag-5'>上</b>

    ELF 1技术|如何将Python3.6.9移植到开发板

    ELF1开发板的Linux4.1.15eMMC镜像中,默认预装了Python2.7。为了适应更多应用场景,有些小伙伴可能需要移植其他版本的Python,下面将以Python3.6.9为例详细介绍
    的头像 发表于 02-22 14:06 303次阅读
    <b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如何将Python3.6.9移植到<b class='flag-5'>开发板</b><b class='flag-5'>上</b>

    ELF技术|如何在开发板实现对Java的支持

    Java作为一种功能强大且广泛应用的编程语言,具有广泛的适应性和实用性。ELF1开发板上集成Java支持,无疑将赋予嵌入式开发者更广阔的选
    的头像 发表于 03-13 16:47 373次阅读
    <b class='flag-5'>ELF</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如何在<b class='flag-5'>开发板</b><b class='flag-5'>上</b>实现对Java的支持

    ElfBoard技术|如何在ELF 1开发板搭建流媒体服务器

    流媒体服务器是一种专门用于传输实时数据流的服务器软件,广泛用于视频直播、视频会议、音频播放等应用场景。嵌入式开发领域,将流媒体服务器部署到开发板可以实现诸如视频监控、实时数据传输等
    的头像 发表于 08-20 14:48 336次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如何在<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b><b class='flag-5'>上</b>搭建流媒体服务器