Linux kernel 设备树覆盖:片段编号

Linux kernel 设备树覆盖:片段编号,linux-kernel,linux-device-driver,embedded-linux,device-tree,Linux Kernel,Linux Device Driver,Embedded Linux,Device Tree,考虑下面的设备树覆盖示例。 片段编号为0、1、2 数字重要吗? 它们必须按升序排列吗? 或者0、2、1也可以工作吗? 具体在哪里 /dts-v1/; /plugin/; / { fragment@0 { target = <&foo>; __overlay__ { ... }; }; fragment@1 { target = <&bar>;

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

数字重要吗? 它们必须按升序排列吗? 或者0、2、1也可以工作吗? 具体在哪里

/dts-v1/;
/plugin/;

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

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

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

};
/dts-v1/;
/插件/;
/ {
fragment@0 {
目标=;
__覆盖层{
...
};
};
fragment@1 {
目标=;
__覆盖层{
...
};
};
fragment@2 {
目标=;
__覆盖层{
...
};
};
};
那些数字(和名字)无关紧要。查看
drivers/of/overlay.c
中的下一个函数:

->->->->

正如您所看到的,代码只是在
树上迭代(使用
为\u node()的\u每个\u子\u使用
),然后通过
“\uu覆盖\uu”
名称获得感兴趣的节点,如下所示:

ovinfo->overlay=of_get_child_by_name(信息节点,“uu overlay”);
所以这些片段只是一些节点,它们的名称无关紧要。唯一真正使用的是这些节点的内容

我甚至可以假设您可以完全忽略那些
@1
@2
后缀。查看(第2.2.1节节点名称):

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

节点-name@unit-地址

名称的
单元地址
组件特定于节点所在的总线类型。它包括 表2-1中字符集的一个或多个ASCII字符。
单元地址
必须 匹配节点的
reg
属性中指定的第一个地址如果节点没有
reg
属性,则
@
单元地址
必须省略,并且节点名称本身将节点与其他节点区分开来 在树中的同一级别
。特定总线的绑定可以指定附加的、更具体的
reg
格式和
单元地址的要求

当然,在解析设备树文件的代码中可能有一些技巧,如:

if((*p1)=='@')
但我真的怀疑“@”后面的数字是否意味着什么(在你的例子中)