加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 01:15:19 所属栏目:Linux 来源:网络整理
导读:我试图从DTS文件中了解以下代码段. /dts-v1/;/ { model = "MPC8313ERDB"; compatible = "MPC8313ERDB","MPC831xRDB","MPC83xxRDB"; #address-cells = 1; #size-cells = 1; aliases { ethernet0 = enet0; serial0 = serial0; serial1 = serial1; pci0 = pci0;
我试图从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)相比,可以进行特殊处理.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读