fuchsia.driver.framework

添加数量:13

协议

CompositeNodeManager

fuchsia.driver.framework/composite_node_spec.fidl 中定义

开发板驱动程序可通过其创建复合节点规范的协议。

复合节点规范是在运行时创建的,目的是将复合驱动程序的静态绑定规则与系统中节点的动态绑定属性动态桥接,使驱动程序绑定规则更具通用性和可重用性。

AddSpec

将指定的复合节点规范添加到驱动程序框架。

请求

名称类型
payload CompositeNodeSpec

响应

名称类型
payload CompositeNodeManager_AddSpec_Result

驱动程序

fuchsia.driver.framework/driver.fidl 中定义

驱动程序框架的驱动程序主机使用此协议向驱动程序传达各种消息和生命周期钩子。此协议的连接通过 driver_symbols 库中定义的 |DriverRegistration| 建立。

驱动程序关闭其服务器端后,驱动程序框架将启动属于此驱动程序的所有调度程序的关闭。

添加数量:15

开始

启动具有指定 |start_args| 的驱动程序。

驱动程序应先完成初始设置和枚举,然后再从 |Start| 返回。具体而言,它们应该利用 fuchsia.driver.framework/Node.AddChild 并等待所有调用完成,枚举所有当前可用的节点。

在此调用成功返回之前,框架不会认为驱动程序已启动。因此,在驱动程序成功回复 |Start| 之前,驱动程序不会对其调用 |Stop|。

如果驱动程序返回错误,则在驱动程序框架启动关闭驱动程序调度程序之前,不会对其调用 |Stop|。因此,在返回错误之前,它应该执行了所有必要的清理。

请求

名称类型
start_args DriverStartArgs

响应

名称类型
payload Driver_Start_Result

停止

停止驱动程序。如需停止运行,驱动程序应移除在 |Start| 中或之后设置的任何资源。这是一种单向 FIDL 方法。当驱动程序完成停止时,应关闭其服务器端。异步操作应在关闭服务器端之前完全完成。

请求

<EMPTY>

节点

fuchsia.driver.framework/topology.fidl 中定义

驱动程序管理其绑定到的节点所用的协议。 驱动程序应保持其客户端与节点的连接。在驱动程序运行期间断开客户端连接会导致驱动程序框架从拓扑中移除驱动程序和节点。如果驱动程序在其组件清单中将 host_restart_on_crash 设置为“true”,则断开连接将启动驱动程序主机和驱动程序的重启。

AddChild

向此节点添加子节点。

如果存在 node,则此驱动程序负责绑定到新创建的子项。否则,驱动程序框架将找到要将子项绑定到的相应驱动程序。

请求

名称类型
args NodeAddArgs
controller server_end<NodeController>
node server_end<Node>?

响应

名称类型
payload Node_AddChild_Result

NodeController

fuchsia.driver.framework/topology.fidl 中定义

父节点用来控制其子节点的协议。

OnBind

在关联的 Node 绑定到驱动程序时触发的事件。

响应

<EMPTY>

移除

移除该节点及其所有子节点。

请求

<EMPTY>

RequestBind

框架尝试将驱动程序绑定到此节点的请求。 这是额外的绑定请求,因为在创建节点后,框架会尝试绑定某个节点。

  • 如果节点已绑定且 force_rebind 为 false,则会收到 ZX_ERR_ALREADY_BOUND 错误。
  • 如果节点有未完成的 |RequestBind| 调用尚未完成,则抛出 ZX_ERR_ALREADY_EXISTS

请求

名称类型
payload NodeControllerRequestBindRequest

响应

名称类型
payload NodeController_RequestBind_Result

结构

BindRule

fuchsia.driver.framework/composite_node_spec.fidl 中定义

表示父规范中的绑定规则。

野战类型说明默认
key NodePropertyKey

属性键。

无默认取景方式
condition Condition

用于在匹配过程中评估属性值的条件。值必须为 ACCEPT 或 REJECT。

无默认取景方式
values vector<NodePropertyValue>[64]

属性值列表。不能为空。属性值必须属于同一类型。

无默认取景方式

CompositeNodeManager_AddSpec_Response

fuchsia.driver.framework/composite_node_spec.fidl 中定义

<EMPTY>

Driver_Start_Response

fuchsia.driver.framework/driver.fidl 中定义

<EMPTY>

NodeController_RequestBind_Response

fuchsia.driver.framework/topology.fidl 中定义

<EMPTY>

NodeProperty

fuchsia.driver.framework/topology.fidl 中定义

节点属性的定义。属性通常用于将节点与驱动程序相匹配,以便绑定驱动程序。

野战类型说明默认
key NodePropertyKey

属性的键。

无默认取景方式
value NodePropertyValue

属性的值。

无默认取景方式

NodePropertyEntry

fuchsia.driver.framework/driver_start_args.fidl 中定义

包含属于某个节点的节点属性。

添加数量:19

野战类型说明默认
name NodeName

具有 |node_properties| 的节点的名称。

无默认取景方式
properties NodePropertyVector

属于名称为 |node_name| 的节点的节点属性。如果该节点是复合节点,则 |properties| 为空,不包含其父级的属性。

无默认取景方式

Node_AddChild_Response

fuchsia.driver.framework/topology.fidl 中定义

<EMPTY>

ParentSpec

fuchsia.driver.framework/composite_node_spec.fidl 中定义

一个节点的规范,它作为根据复合节点规范创建的复合节点的父节点。

野战类型说明默认
bind_rules vector<BindRule>[64]

父级的绑定规则。属性键必须是唯一的。不能为空。

无默认取景方式
properties vector<NodeProperty>[64]

用于与复合驱动程序的绑定规则匹配的属性。键必须是唯一的。

无默认取景方式

枚举

CompositeNodeSpecError灵活

类型:uint32

fuchsia.driver.framework/composite_node_spec.fidl 中定义

CompositeNodeManager 协议的错误代码。

名称说明
1

未提供复合节点规范的参数。

2

给定复合节点规范的 nodes 为空。

3

给定复合节点规范中的 name 与已创建的复合节点规范重复。

条件严格

类型:uint32

fuchsia.driver.framework/composite_node_spec.fidl 中定义

表示绑定规则条件。

名称说明
0
1
2

DriverPackageType 灵活

类型:uint8

fuchsia.driver.framework/driver_info.fidl 中定义

驱动程序组件所在的 Fuchsia 软件包的类型。如需详细了解各种软件包类别,请访问: https://fuchsia.dev/fuchsia-src/concepts/packages/package#types_of_packages

添加数量:16

名称说明
0

BOOT 软件包位于 Zircon 启动映像中。

1

BASE 软件包作为静态本地软件包包含在 Fuchsia build 中。

2

CACHED 软件包是基础软件包,如果有完整软件包解析器,可以在解析期间更新这些软件包。

3

只有在通过完整软件包解析器解析时,UNIVERSE 软件包才会安装到设备上。

NodeError柔性

类型:uint32

fuchsia.driver.framework/topology.fidl 中定义

Node 协议的错误代码。

名称说明
1
2
3
4

节点名称无效。具体来说,它的名称中不得包含句点。

5

存在同名的同级节点。

6

此节点的优惠缺少来源名称。

7

此节点的优惠不应有来源或目标。

8

此节点的符号缺少名称。

9

此节点的符号缺少地址。

10

此节点还有另一个同名符号。

11

该节点正在解除其所有子节点的绑定。

添加数量:20

CompositeDriverInfo

fuchsia.driver.framework/driver_info.fidl 中定义

复合驱动程序的信息。

添加数量:16

序数野战类型说明
composite_name string

驱动程序的复合绑定规则中指定的复合名称。

driver_info DriverInfo

驱动程序的一般信息。

CompositeDriverMatch

fuchsia.driver.framework/driver_info.fidl 中定义

与复合驱动程序匹配的复合驱动程序的信息。

添加数量:16

序数野战类型说明
composite_driver CompositeDriverInfo

匹配的复合驱动程序的信息。

parent_names vector<string>

所有父项名称的列表,按索引排序。这些名称来自驱动程序的复合绑定规则中的节点定义。

primary_parent_index uint32

主节点索引。由驱动程序的复合绑定规则中的主节点标识。

CompositeInfo

fuchsia.driver.framework/driver_info.fidl 中定义

由复合节点规范定义的复合信息。

添加数量:16

序数野战类型说明
spec CompositeNodeSpec

创建此复合节点规范时使用的规范信息。

matched_driver CompositeDriverMatch

仅当驱动程序与此规范的父级中的属性匹配时才提供的节点规范信息。

CompositeNodeSpec

fuchsia.driver.framework/composite_node_spec.fidl 中定义

表示复合节点规范的结构体。

序数野战类型说明
name string

复合节点规范的名称。

parents vector<ParentSpec>

复合节点规范中的节点。不能为空。第一个节点是主节点。

CompositeParent

fuchsia.driver.framework/driver_info.fidl 中定义

由复合节点规范定义的复合的父元素。

添加数量:16

序数野战类型说明
composite CompositeInfo

有关其父级的复合的信息。

index uint32

此父项在规范父项中的索引。

DevfsAddArgs 资源

fuchsia.driver.framework/topology.fidl 中定义

序数野战类型说明
connector fuchsia.device.fs/Connector

这是要在 devfs 中安装的连接器。 当客户端连接到文件系统中的此节点时,系统会调用 Connect()。可选:如果未提供该 ID,则 devfs 中会出现一个空节点。

class_name string[255]

这是用于在 devfs 中安装此节点的类名称。节点将位于 /dev/class/{class_name} 中。 如果 /dev/class/ 下不存在 class_name,则会创建它。可选:如果未提供该节点,将仅通过拓扑路径添加节点。

inspect handle<vmo>

这是将安装在 devfs 中的检查数据的 vmo。 可选:如果未提供该 ID,则 devfs 的检查数据将为空。

connector_supports fuchsia.device.fs/ConnectionType

给定的 |连接器| 支持的连接类型。 驱动程序框架应处理连接器不支持的连接类型。如果未提供,则系统仅会假定连接器支持的设备类型。

添加数量:16
controller_connector fuchsia.device.fs/Connector

这是要安装在 devfs 中的控制器连接器。当客户端连接到文件系统中此节点的 device_controller 连接时,系统会调用 Connect()。可选:如果未提供该 ID,则节点将以原生方式处理连接。 此选项只能由 compat 填充码或在测试中使用

添加了:HEAD

DeviceCategory

fuchsia.driver.framework/driver_info.fidl 中定义

驱动程序组件清单中提供的设备类别。

添加数量:16

序数野战类型说明
category string
subcategory string

DriverInfo

fuchsia.driver.framework/driver_info.fidl 中定义

驱动程序的常规信息,与复合驱动程序和常规驱动程序一起使用。

添加数量:16

序数野战类型说明
url string[4096]

驱动程序组件的网址。

name string

驱动程序的名称,从驱动程序中的 ZIRCON_DRIVER 宏的第一个字段获取。

colocate bool

如果为 true,则驱动程序应共置于其父级的 DriverHost。

package_type DriverPackageType

此驱动程序所在的软件包类型。

is_fallback bool

如果此值为 true,则此驱动程序为后备驱动程序。回退驱动程序的绑定优先级较低,因此只有在没有匹配的非回退驱动程序的情况下,才会选择绑定这些驱动程序。

device_categories vector<DeviceCategory>

设备类别

bind_rules_bytecode vector<uint8>

绑定规则,这些规则声明了要评估的一组约束条件,以便确定驱动程序索引器是否应将此驱动程序绑定到设备。

driver_framework_version uint8

此驱动程序正在使用的驱动程序框架的版本。 支持的值包括 1 (DFv1) 和 2 (DFv2)。 如果未提供,则 1 是假定的版本。

is_disabled bool

驱动程序是否已停用。如果为 true,则不会选择此驱动程序绑定到节点。

添加数量:17

DriverStartArgs 资源

fuchsia.driver.framework/driver_start_args.fidl 中定义

用于启动驱动程序的参数。

序数野战类型说明
node Node

驱动程序绑定到的节点。

symbols vector<NodeSymbol>[64]

提供给驱动程序的符号,用于 |node|。这些符号来自添加 |node| 的驱动程序,并会根据绑定程序中请求的符号进行过滤。

url fuchsia.url/Url

包含驱动程序的软件包的网址。这些信息仅供参考,仅用于提供要检查的数据。

program fuchsia.data/Dictionary

要启动的驱动程序的相关信息。目前,我们支持以下条目:

  1. “binary”:包含驱动程序二进制文件的软件包相对路径的字符串。
  2. “colocate”(可选):包含“true”或“false”的字符串,指定驱动程序是否应与添加 |node| 的驱动程序共置于同一驱动程序主机中。如果未指定,驱动程序将在新的驱动程序主机中启动。
  3. “default_dispatcher_opts”(可选):一个字符串数组,用于指定用于创建默认调度程序的选项。字符串可以是以下项之一:
    • allow_sync_calls:允许在默认调度程序的线程上完成同步调用。
  4. “default_dispatcher_scheduler_role”(可选):要为为驱动程序创建的默认调度程序设置的调度器角色。
incoming vector<fuchsia.component.runner/ComponentNamespaceEntry>[32]

向驱动程序提供的传入命名空间。

outgoing_dir server_end<fuchsia.io/Directory>

驱动程序提供的传出目录。

config handle<vmo>

传递给驱动程序的配置。

node_name string

驱动程序绑定到的节点的名称。

node_properties NodePropertyDictionary

驱动程序绑定到的节点的节点属性。如果节点是非复合节点,则“default”条目将包含节点自己的属性。如果节点是复合节点,则其每个父节点都有一个条目,并且“默认”条目将引用主要复合父节点的属性。

添加数量:19

NodeAddArgs 资源

fuchsia.driver.framework/topology.fidl 中定义

用于添加节点的参数。

序数野战类型说明
name NodeName

节点名称。

offers vector<fuchsia.component.decl/Offer>[128]

向绑定到此节点的驱动程序提供的功能。 在添加子节点之前,驱动程序必须确保将这些功能添加到其传出目录。

已移除:19 已弃用:18
symbols vector<NodeSymbol>[64]

提供给绑定到此节点的驱动程序的函数。

properties NodePropertyVector

节点的属性。

devfs_args DevfsAddArgs

关于如何将此节点添加到 devfs 的参数。

offers2 vector<Offer>[128]

向绑定到此节点的驱动程序提供的功能。 在添加子节点之前,驱动程序必须确保将这些功能添加到其传出目录。

添加日期:18

NodeControllerRequestBindRequest

fuchsia.driver.framework/topology.fidl 中定义

序数野战类型说明
force_rebind bool

如果此值为 true,则节点会在尝试通过常规绑定进程进行绑定之前,与匹配的驱动程序取消绑定。

driver_url_suffix string

如果设置了此属性,则在绑定时,仅会考虑与此网址后缀匹配的驱动程序。 例如:“gpt.cm”“meta/gpt.cm”“fuchsia-boot:///#meta/gpt.cm”。

NodeSymbol

fuchsia.driver.framework/topology.fidl 中定义

由驱动程序为节点提供的符号的定义。符号是驱动程序主机的本地符号。

序数野战类型说明
name string[128]

符号的名称。

address uint64

驱动程序主机进程中的符号的虚拟地址。

联合

CompositeNodeManager_AddSpec_Result strict

fuchsia.driver.framework/composite_node_spec.fidl 中定义

序数变体类型说明
response CompositeNodeManager_AddSpec_Response
err CompositeNodeSpecError
framework_err internal

Driver_Start_Result 严格

fuchsia.driver.framework/driver.fidl 中定义

序数变体类型说明
response Driver_Start_Response
err zx/Status
framework_err internal

NodeController_RequestBind_Result 严格

fuchsia.driver.framework/topology.fidl 中定义

序数变体类型说明
response NodeController_RequestBind_Response
err zx/Status
framework_err internal

NodePropertyKey 严格

fuchsia.driver.framework/topology.fidl 中定义

序数变体类型说明
int_value NodePropertyKeyUint
string_value NodePropertyKeyString

NodePropertyValue 灵活

fuchsia.driver.framework/topology.fidl 中定义

序数变体类型说明
int_value NodePropertyValueUint
string_value NodePropertyValueString
bool_value NodePropertyValueBool
enum_value NodePropertyValueEnum

Node_AddChild_Result 严格

fuchsia.driver.framework/topology.fidl 中定义

序数变体类型说明
response Node_AddChild_Response
err NodeError
framework_err internal

优惠灵活

fuchsia.driver.framework/topology.fidl 中定义

添加日期:18
序数变体类型说明
zircon_transport fuchsia.component.decl/Offer
driver_transport fuchsia.component.decl/Offer

常量

名称类型说明
MAX_NAMESPACE_COUNT fuchsia.component.runner/MAX_NAMESPACE_COUNT uint32
MAX_NODE_NAME_LENGTH 128 uint8
MAX_OFFER_COUNT fuchsia.component/MAX_DYNAMIC_OFFER_COUNT uint32
MAX_PROPERTY_COUNT 64 uint8
MAX_RESOURCE_NAME_LENGTH 128 uint8
添加日期:18
MAX_SYMBOL_COUNT 64 uint8
MAX_SYMBOL_NAME_LENGTH 128 uint8

别名

名称说明
NodeName string[MAX_NODE_NAME_LENGTH]
NodePropertyDictionary vector[fidl/MAX]
添加数量:19
NodePropertyKeyString string[256]
NodePropertyKeyUint uint32
NodePropertyValueBool bool
NodePropertyValueEnum string[256]
NodePropertyValueString string[256]
NodePropertyValueUint uint32
NodePropertyVector vector[MAX_PROPERTY_COUNT]