我正在尝试从DTS文件中了解以下代码段。
/dts-v1/;
/ {
model = "MPC8313ERDB";
compatible = "MPC8313ERDB", "MPC831xRDB", "MPC83xxRDB";
#address-cells = <1>;
#size-cells = <1>;
aliases {
ethernet0 = &enet0;
serial0 = &serial0;
serial1 = &serial1;
pci0 = &pci0;
};
别名的作用是什么?
我的理解如下
对于ethernet0,我们可以使用enet0
但为什么serial0 =&amp; serial0?
和serial1 =&amp; serial1
有人可以请一下吗?
感谢。
答案 0 :(得分:8)
在DTS的 aliases
部分,我们会看到格式的条目
<强>
property = &label;
强>
每个条目包括:
一个。 property
- 此处定义了新的属性
湾&label
- 完成DTS路径至node
引用的label
。
它基本上将 b 的值分配给 a 。此后,可以使用简写label
访问property
标识的节点的长名称。
请注意,此分配的RHS使用label
s和 NOT 各个节点的短名称。就像C代码中的label
引用定义它的行上的指令一样,DTS中的label
指的是在该行上定义的单个节点(使用其完整的长路径)。
例如,考虑以下DTS,
lxr.free-electrons.com/source/arch/powerpc/boot/dts/mpc8313erdb.dts
其aliases
部分包含以下内容:
20 aliases {
21 ethernet0 = &enet0;
22 ethernet1 = &enet1;
23 serial0 = &serial0;
24 serial1 = &serial1;
25 pci0 = &pci0;
26 };
新定义的属性(LHS)
ethernet0
ethernet1
serial0
serial1
pci0
参考相应的标签(RHS)
例如,属性 ethernet0
现在设置为 "/soc8313@e0000000/ethernet@24000"
,即the line where the label enet0
is defined上定义的节点。
更新:
为什么仅为ethernet0
,serial0
定义别名??
接下来,开发人员打算在内核源代码中访问这些节点。在DTS中定义别名后,只需在aliases
部分搜索别名,即可获取的句柄适用于整个DTS。
来源:Linux内核源代码中的函数 find_node_by_alias() 。
为什么pci0
节点下的 NOT 中有soc8313
个节点?