web-dev-qa-db-ja.com

デバイスツリーの.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>;

最初と最後のアドレスだと思いましたが、finalはinitialより低くすることはできないため、ここでは意味が少なくなります。

5
gpuguy

山かっこ(<>)は「32ビットの符号なし整数配列」を示し、「セル」と呼ばれることが多いと思います。 regプロパティの場合、最初の値は(オフセット)アドレスで、2番目の値はレジスタの長さです。複数の範囲を持つことも可能であることに注意してください。

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

出典:

2
sfrank

一般的に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(#address-cells = <2>;による2つの32ビット数で構成)
  • 長さ:00000003 00000004(#size-cells = <2>;による2つの32ビット数で構成)

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

はい reg<0xxxx 0xxxx> を意味する reg<offset length>

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

0
Ajay