设备树:标签和别名之间的区别?

设备树:标签和别名之间的区别?

在文件中imx6qdl.dtsi是以下定义GPIO节点(稍微缩短):

gpio1: gpio@0209c000 {
    [...]
};

gpio2: gpio@020a0000 {
    [...]
};

[...]

gpio7: gpio@020b4000 {
    [...]
};

而且在这个文件中,别名节点具有以下属性(再次缩短):

aliases {
    [...]
    gpio0 = &gpio1;
    gpio1 = &gpio2;
    gpio2 = &gpio3;
    gpio3 = &gpio4;
    gpio4 = &gpio5;
    gpio5 = &gpio6;
    gpio6 = &gpio7;
    [...]
};

这样做的原因到底是什么?标签会被覆盖吗?

答案1

别名供 Linux 内核使用,但不能在设备树源 (DTS) 配置中使用。

同时,可以在 DTS 文件中使用标签来扩展或修改节点。

例如,您可以有一个自定义 DTS 文件,例如:

#include "imx6qdl.dtsi"

&gpio2 {
   [your modifications here]
}

再次注意,这适用于gpio2 标签,而不是别名(参见这里)。

还值得注意的是,devicetree 源中使用的标签可以扩展为标记节点的完整路径,也可以扩展phandle为节点的(整数)值,具体取决于上下文;看这里

答案2

@happyMOOyear,不确定您是否找到了答案,但我将提供我的理解方式。我正在使用相同的 i.MX 芯片。

第二部分使用已定义的带有标签的节点gpio1@0209c000,并为该节点创建一个新的 ALIAS。别名是引用同一引脚的另一种方式。在这种情况下,别名是使用基于零的方案创建的,以便于参考。因此,refer togpio1@0209c000相当于gpio0,而且也更短。

参考:http://devicetree.org/Device_Tree_Usage#aliases_Node

相关内容