dts例項分析

2021-08-19 19:13:22 字數 2284 閱讀 5330

此篇原始檔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...