operating-system – DTS文件说明 – 别名

operating-system – DTS文件说明 – 别名,第1张

概述我试图从DTS文件中了解以下代码段. /dts-v1/;/ { model = "MPC8313ERDB"; compatible = "MPC8313ERDB", "MPC831xRDB", "MPC83xxRDB"; #address-cells = <1>; #size-cells = <1>; aliases { etherne 我试图从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 =& serial0?
和serial1 =& serial1
有人可以请一下吗?

谢谢.

解决方法 在DTS的别名部分,我们看到格式的条目

property = &label;

每个条目包括:
一个. property – 此处定义的新属性.
湾& label – 完成标签引用的节点的DTS路径.

它基本上将b的值赋给a.此后,可以使用速记属性访问由标签标识的节点的长名称.

请注意,此分配的RHS使用标签而不是单个节点的短名称.就像C代码中的标签指的是定义它的行上的指令一样,DTS中的标签指的是在该行上定义的单个节点(使用其完整的长路径).

例如,考虑以下DTS,
lxr.free-electrons.com/source/arch/powerpc/boot/dts/mpc8313erdb.dts

其别名部分包含以下内容:

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)

> enet0
> enet1
> serial0
> serial1
> pci0

例如,属性ethernet0现在设置为“/ soc8313 @ e0000000 / ethernet @ 24000”,即在the line where the label enet0 is defined上定义的节点.

更新:

>为什么别名只定义为ethernet0,serial0 ……?

>接下来,开发人员打算在内核源代码中访问这些节点.一旦在DTS中定义了别名,就可以通过在别名部分中搜索它而不是在整个DTS中搜索它来获得它所引用的节点的句柄.

来源:linux内核源代码中的函数find_node_by_alias().

>为什么不在soc8313节点下的pci0节点?

>在MPC8313上,PCI和DMA块通过IO-Sequencer(IOS)连接.因此,与直接连接到系统总线的其他模块(以太网,I2C,UART)相比,可以进行特殊处理.

总结

以上是内存溢出为你收集整理的operating-system – DTS文件说明 – 别名全部内容,希望文章能够帮你解决operating-system – DTS文件说明 – 别名所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/1026896.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存