デバイスツリーの.dtsファイル内の山括弧<>内の2つの値は何ですか?

デバイスツリーの.dtsファイル内の山括弧<>内の2つの値は何ですか?

次はコードセグメントデバイスツリーファイルから:

flash@0 {
                compatible = "n25q128";
                reg = <0x0>;
                spi-max-frequency = <50000000>;
                #address-cells = <1>;
                #size-cells = <1>;
                partition@qspi-fsbl-uboot {
                    label = "qspi-fsbl-uboot";
                    reg = <0x0 0x100000>;
                };
                partition@qspi-linux {
                    label = "qspi-linux";
                    reg = <0x100000 0x500000>;
                };
                partition@qspi-device-tree {
                    label = "qspi-device-tree";
                    reg = <0x600000 0x20000>;
                };
                partition@qspi-rootfs {
                    label = "qspi-rootfs";
                    reg = <0x620000 0x5E0000>;
                };
                partition@qspi-bitstream {
                    label = "qspi-bitstream";
                    reg = <0xC00000 0x400000>;
                };
            };

私の簡単な質問は<>の2つの値は何ですか?たとえば、reg = <0x600000 0x20000>;

最初のアドレスと最後のアドレスであることがわかりました。

答え1

山かっこ(<>)は「32ビット符号なし整数配列」を意味し、私はしばしば「セル」と呼びます。この属性の場合、reg最初の値は(オフセット)アドレスで、2番目の値はレジスタの長さです。複数の範囲を持つことも可能です。

reg = <addr1 addr1_length addr2 addr2_length  ... addrN addrN_length>

源泉:

答え2

通常、2つの数字しか必要ありません。

また、次のように説明しました。https://elinux.org/Device_Tree_Usage#How_Addressing_Worksそれぞれが2つの数字である必要はありません。

たとえば、64ビットデバイスでは、次のようなことがよくあります。

#address-cells = <2>;
#size-cells = <2>;

つまり、アドレスとオフセットの種類は次のとおりです。

reg = <0x1 0x2 0x3 0x4>

これは領域を表します。

  • ベースアドレス:00000001 00000002(2つの32ビット数で構成#address-cells = <2>;
  • 長さ:00000003 00000004(2つの32ビット数で構成#size-cells = <2>;

これは、デバイスツリーの各数値が定義上32ビット幅であるため、各64ビット値には2つの数値が必要であるためです。

答え3

はい、reg<0xxxx 0xxxx>代表reg<offset length>

offsetはデバイスのベースアドレスであり、その長さによってそのデバイスのアドレス範囲が決まります。

関連情報