设备树 .dts 文件中尖括号 < > 内的两个值是什么?

设备树 .dts 文件中尖括号 < > 内的两个值是什么?

以下是代码片段在设备树文件中:

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>;
                };
            };

我的简单问题是 < > 中的两个值是什么?例如在 reg = <0x600000 0x20000> 中;

我认为它是初始地址和最终地址,但这在这里意义不大,因为最终地址不能低于初始地址。

答案1

尖括号 (<>) 表示“32 位无符号整数数组”,我相信它们通常被称为“单元格”。在具有该属性的情况下reg,第一个值是(偏移)地址,第二个值是寄存器的长度。请注意,也可以有多个范围,即

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

资料来源:

答案2

一般来说,它不必只是两个数字

此外,正如所解释的:https://elinux.org/Device_Tree_Usage#How_Addressing_Works每个不必只是两个数字。

例如,在 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 位值需要两个数字。

答案3

是的,reg<0xxxx 0xxxx>代表reg<offset length>.

offset是设备的基地址,长度将决定给定设备的地址范围。

相关内容