dts DTS例項分析

2021-09-08 18:25:07 字數 2364 閱讀 3799

此篇原始檔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 = <&intc>;給出了節點所依附的中斷控制器,如果節點沒有指定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 ;

1112 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中命名字段更多使用"-"而非下劃線"_".

8 2 5 例項分析

下面對以上 作簡要說明 1 按照常規步驟建立並拷貝 matrix rect 的matrx var mymatrix matrix matrix rect.transform.matrix 此處應該注意大小寫,transform 內部並不存在 matrix 物件。matrix 是矩陣類的名字,matr...

分析函式例項

具體的分析函式的語法和函式列表見 資料準備 以oracle樣例的sh模式為實驗資料 建立實驗資料表 sales fact create table sales fact as select country name country,country subregion region,prod name...

AsyncTask例項分析

生成該類的物件,並呼叫execute方法之後 首先執行的是onproexecute方法 其次執行doinbackgroup方法 public class progressbarasynctask extends asynctask 這裡的integer引數對應asynctask中的第乙個引數 這裡的...