本次源碼適配工作是在NXP i.MX6ULL EVK評估板的Linux內(nèi)核源碼(特定版本:Linux-imx_4.1.15)基礎(chǔ)上進行的。主要目標是調(diào)整功能接口引腳配置,以適應(yīng)ELF 1開發(fā)板。接下來,將以按鍵功能的適配作為具體示例,深入解析整個適配的流程。
一、準備工作
NXP源碼路徑:ELF 1開發(fā)板資料包\07-NXP 原廠資料\07-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、添加默認配置文件
將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
![wKgZomaN5z-AGSyRAAf8Vzjsc0Y763.png](https://file1.elecfans.com/web2/M00/FA/9A/wKgZomaN5z-AGSyRAAf8Vzjsc0Y763.png)
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、硬件原理
![wKgaomaN55KAL2hCAASNGSaEL7U300.png](https://file1.elecfans.com/web2/M00/FB/87/wKgaomaN55KAL2hCAASNGSaEL7U300.png)
![wKgaomaN58eAeVYeAAPx6h_fvm8762.png](https://file1.elecfans.com/web2/M00/FB/87/wKgaomaN58eAeVYeAAPx6h_fvm8762.png)
2、IOMUX配置
從上圖可以看出GPIO5_4連接到了連接器的22腳,GPIO5_2連到了34腳,GPIO5_9連接到了43腳。接下來需要找到這幾個引腳在軟件上的信號名稱。
打開ELF 1開發(fā)板資料包\05-硬件資料\05-4 管腳分配表\ELF 1引腳復(fù)用對照表找到22、34、43引腳的信號名稱。
![wKgZomaN5_-AHrOWAAJU9cOAKFQ104.png](https://file1.elecfans.com/web2/M00/FA/9B/wKgZomaN5_-AHrOWAAJU9cOAKFQ104.png)
34引腳信號名稱為SNVS_TAMPER2;
22引腳的信號名稱為SNVS_TAMPER4;
43引腳的信號名稱為SNVS_TAMPER9。
因為需要使用這幾個引腳控制按鍵,所以需要把它們復(fù)用成GPIO功能,在arch/arm/boot/dts/imx6ull-pinfunc-snvs.h中找到它們的宏定義,分別如下:
![wKgaomaN6DWAEsuCAA1UORyLZp0520.png](https://file1.elecfans.com/web2/M00/FB/87/wKgaomaN6DWAEsuCAA1UORyLZp0520.png)
打開設(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 >; };
效果如下:
![wKgZomaN6F2AHbh4AARG-pjHYQc365.png](https://file1.elecfans.com/web2/M00/FA/9B/wKgZomaN6F2AHbh4AARG-pjHYQc365.png)
(注意:在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 = ; 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](https://file1.elecfans.com/web2/M00/FA/9B/wKgZomaN6I-AP2C7AAZvzZoSJlw513.png)
4、配置按鍵驅(qū)動編譯進內(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ū)動默認已經(jīng)編譯進內(nèi)核。
-> Device Drivers ->Input device support ->Keyboards
![wKgaomaN6NeAREFdAAnK5IMWB0E125.png](https://file1.elecfans.com/web2/M00/FB/87/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開發(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
![wKgZomaN6USAfmQ6AAbElvspIjU467.png](https://file1.elecfans.com/web2/M00/FA/9B/wKgZomaN6USAfmQ6AAbElvspIjU467.png)
可以看到其對應(yīng)的是event2,如果連接了其他設(shè)備,比如觸摸屏,event事件可能會有變化,請以實際為準。
終端輸入evtest命令,選擇event number為2,然后分別按下按鍵K1,K2,K3,會看到上報數(shù)據(jù)。
root@ELF1:~# evtest
![wKgaomaN6XCAcRF6AAtK9168RtA118.png](https://file1.elecfans.com/web2/M00/FB/88/wKgaomaN6XCAcRF6AAtK9168RtA118.png)
可以看到KEY1上報的鍵值是28,KEY2上報的鍵值是103,KEY3上報的鍵值是108,與在設(shè)備樹中配置的鍵值一致。
至此,就完成了在NXP源碼基礎(chǔ)上適配ELF 1開發(fā)板的按鍵功能,期望這份詳實的指南能為正在閱讀的小伙伴帶來實質(zhì)性的助益與啟發(fā)。在開發(fā)之旅上,愿我們攜手共進,探索無限可能。
-
單片機
+關(guān)注
關(guān)注
6040文章
44592瀏覽量
636861 -
嵌入式
+關(guān)注
關(guān)注
5087文章
19153瀏覽量
306413 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5093瀏覽量
97800 -
嵌入式開發(fā)板
+關(guān)注
關(guān)注
5文章
83瀏覽量
18775
發(fā)布評論請先 登錄
相關(guān)推薦
ELF 1技術(shù)貼|在NXP源碼基礎(chǔ)上適配開發(fā)板的按鍵功能
![<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技術(shù)</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'>基礎(chǔ)上</b><b class='flag-5'>適配</b><b class='flag-5'>開發(fā)板</b>的<b class='flag-5'>按鍵</b><b class='flag-5'>功能</b>](https://file1.elecfans.com/web2/M00/C3/62/wKgZomXq0ymANr0hAABDmHpF1tQ264.png)
ElfBoard技術(shù)貼|如何在NXP源碼基礎(chǔ)上適配ELF 1開發(fā)板的UART功能
![<b class='flag-5'>ElfBoard</b><b class='flag-5'>技術(shù)</b><b class='flag-5'>貼</b>|如何在<b class='flag-5'>NXP</b><b class='flag-5'>源碼</b><b class='flag-5'>基礎(chǔ)上</b><b class='flag-5'>適配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>開發(fā)板</b>的UART<b class='flag-5'>功能</b>](https://file1.elecfans.com/web2/M00/08/D1/wKgaombzpf2ANbDaAABFevJym7M948.png)
ElfBoard技術(shù)貼|ELF 1開發(fā)板適配攝像頭詳解
![<b class='flag-5'>ElfBoard</b><b class='flag-5'>技術(shù)</b><b class='flag-5'>貼</b>|<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>適配</b>攝像頭詳解](https://file1.elecfans.com/web3/M00/04/02/wKgZO2duDgOAAHDXAAA9ZyCKWSc079.png)
嵌入式學習-ElfBoard ELF 1板卡-在nxp源碼基礎(chǔ)上適配ELF 1開發(fā)板的LED功能
飛凌嵌入式ElfBoard ELF 1板卡-在NXP源碼基礎(chǔ)上適配ELF 1開發(fā)板的按鍵功能
嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-在NXP源碼基礎(chǔ)上適配ELF 1開發(fā)板的按鍵功能
飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之內(nèi)核簡介
嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之內(nèi)核簡介
ELF 1技術(shù)貼|在NXP源碼基礎(chǔ)上適配ELF 1開發(fā)板的LED功能
![<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技術(shù)</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'>基礎(chǔ)上</b><b class='flag-5'>適配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>開發(fā)板</b>的LED<b class='flag-5'>功能</b>](https://file1.elecfans.com/web2/M00/BA/50/wKgaomWOKTKAfuWLAABArY1D4Jg940.png)
ELF 1技術(shù)貼|如何將Python3.6.9移植到開發(fā)板上
![<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技術(shù)</b><b class='flag-5'>貼</b>|如何將Python3.6.9移植到<b class='flag-5'>開發(fā)板</b><b class='flag-5'>上</b>](https://file1.elecfans.com/web2/M00/C0/94/wKgZomXW5EiAf1EoAABBQv84DIc700.png)
ELF技術(shù)貼|如何在開發(fā)板上實現(xiàn)對Java的支持
![<b class='flag-5'>ELF</b><b class='flag-5'>技術(shù)</b><b class='flag-5'>貼</b>|如何在<b class='flag-5'>開發(fā)板</b><b class='flag-5'>上</b>實現(xiàn)對Java的支持](https://file1.elecfans.com/web2/M00/C5/1A/wKgaomXxaDCADbm_AAA89wQPeVU499.png)
ElfBoard技術(shù)貼|如何在ELF 1開發(fā)板上搭建流媒體服務(wù)器
![<b class='flag-5'>ElfBoard</b><b class='flag-5'>技術(shù)</b><b class='flag-5'>貼</b>|如何在<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>上</b>搭建流媒體服務(wù)器](https://file1.elecfans.com/web2/M00/04/6E/wKgaombEPEuAU2NVAABA0p3Um-o988.png)
在NXP源碼基礎(chǔ)上如何適配ELF 1開發(fā)板的UART功能
![<b class='flag-5'>在</b><b class='flag-5'>NXP</b><b class='flag-5'>源碼</b><b class='flag-5'>基礎(chǔ)上</b>如何<b class='flag-5'>適配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>開發(fā)板</b>的UART<b class='flag-5'>功能</b>](https://file1.elecfans.com//web2/M00/08/8E/wKgZomb4zkiAehupAAB1WkVXQrc743.jpg)
評論