设备树覆盖:片段编号

问题描述 投票:0回答:1

考虑以下设备树覆盖示例。 片段编号为 0、1、2。

数字重要吗? 他们必须按升序排列吗? 或者 0、2、1 也可以吗? 在哪里指定?

/dts-v1/;
/plugin/;

/ {
    fragment@0 {
        target = <&foo>;
        __overlay__ {
            ...
        };
    };

    fragment@1 {
        target = <&bar>;
        __overlay__ {
            ...
        };
    };

    fragment@2 {
        target = <&baz>;
        __overlay__ {
            ...
        };
    };

};
linux-kernel linux-device-driver embedded-linux device-tree
1个回答
5
投票

那些数字(和名字)并不重要。看看

drivers/of/overlay.c
中的下一个功能:

of_overlay_create()
->
of_build_overlay_info()
->
of_fill_overlay_info()
->
find_target_node()

如您所见,代码只是遍历

tree
(使用
for_each_child_of_node()
),然后通过
"__overlay__"
名称获取感兴趣的节点,如下所示:

ovinfo->overlay = of_get_child_by_name(info_node, "__overlay__");

所以那些片段只是一些节点,它们的名字无关紧要。唯一真正使用的是那些节点的内容。

我什至可以假设你可以完全省略那些

@1
,
@2
后缀。查看设备树规范(第 2.2.1 节节点名称):

设备树中的每个节点根据以下约定命名:

node-name@unit-address

名称的

unit-address
部分特定于节点所在的总线类型。它包含 表 2-1 中字符集中的一个或多个 ASCII 字符。
unit-address
必须 匹配节点的
reg
属性中指定的第一个地址。 如果节点没有
reg
属性,则
@
unit-address
必须省略,仅节点名称将节点与其他节点区分开来 在树中的同一层
。特定总线的绑定可以指定额外的、更具体的
reg
unit-address
.

的格式要求

当然,在解析设备树文件的代码中可以有一些技巧,像这样:drivers/of/fdt.c, unflatten_dt_node():

if ((*p1) == '@')

但我真的怀疑'@'之后的数字是否意味着什么(在你的情况下)。

© www.soinside.com 2019 - 2024. All rights reserved.