在支持設備樹的內核源碼中,設備樹用來取代來老版本內核中的平臺文件。 本文檔主要介紹在 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 ![]() |