加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

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

07/10 17:52
822
阅读需 12 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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

一、准备工作
NXP源码路径:ELF 1开发板资料包7-NXP 原厂资料7-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

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、硬件原理

2、IOMUX配置

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

打开ELF 1开发板资料包5-硬件资料5-4 管脚分配表ELF 1引脚复用对照表找到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
               >;
};

效果如下:

(注意:在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 = <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>;
                };
        };

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

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

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

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

root@ELF1:~# evtest

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

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

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
C3E-12.000-12-3030-X-R 1 Aker Technology Company Ltd Parallel - Fundamental Quartz Crystal, 12MHz Nom, SMD, 4 PIN
暂无数据 查看
AFBR-5972EZ 1 Foxconn Transceiver,
$193.55 查看
HFBR-1414PTZ 1 Foxconn Transmitter, 792nm Min, 865nm Max, ST Connector, Through Hole Mount, ROHS COMPLIANT, PLASTIC, PACKAGE-8
$27.73 查看

相关推荐

电子产业图谱