以下は、デバイスツリーファイル内の コードスニペット です。
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より低くすることはできないため、ここでは意味が少なくなります。
山かっこ(<>)は「32ビットの符号なし整数配列」を示し、「セル」と呼ばれることが多いと思います。 reg
プロパティの場合、最初の値は(オフセット)アドレスで、2番目の値はレジスタの長さです。複数の範囲を持つことも可能であることに注意してください。
reg = <addr1 addr1_length addr2 addr2_length ... addrN addrN_length>
出典:
一般的に2つの数字である必要はありません
さらに、次のように説明されています: https://elinux.org/Device_Tree_Usage#How_Addressing_Works それぞれ2つの数字である必要はありません。
たとえば、64ビットデバイスでは、次のことがよくあります。
#address-cells = <2>;
#size-cells = <2>;
これは、アドレスとオフセットが次のタイプであることを意味します。
reg = <0x1 0x2 0x3 0x4>
これは、次の領域を表します。
#address-cells = <2>;
による2つの32ビット数で構成)#size-cells = <2>;
による2つの32ビット数で構成)これは、デバイスツリーの各数値が定義上32ビット幅であるため、64ビット値ごとに2つ必要になるためです。
はい reg<0xxxx 0xxxx>
を意味する reg<offset length>
。
offset
はデバイスのベースアドレスであり、長さによって特定のデバイスのアドレス範囲が決まります。