dtsi與dts dts DTS例項分析

2021-10-12 13:33:28 字數 2243 閱讀 2999

此篇原始檔arch/arm/boot/dts/imx6sx.dtsi

1. dts和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下示例**

2. 通常會碰到的實際問題

到此,問題出現了:

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

android AsyncTask 請求與實現

asynctask是對thread和handler進行了封裝,這個封裝的讓我們在進行耗時的操作的時候不用自己啟動執行緒,可以在其類中進行相應的ui更新,這樣大大節約了時間,public class myasynctask extends asynctask 這種使用類泛型的方式進行內部資料的約定,在...

OpenRest nginx lua安裝與例項

1 安裝依賴 make install3 安裝lua依賴 apt get install m4 tar vxzf nettle 3.3.tar.gz cd nettle 3.3 configure make make install4 安裝lua及lua socket tar vxzf lua 5....

itoa與atoi ftoa與atof的實現

itoa與atoi 有的系統庫中有提供這兩個函式的實現,前兩天也自己嘗試寫寫這兩個函式,實現如下 itoa 把num轉換成字串存放在str 指向的字串裡 int myitoa int num,char str int temp int sign 0 標記num的符號 char p if str nu...