[DTS]練習デバイスツリー
序文
これは、最後のツリー関連機器であり、主に実用的なデバイスツリーのために、ドライブに応じて変更して編集する必要があります。それは内容ではなく、ラインの説明により、ラインを越えていませんでした。私が手助けをしたいです。
デバイスツリーの実践
RK3288のように以下の説明
カーネル\アーチ\アーム\ブート\ DTS \ rk3288.dts
(1)ヘッダ
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/pinctrl/rockchip.h>
#include <dt-bindings/clock/rk3288-cru.h>
#include <dt-bindings/power/rk3288-power.h>
#include <dt-bindings/thermal/thermal.h>
#include <dt-bindings/power/rk3288-power.h>
#include <dt-bindings/soc/rockchip,boot-mode.h>
次のような使用されるマクロDTSを定義するヘッダファイル:
interrupts = <GIC_SPI 151 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
GIC_SPIとIRQ_TYPE_LEVEL_HIGHは、ヘッダファイルに定義されています。
(2)ルートノード
/ {
#address-cells = <2>;
#size-cells = <2>;
compatible = "rockchip,rk3288";
interrupt-parent = <&gic>;
........
}
-
#住所細胞#サイズ-細胞および子ノード属性値REGを決定
<アドレス1長さ1アドレス2長さ2>
-
machine_descに合わせて互換性
-
割込み親割り込みコントローラを使用して、ルートノードを、属性は子ノード、共通ノードと親ではない場合。
(3)エイリアス(別名)
aliases {
ethernet0 = &gmac;
i2c0 = &i2c0;
i2c1 = &i2c1;
i2c2 = &i2c2;
i2c3 = &i2c3;
i2c4 = &i2c4;
i2c5 = &i2c5;
mshc0 = &emmc;
mshc1 = &sdmmc;
mshc2 = &sdio0;
mshc3 = &sdio1;
serial0 = &uart0;
serial1 = &uart1;
serial2 = &uart2;
serial3 = &uart3;
serial4 = &uart4;
spi0 = &spi0;
spi1 = &spi1;
spi2 = &spi2;
};
定義されたノードの別名
(4)アーム-PMU(パワーマネージメントユニット)
arm-pmu {
compatible = "arm,cortex-a12-pmu";
interrupts = <GIC_SPI 151 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
};
この定義の方法、このノードの属性と属性値?
1)ビューアームドキュメント、ドキュメントとプロパティ指定されたノードの説明pmu.txtカーネル\ドキュメント\ devicetree \バインディング\ \します。
2)互換性の性質、文書には、オプションを提供します
"apm,potenza-pmu"
"arm,armv8-pmuv3"
"arm,cortex-a73-pmu"
"arm,cortex-a72-pmu"
"arm,cortex-a57-pmu"
"arm,cortex-a53-pmu"
"arm,cortex-a35-pmu"
"arm,cortex-a17-pmu"
"arm,cortex-a15-pmu"
"arm,cortex-a12-pmu"
"arm,cortex-a9-pmu"
"arm,cortex-a8-pmu"
"arm,cortex-a7-pmu"
"arm,cortex-a5-pmu"
"arm,arm11mpcore-pmu"
"arm,arm1176-pmu"
"arm,arm1136-pmu"
"brcm,vulcan-pmu"
"cavium,thunder-pmu"
"qcom,scorpion-pmu"
"qcom,scorpion-mp-pmu"
"qcom,krait-pmu"
そして、このようなRK3288皮質-A12を用いたとしてアームCPU使用のコアバージョンに基づいて値を決定するので、私は「腕、皮質-A12-PMU」を選択しました
3)割り込みの性質を説明し、コアあたり1つの結合割り込みまたは1(文書で与えられる)、またはコアの組み合わせは、割り込みを中断しています。RK3288は、4コアであるため、4つの割り込みの組み合わせが中断するからです。そして、それぞれに対応する3つの値が割り込みます。
なぜ3つの値は、各値の対応の意味は何ですか?
4)なぜ割り込みコントローラと関連している3つの値です。上記の子ノードが割り込み親属性を指定されていない、と親ノードが共有されたので、私たちは、割り込みコントローラの対応する定義を見つけることができます。そして、その互換性のあるプロパティを見つけます。
compatible = "arm,gic-400";
割り込みコントローラタイプは、上記の性質から求めることができるGIC(汎用割り込みコントローラ)、対応するドキュメントカーネル\ドキュメントを見つけることが可能である\ devicetree \バインディング\割り込みコントローラ\アーム、gic.txt値
GICの属性値に記述された文書番号割り込み細胞は、それぞれに対応する3つの値は、割り込み要因、3であるべきです。
その後も説明されているドキュメントに対応する3つの値の意味は何ですか。
第一の細胞:割り込みタイプ、0 SPI割り込み、割り込み1は、PPIを表し
第2セル:割り込みタイプの割り込み数は、SPIは、範囲[0から987]、PPIの範囲割り込みを中断[0-15]
3細胞:識別、ビット[3:0](1:2、立ち上がりエッジ・トリガ:立ち下がりエッジ(SPI無効)4:高トリガー8:(SPI無効)トリガローレベル)、ビット[15:8] (PPI割り込みマスク)
5)<GIC_SPI 151 IRQ_TYPE_LEVEL_HIGH>含义
割り込みの種類:SPI(アームgic.hで定義さGIC_SPI)は、SPI割り込みが全てのCPUコアによって共有されていることを示します。
割り込みない:151、所与RK3288データシートの値は0から159までであり、この値は特定定義する方法は不明です。
タグ:高、RK3288データシートは(唯一のアクティブハイ割り込み入力)「入力レベルが固定された、唯一の高レベルと小文字が区別され、割り込み」と言います
6)割り込みCPUコアにプロパティ親和性を中断し、このプロパティの値は、一つの割り込みの一つです。すなわち:
<GIC_SPI 151 IRQ_TYPE_LEVEL_HIGH> --------> CPU0
<GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH> --------> CPU1
<GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH> --------> CPU2
<GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH> --------> CPU3
複数のSPI割り込み親和性の属性が存在している必要があります。
(5)SDMMC(SDIO)
sdmmc: dwmmc@ff0c0000 {
compatible = "rockchip,rk3288-dw-mshc";
max-frequency = <150000000>;
clocks = <&cru HCLK_SDMMC>, <&cru SCLK_SDMMC>,
<&cru SCLK_SDMMC_DRV>, <&cru SCLK_SDMMC_SAMPLE>;
clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
fifo-depth = <0x100>;
interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
reg = <0x0 0xff0c0000 0x0 0x4000>;
resets = <&cru SRST_MMC0>;
reset-names = "reset";
status = "disabled";
};
1)ドキュメント
カーネル\ドキュメント\ devicetree \バインディングのMMCの\なRockchip-DW-mshc.txt \
カーネル\ドキュメント\ devicetree \バインディングのMMCの\ synopsy-DW-mshc.txt \
カーネル\ドキュメント\ devicetree \バインディングのMMCの\ mmc.txt \
上記の文書ノード属性は、説明を行っています。
2)最大周波数:最大クロック周波数、データシートを参照してください
3)クロック:クロック指定時計部とバルブ、及びクロック名に一対一に対応。これは、4つのクロック名に対応する属性値である、属性値4を指定します。
BIU:バスインタフェースユニット(BIU)
CIU:カードインターフェース部(カードインタフェース部)
CRU:クロックリセット部(リセット時計手段)
4)クロック-名前:名前クロック、およびクロック対応
5)FIFO深さ:O(RX / TX)バッファサイズ
6)割り込み:割り込み
7)REG:ベースアドレスと最大なぜ四つの値(セル)を使用する、オフセット?
親ノード#アドレス細胞= <2>#サイズ細胞ので= <2>、主にすべての子ノードに適合し、親ノードは、マルチセルの数を定義します。
8)リセット:リセットし、その周辺のリセットを指示するリセット部指定子()を指定します。RK3288クロックユニットとリセットユニットは、同じモジュール(CRU)上に集積されています。
9)リセット名:使用すると、属性は属性プロパティの値が「リセット」されなければならない持っている必要がありますリセットされます。
10)状態:周辺状態、二つの値:無効と大丈夫。
(6)スリープ
spi0: spi@ff110000 {
compatible = "rockchip,rk3288-spi", "rockchip,rk3066-spi";
clocks = <&cru SCLK_SPI0>, <&cru PCLK_SPI0>;
clock-names = "spiclk", "apb_pclk";
dmas = <&dmac_peri 11>, <&dmac_peri 12>;
dma-names = "tx", "rx";
interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&spi0_clk &spi0_tx &spi0_rx &spi0_cs0>;
reg = <0x0 0xff110000 0x0 0x1000>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
1)DMAS:DMAチャネルSPIバスのMISOを指定し、MOSIを使用しました。
2)pinctrl-名:構成名ピン(ピンデフォルト)は、属性値は「デフォルト」または「スリープ」であってもよいです。
3)pinctrl-0:ピン参照リストは、ここでは主にSPIピンです。各基準点は、制御ピンの下の子ノードでなければなりません。
4)#アドレスセル#サイズ細胞および主にSPIで調製したデバイスを接続します。
要約:
(1)上記の説明は、主に文法で、設定のマニュアルを見つける方法を練習します。チップの二次開発を行う人々のために元のドキュメントを参照してくださいとDocumentionの\ devicetreeでドキュメントを表示する主な理由です。もちろん、あなたは、データシートを見ることができますが、あまり必要性はなかった、と多くのチップメーカーは、完全なデータシートを提供することはありません。
(2)チップ工場のエンジニアは、主にデータシートとDocumentionの\ devicetree下文書に従って構成した場合。時にはカスタム属性。
(3)プロパティが価値があるとドライブ構成が一致している必要があります。
学ぶために、自分の文書をチェックするために学び、これはエンジニアがスキルを持つべきです。ただペーストをコピーするかわからない、問題が解決する方法を知りません。
QQグループチャットへようこそ
あなたが好きなら、あなたの友人と共有してください、あなたのサポートに感謝します