天河做網(wǎng)站設(shè)計(jì)一個(gè)新產(chǎn)品怎么推廣
本次源代碼適配是在NXP i.MX6ULL EVK評(píng)估板的Linux內(nèi)核源代碼(特定版本號(hào)為L(zhǎng)inux-imx_4.1.15)的基礎(chǔ)中展開(kāi)的。
首要任務(wù)集中在對(duì)功能接口引腳配置的精細(xì)調(diào)整,確保其能無(wú)縫匹配至ELF 1開(kāi)發(fā)板。接下來(lái),我們將詳細(xì)闡述適配過(guò)程中關(guān)于按鍵功能實(shí)現(xiàn)的完整步驟。
值得一提的是,ELF 1開(kāi)發(fā)板上預(yù)置了標(biāo)識(shí)為K1、K2、K3的三個(gè)按鍵。為了啟用這些按鍵功能,需要在設(shè)備樹(shù)中進(jìn)行按鍵配置,以及在內(nèi)核中完成驅(qū)動(dòng)配置。
01、硬件原理
02、IOMUX配置
從上圖可以看出GPIO5_4連接到了連接器的22腳,GPIO5_2連到了34腳,GPIO5_9連接到了43腳。接下來(lái)需要找到這幾個(gè)引腳在軟件上的信號(hào)名稱(chēng)。在ElfBoard官網(wǎng)硬件資料中的 ELF 1開(kāi)發(fā)板資料包\05-硬件資料\05-4 管腳分配表找到22、34、43引腳的信號(hào)名稱(chēng)。
可以看到連接器的34引腳信號(hào)名稱(chēng)為SNVS_TAMPER2;22引腳的信號(hào)名稱(chēng)為SNVS_TAMPER4;43引腳的信號(hào)名稱(chēng)為SNVS_TAMPER9。
因?yàn)樾枰褂眠@幾個(gè)引腳控制按鍵,所以需要把它們復(fù)用成GPIO功能,在arch/arm/boot/dts/imx6ull-pinfunc-snvs.h中找到它們的宏定義,分別如下:
然后打開(kāi)設(shè)備樹(shù)文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts,在&iomux_snvs節(jié)點(diǎn)下添加子節(jié)點(diǎn)pinctrl_keys:
pinctrl_keys: keysgrp {fsl,pins = <MX6ULL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x80000000MX6ULL_PAD_SNVS_TAMPER2__GPIO5_IO02 0x80000000MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x80000000>;
};
添加后效果如下:
03、添加設(shè)備節(jié)點(diǎn)
?在根節(jié)點(diǎn)下添加:
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>;};};
添加后效果如下:
?
gpio-keys的compatible屬性值為“gpio-keys”,用于驅(qū)動(dòng)匹配。pinctrl-name屬性值為“default”,定義了pincrtl的名字為“default”。
pinctrl-0的屬性值為<&pinctrl_keys>,就是引用了之前在iomux_snvs中定義的pinctrl_keys也就是說(shuō),在此處對(duì)iomux_snvs的配置進(jìn)行了引用,類(lèi)似函數(shù)的調(diào)用。status屬性值設(shè)置為“okay”,表示LED設(shè)備可用。
接下來(lái)三個(gè)子節(jié)點(diǎn),分別對(duì)應(yīng)三個(gè)具體按鍵。子節(jié)點(diǎn)的lable標(biāo)簽屬性是可選的。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,就是指高電平有效還是低電平有效,需要根據(jù)具體電路配合使用。
04、配置按鍵驅(qū)動(dòng)編譯進(jìn)內(nèi)核
在根目錄下使用make menuconfig命令,在如下路徑查看是否有配置:
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make menuconfig
找到以下位置,Keyboards驅(qū)動(dòng)默認(rèn)已經(jīng)編譯進(jìn)內(nèi)核。
-> Device Drivers
->Input device support
->Keyboards
05、編譯測(cè)試
由于使用build.sh全編譯時(shí)間太長(zhǎng),我們可以將build.sh當(dāng)中的第4行注釋掉:
編譯內(nèi)核并拷貝到開(kāi)發(fā)板:
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/
進(jìn)行sync操作后重啟開(kāi)發(fā)板:
使用cat /proc/bus/input/devices命令查看key設(shè)備對(duì)應(yīng)的event事件:
root@ELF1:~# cat /proc/bus/input/devices
可以看到其對(duì)應(yīng)的是event2,如果連接了其他設(shè)備,比如觸摸屏,event事件可能會(huì)有變化,請(qǐng)以實(shí)際為準(zhǔn)。
終端輸入evtest命令,選擇event number為2,然后分別按鍵K1,K2,K3,會(huì)看到上報(bào)數(shù)據(jù)。
root@ELF1:~# evtest
可以看到KEY1上報(bào)的鍵值是28,KEY2上報(bào)的鍵值是103,KEY3上報(bào)的鍵值是108,與在設(shè)備樹(shù)中配置的鍵值一致。
至此,已在NXP提供的源代碼基礎(chǔ)上成功完成了對(duì)ELF 1開(kāi)發(fā)板按鍵功能的適配工作,期待這一實(shí)踐教程能夠切實(shí)為屏幕前的小伙伴帶來(lái)實(shí)質(zhì)性指導(dǎo)