1. 程式人生 > >I.MX6Q(TQIMX6Q/TQE9)學習筆記——新版BSP之KEY、LED

I.MX6Q(TQIMX6Q/TQE9)學習筆記——新版BSP之KEY、LED

經過前面的移植,核心已經可以在tqimx6q上正常掛載根檔案系統了,接下來開始移植各類裝置驅動,本文先來移植按鍵和LED。之所以從按鍵和LED開始是因為這兩種裝置的驅動是最簡單的。

按鍵驅動移植

檢視tqimx6q的原理圖可知,這塊開發板有5個按鍵,其中,除了reset鍵之外還有個電源鍵,這個電源鍵與其它鍵有些不同,因此,本文移植剩餘的這三個鍵(電源鍵在移植電源管理模組時處理)。通過閱讀原理圖可知,K1、K2、K3分別連線到了GPIO1_28、GPIO4_5和GPIO1_30上,基於核心的gpio-keys驅動模組,可如下編寫DTS:

gpio-keys {
		compatible = "gpio-keys";

		home {
				label = "HOME Button";
				gpios = <&gpio1 28 1>;
				linux,code = <102>;
		};

		enter {
				label = "Enter Button";
				gpios = <&gpio4 5 1>;
				linux,code = <28>;
		};

		esc {
				label = "ESC button";
				gpios = <&gpio1 30 1>;
				linux,code = <1>;
		};
};
LED驅動移植

同樣的,檢視tqimx6q的原理圖可知,tqimx6q的led4、led5、led6分別接到了GPIO3_21、GPIO3_22和GPIO3_23上,其它LED是電源相關的,無法通過GPIO控制。基於核心的gpio-leds驅動,可如下編寫DTS:

gpio-leds {
		compatible = "gpio-leds";

		led4 {
				label = "led4";
				gpios = <&gpio3 21 0>;
				default-state = "off";
		};

		led5 {
				label = "led5";
				gpios = <&gpio3 22 0>;
				default-state = "off";
		};

		led6 {
				label = "led6";
				gpios = <&gpio3 23 0>;
				default-state = "off";
		};
};
測試方法

將以上修改新增到DTS後重新編譯DTS並使用新得到的DTB啟動核心。按鍵可以通過hexdump指令測試:

hexdump /dev/input/event0
從核心啟動的log可以看出,gpio-keys驅動建立的輸入裝置節點是event0,因此,使用hexdump該節點可以測試按鍵是否有效。執行以上指令後按tqimx6q上的K1、K2、K3,hexdump會打印出一排數字,就表示按鍵驅動已經移植成功了,效果如下:
@tqimx6q #hexdump /dev/input/event0 
0000000 000c 0000 398c 0005 0001 0066 0001 0000
0000010 000c 0000 398c 0005 0000 0000 0000 0000
0000020 000c 0000 f56e 0007 0001 0066 0000 0000
0000030 000c 0000 f56e 0007 0000 0000 0000 0000
0000040 000d 0000 5dc5 0005 0001 001c 0001 0000
0000050 000d 0000 5dc5 0005 0000 0000 0000 0000
0000060 000d 0000 ba4d 0008 0001 001c 0000 0000
0000070 000d 0000 ba4d 0008 0000 0000 0000 0000
0000080 000e 0000 e45c 0006 0001 0001 0001 0000
0000090 000e 0000 e45c 0006 0000 0000 0000 0000
00000a0 000e 0000 c9fb 0009 0001 0001 0000 0000
00000b0 000e 0000 c9fb 0009 0000 0000 0000 0000

LED驅動移植完成之後會將led相關的控制節點建立到/sys/class/leds目錄下,通過cd切換到該目錄下之後會發現有對應的目錄:led4、led5、led6,通過如下指令可以點亮相應的led燈:
echo 1 > /sys/class/leds/led4/brightness
通過如下指令可以關閉指定的led燈:
echo 0 > /sys/class/leds/led4/birghtness
其中,brightness是led4目錄下一個檔案節點,可以通過該節點控制led4的亮度,由於本文使用的led不是pwm控制亮度的,因此,只要不為0,led燈就點亮了。

至此,按鍵和LED就移植好了。有誤之處歡迎指出,有任何疑問可以留言討論。

本文作者:girlkoo