当设备树定义在“保留内存”节点

时间:2017-10-20 03:45:43

标签: linux-kernel linux-device-driver embedded-linux

当我在linux设备树中的驱动程序定义引用“reserved-memory”部分中的节点时,如下:

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

            testmod_reserved: testmod_reserved@41000000 {
                compatible = "ibd,testmod";
                reg = <0x20000000 0x1000>;
            };
    };

testmod@41000000 {
    memory-region = <&testmod_reserved>;
};

我的'testmod'内核模块中的探测函数没有被调用(在执行'insmod testmod'时。但是如果我在保留内存节点之外定义它,那么:

test_mod: testmod@41000000 {
        #address-cells = <1>;
        #size-cells = <1>;
        ranges;
        compatible = "ibd,testmod";
        reg = <0x20000000 0x1000>;
};

然后一切都很好,'探测'被称为'insmod'。

我已经通过仔细阅读'/ proc / device-tree /'信息确认正在解析/加载设备树。 phandles,内存定义,reg值等都是正确的。

我无法找到有关为何会发生这种情况的任何信息。

1 个答案:

答案 0 :(得分:0)

通读内核中的保留内存文档: https://www.kernel.org/doc/Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt

/ reserved-memory /子节点

保留内存节点的每个子节点指定一个或多个区域 保留的记忆。每个子节点可以使用&#39; reg&#39;财产到 指定一个特定范围的保留存储器,或者一个&#39;尺寸&#39;财产 请求动态分配的内存块的可选约束。