【问题标题】:DTS file explanation - aliasesDTS 文件说明 - 别名
【发布时间】:2013-07-18 07:17:04
【问题描述】:

我正在尝试从 DTS 文件中理解以下 sn-p。

/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
谁能简单介绍一下?

谢谢。

【问题讨论】:

    标签: operating-system embedded embedded-linux systems-programming device-tree


    【解决方案1】:

    在 DTS 的 aliases 部分中,我们看到格式的条目

    property = &amp;label;

    每个条目包括:
    一种。 property -- 这里定义了一个新的属性
    湾。 &amp;label -- 完整的 DTS 路径node 引用的 label

    它基本上将 b 的值分配给 a。此后,由label 标识的节点的长名称可以使用简写property 访问。

    请注意,此分配的 RHS 使用 labels 和 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

    参考相应的标签(右轴)

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


    更新

    1. 为什么只为ethernet0serial0...定义别名?

      • 更进一步,开发人员打算在内核源代码中访问这些节点。一旦在 DTS 中定义了 别名,则只需在 aliases 部分中搜索而不是搜索即可获得它所指节点的 句柄在整个 DTS 中。

        来源:Linux内核源码中的函数find_node_by_alias()

    2. 为什么pci0 节点在NOTsoc8313 节点下?

      • 在 MPC8313 上,PCIDMA 块通过 IO-Sequencer (IOS) 进行接口。因此,与直接连接到系统总线的其他模块(以太网、I2C、UART)相比,需要进行特殊处理。

    【讨论】:

    • 非常感谢 TheCodeArtist 再次救了我。现在我明白它们更像是我们在 unix shell 中设置的别名来引用完整路径。 mpc8313erdb.dts 是我正在调查的确切 dts 文件。你是我的救星。为什么我们只为 ethernet0 = &enet0; 定义别名?序列号0 = &序列号0;序列号 1 = &序列号 1; pci0 = &pci0;而且pci0不在soc下。
    • 在我的 dts 文件中 pic0 设置为 "/pci@e0008500" 吗?这样做有什么必要?
    • 我已经用详细信息更新了答案。虽然我无法找到代码中引用pci0 的确切位置,但我确实找到了ethernet0 here 的位置。研究该函数的内部结构应该有助于您理解和欣赏设备树的美妙之处。
    • 天哪.. TheCodeArtist 你什么都知道。非常感谢。
    • 您是如何使用别名找到函数的? “find_node_by_alias()”和引用“ethernet0”的节点?抓住“ethernet0”?你可以分享吗?我想知道。你从哪里得到 DTS 文件的解释。我正在尝试对整个文件进行逆向工程。我指的是devicetree.org/Device_Tree_Usagepower.org/documentation/epapr-version-1-1你能分享你的资源吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多