此篇原始檔arch/arm/boot/dts/imx6sx.dtsi
以下是兩段較為常見的dtsi和dts**
1 uart5: serial@021f4000 ;以上這段**更多出現在*.dtsi中
一般會在*.dtsi中將晶元的外設介面資源都做定義,
如uart5作為該外設的label,node-name@unit-address作為裝置的名稱,node-name只是裝置型別,uart1/uart2/uart3等可以都是serial名稱,而@後面則跟著裝置暫存器起始位址。
compatible預設屬性,
reg暫存器位址和長度,該uart5節點的父節點為aips2,在父節點中指明#address-cells = <1>;#size-cells = <1>;這決定了子節點字段長度address為1, length為1. 所以reg格式為reg = <0x021f4000 0x4000>;
interrupts對應的中斷號和中斷出發方式,uart5的父節點為aips2,而aips2的父節點為soc,soc節點定義了interrupt-parent = ;給出了節點所依附的中斷控制器,如果節點沒有指定interrupt-parent,那麼就從父節點繼承,所以該uart5節點繼承了soc的中斷控制器,即intc. 而intc節點的#interrupt-cells = <3>;所以就有了該節點中interrupts = ;三個字段,具體這三個欄位的含義可以參考晶元文件的描述。其中gic_spi定義在include/dt-bindings/interrupt-controller/arm-gic.h值為0,
clock外設時鐘,在include/dt-bindings/clock/imx6sx-clock.h,指定裝置工作時鐘
status一般會設為disabled。
1 &uart5 ;以上這段**更多出現在*.dts中
在*.dts中如果想對該裝置進行操作,需要進行override,至少status需要從disabled設定為okay, 當然也有可能需要對compatible屬性進行重寫(為了和自己的driver匹配),另外需要使用&label首先引用該裝置,使用pinctrl-names和pinctrl-0進行引腳的配置,當然這裡可能出現多組引腳的配置,如下**:
1 &usdhc3 ;而這裡面的pinctrl-0對應的pinctrl_usdhc3內容如下:
1 pinctrl_usdhc3: usdhc3grp ;這種pinctrl的設定可參照/documentation/devicetree/bindinsg/pinctrl下示例**
到此,問題出現了:
1. 當寫乙個按鍵驅動,應該如何在*.dts或者*.dtsi中操作?
2. 當在串列埠driver中需要使用到某個pin腳作為普通輸出io,該如何操作?
3. 當在串列埠driver中需要使用某個muxpin腳作為adc或者其他服用功能該如何操作?
4. 當在串列埠driver中有可能想使能某個功能而不想寫定在driver**中,該如何操作?
5. 當想向driver中傳入乙個常數如做delay延時操作等等,該如何操作?
解答:
1. 當寫乙個按鍵驅動,應該如何在*.dts或者*.dtsi中操作?
1 gpio-keys ;11 12 volume-down ;
17 };
1 pinctrl_gpio_keys: gpio_keysgrp ;2. 當在串列埠driver中需要使用到某個pin腳作為普通輸出io,該如何操作?
1 sii902x_reset: sii902x-reset ;最簡單的不需要pinctrl來進行pin腳的設定,為什麼???
3. 當在串列埠driver中需要使用某個muxpin腳作為adc或者其他服用功能該如何操作?
這個問題其實上面有提到,就像上述的多個pin-names和多個pinctrl在後面的pinctrl中配置這個復用的管腳即可。
4. 當在串列埠driver中有可能想使能某個功能而不想寫定在driver**中,該如何操作?
1 &uart5 ;只需要在driver中使用of函式讀取此屬性,如果有此字段,可以使能某些操作;如果沒有就失能某些操作。
5. 當想向driver中傳入乙個常數如做delay延時操作等等,該如何操作?
1 &usdhc3 ;只需要在driver中讀取bus-width欄位的值,即可獲取到8這個常量,注意在devicetree中命名字段更多使用」-「而非下劃線」_」.
對於dts的理解和分析
dts是linux下對於裝置資源的一種描述方式,相對於之前platform的描述方式,可以大大節省linux核心 主要是驅動描述方面。dts檔案將被編譯成dtb檔案,與編譯生成的kernel檔案打包在一起,一般放在頭部。kernel在載入時,會將dtb檔案匯入到記憶體,驅動 使用標準的api訪問dt...
dts 編譯過程 DTS結構及其編譯方法
一 主要問題 1,需要了解dtsi與dts的關係 2,dts的結構模型 3,dts是如何被編譯的,以及編譯後會生成乙個什麼檔案.二 參考文字 1,dts device tree source dts檔案是一種ascii文字格式的devicetree描述。基本上,在armlinux內,乙個.dts檔案...
8 2 5 例項分析
下面對以上 作簡要說明 1 按照常規步驟建立並拷貝 matrix rect 的matrx var mymatrix matrix matrix rect.transform.matrix 此處應該注意大小寫,transform 內部並不存在 matrix 物件。matrix 是矩陣類的名字,matr...