当我在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值等都是正确的。
我无法找到有关为何会发生这种情况的任何信息。
答案 0 :(得分:0)
通读内核中的保留内存文档: https://www.kernel.org/doc/Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt
保留内存节点的每个子节点指定一个或多个区域 保留的记忆。每个子节点可以使用&#39; reg&#39;财产到 指定一个特定范围的保留存储器,或者一个&#39;尺寸&#39;财产 请求动态分配的内存块的可选约束。