设备树动态解析器说明

本文档描述了内核内设备树解析器的实现,该解析器位于 drivers/of/resolver.c 中。

解析器的工作原理

解析器接收一棵使用正确 dtc 选项编译并带有 /plugin/ 标签的任意树作为输入。这会生成相应的 __fixups__ 和 __local_fixups__ 节点。

解析器按以下步骤顺序工作

  1. 从活动树中获取最大的设备树 phandle 值加 1。

  2. 调整树中的所有本地 phandle,根据该数值进行调整。

  3. 使用 __local_fixups__ 节点信息,将所有本地引用调整相同的数值。

  4. 对于 __fixups__ 节点中的每个属性,在活动树中定位其引用的节点。这是用于标记该节点的标签。

  5. 检索修复目标的 phandle。

  6. 对于属性中的每个修复,定位 node:property:offset 位置并将其替换为 phandle 值。