什么是设备树中的 reg 属性?

Pan*_*shi 5 linux-device-driver linux-kernel device-tree

设备树中的address-cellsize-cells是什么?难道reg是与address-cellsize-cell?如果是,那么如何?

例如:

memory: memory@20000000 { 
            #address-cells = <1>;
            #size-cells = <1>;
            device_type = "memory";
            reg = <0x20000000 0x80000000>;
    };
Run Code Online (Sandbox Code Playgroud)

什么是 0x20000000 ?我们从哪里可以得到这个?

Ale*_*oni 5

reg 的含义取决于设备所连接的总线类型,并记录在总线的设备树绑定中。

这里,内存直接映射到CPU地址空间,reg是<address size>

因此,这意味着您的 DDR 从地址开始,0x20000000大小为 2GB。

这个地址应该记录在 SoC 数据表中,如果你能得到它,在名为内存或内存映射的部分中。

  • @PankajSuryawanshi 设备树中的所有数字都是 32 位。`#address-cells = &lt;1&gt;;` 表示地址由 `reg` 属性中的单个 32 位数字组成。`#size-cells = &lt;1&gt;;` 表示大小由 `reg` 属性中的单个 32 位数字组成。`reg` 属性包含大端顺序的地址单元,然后是大端顺序的大小单元。所以如果`#address-cells = &lt;2&gt;; #size-cells = &lt;2&gt;;`,那么`reg` 属性将包含 4 个值:`reg = &lt;ADDR_HI_32_BITS ADDR_LO_32_BITS SIZE_HI_32_BITS SIZE_LO_32_BITS&gt;;`。 (3认同)