電子工程網(wǎng)
標題: IMX6ULL開發(fā)平臺Linux-LED實驗(一) [打印本頁]
作者: 就是塔塔 時間: 2020-8-10 11:12
標題: IMX6ULL開發(fā)平臺Linux-LED實驗(一)
在前面的章節(jié)中,我們學習了解了字符設(shè)備驅(qū)動,以及如何在設(shè)備樹文件中添加設(shè)備信息,接下來就來看一下i.MX6UL終結(jié)者開發(fā)板的實際硬件是如何添加的。我們先以最簡單的LED設(shè)備來看一下具體的注冊流程。
36.1 LED設(shè)備注冊流程在i.MX6UL終結(jié)者開發(fā)板上有一個LED設(shè)備,如果想要通過Linux系統(tǒng)/dev目錄下的設(shè)備節(jié)點來控制LED,就需要在內(nèi)核中添加LED的驅(qū)動,具體的流程可以分為下面幾個步驟:
① 硬件原理圖分析,確定控制LED的GPIO信息。
② 根據(jù)GPIO信息在設(shè)備樹文件中添加pinctrl信息
③ 在設(shè)備樹中創(chuàng)建LED的設(shè)備節(jié)點,并加入GPIO信息
④ 編寫LED設(shè)備驅(qū)動程序
接下來根據(jù)上面這四步來添加一下LED的設(shè)備驅(qū)動。
36.2 LED硬件原理圖分析LED設(shè)備的硬件原理圖如下所示:
LED設(shè)備的原理圖很簡單,LED一端接3.3V電源,另一端為控制引腳:GPIO_3,通過控制GPIO_3的高低電平來控制LED的亮滅。所以我們確認LED設(shè)備只使用了一個控制引腳:GPIO_3。
36.3 修改設(shè)備樹文件在引腳原理圖分析中確認了LED的控制GPIO信息,接下來就要修改設(shè)備樹文件。
36.3.1 添加pinctrl信息在i.MX6UL終結(jié)者開發(fā)板中使用GPIO_3這個引腳來控制LED設(shè)備。打開topeet_emmc_4_3.dts文件在iomux節(jié)點的imx6ul-evk子節(jié)點下創(chuàng)建一個名為“pinctrl_led”的子節(jié)點,具體內(nèi)容如下:
&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog_1>;
imx6ul-evk {
pinctrl_led: gpio-led {
fsl,pins = ;
};
}
};
在pinctrl_gpio_leds節(jié)點中將GPIO_3引腳的復(fù)用功能定義為GPIO1_IO03,即為一個普通的輸入輸出引腳。宏定義MX6UL_PAD_GPIO1_IO03__GPIO1_IO03定義在arch/arm/boot/dts/imx6ul-pinfunc.h目錄下。
36.3.2 添加LED設(shè)備節(jié)點在topeet_emmc_4_3.dts文件下,在根節(jié)點“/”下創(chuàng)建LED節(jié)點,節(jié)點名為“gpioled”,具體內(nèi)容如下:
1 gpioled {
2 #address-cells = <1>;
3 #size-cells = <1>;
4 compatible = "gpioled";
5 pinctrl-names = "default";
6 pinctrl-0 = <&pinctrl_led>;
7 led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
8 status = "okay";
9 };
第6行,pinctrl-0 屬性設(shè)置 LED 燈所使用的GPIO對應(yīng)的 pinctrl 節(jié)點。
第7行,led-gpio屬性指定了LED使用的GPIO為GPIO1的IO3引腳,低電平有效,在驅(qū)動程序中會獲取led-gpio屬性的內(nèi)容來得到GPIO編號,因為gpio子系統(tǒng)的操作控制函數(shù)需要GPIO編號。
添加完LED的設(shè)備節(jié)點后,還有一個重要的步驟,就是檢查GPIO引腳有沒有被其他設(shè)備使用。一個引腳只能配置成一個功能,如果有其他設(shè)備也使用了這個GPIO,那么會導(dǎo)致在LED驅(qū)動程序中GPIO初始化失敗。這一點非常重要。
檢查GPIO引腳有沒有被其他設(shè)備使用包括兩個方面:
① 檢查pinctrl設(shè)置
② 檢查這個GPIO有沒有被別的設(shè)備使用
LED設(shè)備使用的是GPIO1_IO03,首先檢查GPIO1_IO03這個引腳有沒有其他pinctrl節(jié)點的設(shè)置。在topeet_emmc_4_3.dts文件中找到了如下內(nèi)容:
pinctrl_tsc: tscgrp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0xb0
MX6UL_PAD_GPIO1_IO02__GPIO1_IO02 0xb0
MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0xb0
MX6UL_PAD_GPIO1_IO04__GPIO1_IO04 0xb0
>;
};
GPIO1_IO03引腳也在pinctrl_tsc節(jié)點中定義了,pinctrl_tsc 節(jié)點是 TSC(電阻觸摸屏接口)的 pinctrl 節(jié)點,而在i.MX6UL終結(jié)者開發(fā)板中并沒有用到這個接口,因此我們要將pinctrl_tsc節(jié)點下的GPIO1_IO03引腳的定義注釋掉。和 C 語言一樣,在要屏蔽的內(nèi)容前后加上“/*”和“*/”符號即可。
既然有其他設(shè)備配置了GPIO1_IO03引腳的pinctrl信息,應(yīng)該會有使用使用這個pinctrl節(jié)點的設(shè)備節(jié)點,在topeet_emmc_4_3.dts文件中查找一下pinctrl_tsc或者直接查找“gpio1 3”,查找內(nèi)容如下:
1 &tsc {
2 pinctrl-names = "default";
3 pinctrl-0 = <&pinctrl_tsc>;
4 xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
5 measure-delay-time = <0xffff>;
6 pre-charge-time = <0xfff>;
7 status = "disabled";
8 };
可以看出第4行xnur-gpio屬性使用了“gpio1 3”,同意需要把這一行也注釋掉。然后繼續(xù)按照上面步驟搜索,看看還有沒有其他設(shè)備使用了GPIO1_IO03引腳。
設(shè)備樹編寫完成以后使用“make dtbs”命令重新編譯設(shè)備樹,然后使用新編譯出來的 topeet_emmc_4_3.dtb 文件啟動 Linux 系統(tǒng)。啟動成功以后進入“/proc/device-tree”目錄中查看“gpioled”節(jié)點是否存在,如果存在的話就說明設(shè)備樹基本修改成功(具體作用還要驅(qū)動驗證),結(jié)果如下圖所示:
請繼續(xù):IMX6ULL開發(fā)平臺Linux-LED實驗(二)
歡迎光臨 電子工程網(wǎng) (http://m.qingdxww.cn/) |
Powered by Discuz! X3.4 |
主站蜘蛛池模板:
婷婷六月天在线
|
免费观看呢日本天堂视频
|
亚洲国产第一区二区三区
|
美国伦理片大全手机在线
|
日韩a在线
|
国产精品1024香蕉在线观看
|
久久久久久久99视频
|
国产一级二级三级在线观看
|
毛片免费毛片一级jjj毛片
|
国产三级在线免费
|
日本免费在线观看
|
成年女人毛片免费视频
|
妖精视频一区二区三区
|
在线成人毛片
|
欧美激情中文字幕一区二区
|
五月开心六月伊人色婷婷
|
国产一级自拍
|
三级色网站
|
日本www在线视频
|
亚洲天堂在线观看完整版
|
亚洲国产日韩在线观看
|
视频h在线|
国产精品日韩一区二区三区
|
性色吧
|
九九亚洲视频
|
色久综合网
|
日韩欧美视频
|
麻豆影院在线观看
|
免费一级在线观看
|
免费看一级做a爰片久久
|
欧美日韩三区
|
日韩在线一区视频
|
最新亚洲精品
|
久久久久久久国产精品影院
|
亚洲欧美精品一区
|
欧美片在线视频观看
|
五月天精品|
久艹精品
|
国产又粗又爽又大又长免费视
|
激情文学图片
|
亚洲国产欧美精品一区二区三区
|