本次源代碼適配是在NXP i.MX6ULL EVK評估板的Linux內核源代碼(特定版本號為Linux-imx_4.1.15)的基礎中展開的。
首要任務集中在對功能接口引腳配置的精細調整,確保其能無縫匹配至ELF 1開發板。接下來,我們將詳細闡述適配過程中關于按鍵功能實現的完整步驟。
值得一提的是,ELF 1開發板上預置了標識為K1、K2、K3的三個按鍵。為了啟用這些按鍵功能,需要在設備樹中進行按鍵配置,以及在內核中完成驅動配置。
01、硬件原理
![wKgZomXq0VSACd6wAACteqtgmVk554.png](https://file1.elecfans.com/web2/M00/C3/62/wKgZomXq0VSACd6wAACteqtgmVk554.png)
![wKgaomXq0VSAKH0OAAG45L17pqU876.png](https://file1.elecfans.com/web2/M00/C4/4C/wKgaomXq0VSAKH0OAAG45L17pqU876.png)
02、IOMUX配置
從上圖可以看出GPIO5_4連接到了連接器的22腳,GPIO5_2連到了34腳,GPIO5_9連接到了43腳。接下來需要找到這幾個引腳在軟件上的信號名稱。在ElfBoard官網硬件資料中的 ELF 1開發板資料包\05-硬件資料\05-4 管腳分配表找到22、34、43引腳的信號名稱。
![wKgZomXq0XCAdYhiAACnHoFvAG0891.png](https://file1.elecfans.com/web2/M00/C3/62/wKgZomXq0XCAdYhiAACnHoFvAG0891.png)
可以看到連接器的34引腳信號名稱為SNVS_TAMPER2;22引腳的信號名稱為SNVS_TAMPER4;43引腳的信號名稱為SNVS_TAMPER9。
因為需要使用這幾個引腳控制按鍵,所以需要把它們復用成GPIO功能,在arch/arm/boot/dts/imx6ull-pinfunc-snvs.h中找到它們的宏定義,分別如下:
![wKgaomXq0ZOAGnEDAAIHGYRCjJc639.png](https://file1.elecfans.com/web2/M00/C4/4C/wKgaomXq0ZOAGnEDAAIHGYRCjJc639.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 >; };
添加后效果如下:
![wKgZomXq0beATdElAADnaJ4o9Ss882.png](https://file1.elecfans.com/web2/M00/C3/62/wKgZomXq0beATdElAADnaJ4o9Ss882.png)
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 = ; 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>; }; };
添加后效果如下:
![wKgaomXq0eGARx4dAAFqyMAtiss202.png](https://file1.elecfans.com/web2/M00/C4/4C/wKgaomXq0eGARx4dAAFqyMAtiss202.png)
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
![wKgZomXq0kSAVD0kAAGe-8d-m5k156.png](https://file1.elecfans.com/web2/M00/C3/62/wKgZomXq0kSAVD0kAAGe-8d-m5k156.png)
05、編譯測試
由于使用build.sh全編譯時間太長,我們可以將build.sh當中的第4行注釋掉:
![wKgaomXq0l2ARbNbAADI_10z6Nc921.png](https://file1.elecfans.com/web2/M00/C4/4C/wKgaomXq0l2ARbNbAADI_10z6Nc921.png)
編譯內核并拷貝到開發板:
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操作后重啟開發板:
![wKgaomXq0qKAduI_AAAdZ8LYDwM472.png](https://file1.elecfans.com/web2/M00/C4/4C/wKgaomXq0qKAduI_AAAdZ8LYDwM472.png)
使用cat /proc/bus/input/devices命令查看key設備對應的event事件:
root@ELF1:~# cat /proc/bus/input/devices
![wKgaomXq0rqAcy7aAAD4lBlEDLg363.png](https://file1.elecfans.com/web2/M00/C4/4C/wKgaomXq0rqAcy7aAAD4lBlEDLg363.png)
可以看到其對應的是event2,如果連接了其他設備,比如觸摸屏,event事件可能會有變化,請以實際為準。
終端輸入evtest命令,選擇event number為2,然后分別按鍵K1,K2,K3,會看到上報數據。
root@ELF1:~# evtest
![wKgZomXq0t-AGu3UAAGZ6A13tl4073.png](https://file1.elecfans.com/web2/M00/C3/62/wKgZomXq0t-AGu3UAAGZ6A13tl4073.png)
可以看到KEY1上報的鍵值是28,KEY2上報的鍵值是103,KEY3上報的鍵值是108,與在設備樹中配置的鍵值一致。
至此,已在NXP提供的源代碼基礎上成功完成了對ELF 1開發板按鍵功能的適配工作,期待這一實踐教程能夠切實為屏幕前的小伙伴帶來實質性指導。
-
嵌入式
+關注
關注
5087文章
19150瀏覽量
306357 -
Linux
+關注
關注
87文章
11324瀏覽量
209938 -
開發板
+關注
關注
25文章
5087瀏覽量
97786
發布評論請先 登錄
相關推薦
ElfBoard技術貼|如何在NXP源碼基礎上適配ELF 1開發板的UART功能
![ElfBoard<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>的UART<b class='flag-5'>功能</b>](https://file1.elecfans.com/web2/M00/08/D1/wKgaombzpf2ANbDaAABFevJym7M948.png)
ElfBoard技術貼|ELF 1開發板適配攝像頭詳解
![ElfBoard<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>攝像頭詳解](https://file1.elecfans.com/web3/M00/04/02/wKgZO2duDgOAAHDXAAA9ZyCKWSc079.png)
嵌入式學習-ElfBoard ELF 1板卡-在nxp源碼基礎上適配ELF 1開發板的LED功能
飛凌嵌入式ElfBoard ELF 1板卡-在NXP源碼基礎上適配ELF 1開發板的按鍵功能
嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-在NXP源碼基礎上適配ELF 1開發板的按鍵功能
飛凌嵌入式ElfBoard ELF 1板卡-Linux內核移植之內核簡介
在ELF 1 開發板上實現讀取攝像頭視頻進行目標檢測
![<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>實現讀取攝像頭視頻進行目標檢測](https://file1.elecfans.com/web2/M00/BE/FA/wKgaomWweAmAVqMyAABPqJU_Tds105.png)
ELF 1技術貼|如何移植Boa 到開發板上
![<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>](https://file1.elecfans.com/web2/M00/C0/9E/wKgaomW-6KaAZ_DXAABGIKZRZSw710.png)
ELF 1技術貼|如何將Python3.6.9移植到開發板上
![<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>](https://file1.elecfans.com/web2/M00/C0/94/wKgZomXW5EiAf1EoAABBQv84DIc700.png)
ElfBoard技術貼|如何在ELF 1開發板上搭建流媒體服務器
![ElfBoard<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>搭建流媒體服務器](https://file1.elecfans.com/web2/M00/04/6E/wKgaombEPEuAU2NVAABA0p3Um-o988.png)
在NXP源碼基礎上如何適配ELF 1開發板的UART功能
![<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>的UART<b class='flag-5'>功能</b>](https://file1.elecfans.com//web2/M00/08/8E/wKgZomb4zkiAehupAAB1WkVXQrc743.jpg)
評論