如何解释设备树的这一部分?

时间:2018-08-16 01:38:30

标签: device-tree

.dts中的以下代码段描述了保留的内存:

reserved-memory {
    #address-cells = <0x2>;
    #size-cells = <0x2>;
    ranges;

    cma_reserved: linux,cma {
        compatible = "shared-dma-pool";
        reusable;
        size = <0x0 0x1000000>; // 16MB
        alignment = <0x0 0x2000>; // 8KB
        linux,cma-default;
    };

    ion_reserved: ion@200000000 {
        compatible = "ion-region";
        reg = <0x2 0x0 0x1 0x0>; // 4GB
    };
};

我可以理解ion_reserved部分,但不了解cma_reserved部分,特别是关于这16MB内存的地址。

谢谢!

2 个答案:

答案 0 :(得分:1)

CMA (连续内存分配):之所以使用此分配,是因为dma需要连续内存,而使用可用的分配器,我们最多只能分配8 MB。因此我们在启动时使用cma(保留内存)。

“上方”节点中使用的属性:

  • 兼容属性将指定哪个驱动程序可以使用此节点。 司机在他们的设备中提及 .compatible =“ shared-dma-pool” id表,可以将此节点用作驱动程序。
  • 可重复使用的属性-这是一个可选的以及为空的属性。 当节点指定此属性表示时,操作系统可以在以下位置使用此内存: 该区域,但是它们是设备驱动程序在需要时的限制 他们可以收回这些有争议的记忆。

  • Size属性-此属性告诉您cma和as的总大小 在上述节点中为16 MB。

  • 对齐属性-分配对齐的地址边界。它 还要使用父级指定的2号尺寸单元。这就是为什么 “ alignment = <0x0 0x2000>;”

  • linux,cma-default属性-这也是一个空属性。如果这 提到属性,那么Linux将使用此内存区域 连续内存分配的默认值。他们也是相似的 属性“ linux,dma-default”(如果提到了此属性) 将使用此池区域作为DMA分配器。如果是cma首先 属性被使用,而dma使用第二个属性。

有关更多信息,请访问:https://www.kernel.org/doc/Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt

答案 1 :(得分:0)

文档(如Jitender所示)加上内核的控制台日志表明,cma块是从系统内存中分配的。

设备树中的memory节点:

memory {
  reg = <0x1 0x0 0x0 0xB0000000>; // 2.75GB, lease last 1.25GB to video codec
  device_type = "memory";
};

cma块的内核日志:

[    0.000000] Reserved memory: created CMA memory pool at 0x00000001af000000, size 16 MiB
[    0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool

我想以下内容反映了确认到设备树那部分的物理内存映射:

+=========================+ 0x3:0000:0000
|                         |
|                         |
|                         |
|        ION (4G)         |
|                         |
|                         |
|                         |
+=========================+  0x2:0000:0000
|                         |
|   Video decode (1.25G)  |
|                         |
+-------------------------+  0x1:b000:0000
|     CMA pool (16M)      |
|  ---------------------  |  0x1:af00:0000
|   crash kernel (64M)    |
|  ---------------------  |  0x1:ab00:0000
|                         |
|                         |
|     System (2.75G)      |
|                         |
+=========================+  0x1:0000:0000

谢谢!