设备树访问者负责将设备树数据转换为驱动程序专用元数据和绑定规则。它们会针对特定的设备树绑定解析相关的设备树节点,并生成驱动程序元数据和驱动程序框架节点属性。Devicetree 访问器对象会实现 driver-visitor.h
头文件中的接口,并且所有 Visitor::Visit
调用都会在 devicetree 管理器的 Walk
调用期间调用。
访问者类型
devicetree 访问者有两种:默认访问者和驱动程序访问者。
默认访问者
默认访问者适用于设备树规范中作为标准属性提及的属性或绑定规则。此外,还有一些访问者是针对 Fuchsia 平台中通用的属性(即 fuchsia_hardware_platform_bus::Node
协议中明确提及的属性)。这些访问者被视为 Fuchsia 的默认访问者,也会被添加到默认访问者集中。
司机访问者
驱动程序访问者对应于驱动程序专用元数据或依赖项。这些访问者使用 devicetree_visitor
GN 目标构建为共享库。创建访问者的共享库有助于 Fuchsia 保持访问者列表的动态,也就是说,可以在开发板驱动程序中添加和移除访问者,而无需重新编译。这也有助于 Fuchsia 更新和贡献独立于开发板驱动程序的访问者。
编写新的访问者
创建新的设备树绑定时,需要使用新的访问者。通常,创建新的设备树绑定是因为引入了新元数据,或者需要通过板级驱动程序创建复合节点。
您可以从以下 fx
命令开始编写新访问者:
fx create devicetree visitor --lang cpp --path <VISITOR_PATH>
所有访问者都必须包含一个表示要解析的绑定的设备树架构文件(例如,请参阅 smc.yaml
)。如需查看完整的设备树访问者示例,请参阅 example-visitor
目录。
辅助程序库
以下辅助库可用于编写新的访问者:
- 驱动程序访问者:此库提供了一个构造函数,用于接受兼容字符串列表,并且仅在找到具有匹配的兼容字符串的节点时调用访问者。
- 属性解析器:此库提供了一个解析器对象,可配置为解析节点的所有相关属性。它还降低了解析 phandle(指针句柄)引用所涉及的一些复杂性。
- 多访问者:用于将多个访问者合并到一个可传递给设备树管理器的
Walk
调用的对象中。 - 加载访问者:开发板驱动程序可以使用此方法加载与驱动程序一起打包在其
/lib/visitors
文件夹中的共享库访问者。
测试访问者
您可以使用 visitor-test-helper
库创建访问者集成测试,以测试访问者解析和创建元数据以及绑定规则的情况。该帮助程序库会创建一个设备树管理器实例以及用于平台总线协议的虚构实例。在测试辅助程序的初始化期间,系统会传递包含访问者测试节点的 DTB。由访问者设置的所有属性(即元数据和属性或绑定规则)均由测试帮助程序记录,可用于验证访问者的行为。