我应该如何理解设备树中兼容列表中的“不兼容”名称?

问题描述

这是设备文件的一部分 (linux/arch/arm/boot/dts/versatile-ab.dts)

uart1: uart@101f2000 {
    compatible = "arm,pl011","arm,primecell";
    reg = <0x101f2000 0x1000>;
    interrupts = <13>;
    clocks = <&xtal24mhz>,<&pclk>;
    clock-names = "uartclk","apb_pclk";
};

uart2: uart@101f3000 {
    compatible = "arm,primecell";
    reg = <0x101f3000 0x1000>;
    interrupts = <14>;
    clocks = <&xtal24mhz>,"apb_pclk";
};

smc@10100000 {
    compatible = "arm,primecell";
    reg = <0x10100000 0x1000>;
    clocks = <&pclk>;
    clock-names = "apb_pclk";
};

mpmc@10110000 { 
    compatible = "arm,primecell";
    reg = <0x10110000 0x1000>;
    clocks = <&pclk>;
    clock-names = "apb_pclk";
};

我已经阅读了有关设备树的内容,但无法清楚地理解它。我在初始化过程中了解内核,通过设备树搜索并将节点的兼容字段与驱动程序的兼容字段进行比较。因此对于 uart1 节点,它仅使用具有兼容字段“arm,pl011”的驱动程序。 uart1兼容领域的“arm,primecell”有什么作用?上面的 smc 和 mpmc 节点是什么,在兼容字段中只有“arm,primecell”?它们对于兼容列表中具有“arm,primecell”的所有节点是否通用? (我发现 arm socs 或 board 中的许多节点在兼容列表中有“arm,primecell”。内核是否使用具有不太兼容(或通用)字段(如“arm,primecell”)的节点数据,并覆盖或添加信息来自具有更兼容(或特殊)名称的节点?
而 smc@10100000 和 mpmc@10110000 的区别仅在于名称和地址。节点名有特殊含义吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)