Devicetree - "ranges" 如何映射到设备节点?

Devicetree - how are "ranges" mmapped to device nodes?

假设我们有这个示例设备树:

我只想知道 ranges 使用什么机制才能正确映射到设备节点(ethernet@0,0i2c@1,0flash@2,0)。

是否使用:

正确找出映射?

Does it use:
...
to properly figure out mapping?

DT 节点的顺序并不重要,通常是为了美观,因此可以立即排除“出现顺序”。参见

range 属性 应该是 值的三元组。
但是,#address-cells 属性(属于 external-bus)指定(外部总线)

值将由 two 值组成。此“double-length”仅应用于 ,而 是每个父项的 #address-cells 属性 的单个 值节点。 #size-cells 属性 指定 值将由单个 值组成。
因此,rangle 属性 显然在您的示例中包含由 4 个值组成的“三元组”,前两个为 ,下一个为 ,最后一个是 .

reg 属性 应该是一对

值。
由于 external-bus #address-cells 属性 指定(and/or 默认值为 2)
值将由 two values ,并且 #size-cells 属性 指定 值将由单个 值组成, reg 属性 将在您的示例中由一个由 3 个值组成的“对”组成,前两个为
,最后一个为


注意DT规范要求reg属性中的

必须匹配节点名中的“@”。 中额外的“,0”就是你猜的,每个reg.

的后半部分

所以你的问题的答案是,它与筹码select值有关。
但是,设备节点中的显着链接 "mechanism" 不是引用节点名称中的 而是 reg 中的

属性.