1. 程式人生 > 實用技巧 >迅為iMX6開發板- 裝置樹核心-裝置樹相關檔案簡要分析

迅為iMX6開發板- 裝置樹核心-裝置樹相關檔案簡要分析

在支援裝置樹的核心原始碼中,裝置樹用來取代來老版本核心中的平臺檔案。
本文件主要介紹在 iMX6 開發板(iMX6Q,iMX6D,iMX6PLUS)的幾個重要的裝置樹檔案,這幾個檔案在後續的裝置驅動分析中,經常會用到。
裝置樹檔案的分析
這裡以 iMX6Q 的為例來分析,iMX6D 和 PLUS 的分析方法都是類似。
首先看下編譯指令碼,如下圖所示,“build_android_kernel.sh”為 android 核心編譯指令碼,“build_qt_kernel.sh”為 qt 核心編譯指令碼,這裡以 Qt 的核心編譯指令碼為例

開啟“build_qt_kernel.sh”,如下圖所示,可以看到裝置樹檔案是“arch/arm/boot/dts”目錄下的,“imx6q-topeet_10.1inch.dts”、“imx6q-topeet_7inch.dts”和“imx6q-topeet_9.7inch.dts”這三個。


上圖中,這三個裝置樹檔案的名稱來看,應該是為了支援不同解析度的螢幕的配置,除了螢幕部分的,其它部分應該是相同的,所以這裡只需要分析其中一個即可(實際情況就是這樣的,感興趣可以自己對比下)。
這裡以“imx6q-topeet_10.1inch.dts”為例來分析。
開啟“arch/arm/boot/dts/imx6q-topeet_10.1inch.dts”,先看下呼叫的標頭檔案,如下圖所示,有兩個標頭檔案“imx6q.dtsi”和“imx6qdl-sabresd.dtsi”。關於這個裝置樹檔案,其中大部分內容都是關於顯示卡的。

這裡我們看下呼叫的“imx6q.dtsi”,開啟“arch/arm/boot/dts/imx6q.dtsi”,如下圖所示,看下標頭檔案“imx6q-pinfunc.h”和“imx6qdl.dtsi”。

“imx6q-pinfunc.h”標頭檔案,如果大家以前用過飛思卡爾的 arm 晶片,那麼就會知道這個是 IO 的巨集定義標頭檔案,這是很重要的一個檔案,這個檔案在後面會經常用到---“imx6q-pinfunc.h”在“arch/arm/boot/dts/imx6q-pinfunc.h”。
另外像“dt-bindings”打頭的裝置樹標頭檔案,暫時不用過多關注。
開啟“arch/arm/boot/dts/imx6qdl-sabresd.dtsi”檔案,在其中可以搜到“&iomuxc”,這個是飛思卡爾裝置樹檔案中,給 io 初始化的地方。例如你要配置一個 IO
為輸出,那麼需要在這裡初始化;另外一層意思就是,每一個 IO 都要初始化,一般我們預設是在這個位置進行初始化。

在這個檔案下,我們可以找到常規的 led,蜂鳴器和rs485的裝置樹註冊,這表明裝置樹註冊都是在這個檔案中,如果我們要新增加裝置,需要在這裡增加裝置樹程式碼,關於裝置樹程式碼,我們後續再介紹。

總結:
這裡分析出了以下幾個重要的檔案:
1 關於螢幕(顯示卡)配置的裝置樹檔案為以下幾個檔案(檔案都在 arch/arm/boot/dts目錄下):
imx6q-topeet_10.1inch.dts topeet_10.1inch.dts
imx6q-topeet_7inch.dts topeet_7inch.dts
imx6q-topeet_9.7inch.dts topeet_9.7inch.dts
2 imx6 的 IO 的巨集定義在以下檔案中:
arch/arm/boot/dts/imx6q-pinfunc.h
3 裝置樹對 IO 初始化和設備註冊在以下檔案中:
arch/arm/boot/dts/imx6qdl-sabresd.dtsi