加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

ElfBoard技術(shù)貼|在NXP源碼基礎(chǔ)上適配ELF 1開發(fā)板的按鍵功能

07/10 17:52
875
閱讀需 12 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

本次源碼適配工作是在NXP i.MX6ULL EVK評估板Linux內(nèi)核源碼(特定版本:Linux-imx_4.1.15)基礎(chǔ)上進(jìn)行的。主要目標(biāo)是調(diào)整功能接口引腳配置,以適應(yīng)ELF 1開發(fā)板。接下來,將以按鍵功能的適配作為具體示例,深入解析整個適配的流程。

一、準(zhǔn)備工作
NXP源碼路徑:ELF 1開發(fā)板資料包7-NXP 原廠資料7-1 NXP官方源碼linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2
1、將NXP源碼拷貝到開發(fā)環(huán)境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、添加默認(rèn)配置文件

將arch/arm/configs路徑下的imx_v7_mfg_defconfig復(fù)制一份,命名為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設(shè)備樹
將arch/arm/boot/dts路徑下的imx6ull-14x14-evk.dts復(fù)制一份,命名為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
添加以下內(nèi)容,保存退出:
#!/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 *

給予腳本權(quán)限:

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開發(fā)板資料包5-硬件資料5-4 管腳分配表ELF 1引腳復(fù)用對照表找到22、34、43引腳的信號名稱。

34引腳信號名稱為SNVS_TAMPER2;
22引腳的信號名稱為SNVS_TAMPER4;
43引腳的信號名稱為SNVS_TAMPER9。
?
因為需要使用這幾個引腳控制按鍵,所以需要把它們復(fù)用成GPIO功能,在arch/arm/boot/dts/imx6ull-pinfunc-snvs.h中找到它們的宏定義,分別如下:

打開設(shè)備樹文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts,在&iomux_snvs節(jié)點下添加子節(jié)點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配置環(huán)節(jié),一定要確保一個引腳只被復(fù)用為一個功能,如果同一個引腳在其它地方被復(fù)用成另一個功能,很可能影響到我們期望的功能。)

3、設(shè)備節(jié)點配置

在根節(jié)點下添加子節(jié)點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、配置按鍵驅(qū)動編譯進(jìn)內(nèi)核

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驅(qū)動默認(rèn)已經(jīng)編譯進(jìn)內(nèi)核。
-> 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開發(fā)板的/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/

保存并重啟開發(fā)板:

root@ELF1~# sync
root@ELF1~# reboot
三、按鍵測試

查看key設(shè)備對應(yīng)的event事件:

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

可以看到其對應(yīng)的是event2,如果連接了其他設(shè)備,比如觸摸屏,event事件可能會有變化,請以實際為準(zhǔn)。

終端輸入evtest命令,選擇event number為2,然后分別按下按鍵K1,K2,K3,會看到上報數(shù)據(jù)。

root@ELF1:~# evtest

可以看到KEY1上報的鍵值是28,KEY2上報的鍵值是103,KEY3上報的鍵值是108,與在設(shè)備樹中配置的鍵值一致。

至此,就完成了在NXP源碼基礎(chǔ)上適配ELF 1開發(fā)板的按鍵功能,期望這份詳實的指南能為正在閱讀的小伙伴帶來實質(zhì)性的助益與啟發(fā)。在開發(fā)之旅上,愿我們攜手共進(jìn),探索無限可能。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
ECS-160-10-30B-CKM-TR 1 ECS International Inc Parallel - Fundamental Quartz Crystal,

ECAD模型

下載ECAD模型
$7.67 查看
ECS-2520S18-384-EN-TR 1 ECS International Inc HCMOS Output Clock Oscillator,

ECAD模型

下載ECAD模型
$1.86 查看
ASFLMPLV-100.000MHZ-LR-T 1 Abracon Corporation MEMS OSC XO 100.0000MHZ LVDS SMD

ECAD模型

下載ECAD模型
$4.88 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜