协议
CompositeNodeManager
在 fuchsia.driver.framework/composite_node_spec.fidl 中定义
开发板驱动程序可通过其创建复合节点规范的协议。
复合节点规范是在运行时创建的,目的是将复合驱动程序的静态绑定规则与系统中节点的动态绑定属性动态桥接,使驱动程序绑定规则更具通用性和可重用性。
AddSpec
将指定的复合节点规范添加到驱动程序框架。
请求
名称 | 类型 |
---|---|
payload |
CompositeNodeSpec
|
响应
名称 | 类型 |
---|---|
payload |
CompositeNodeManager_AddSpec_Result
|
驱动程序
在 fuchsia.driver.framework/driver.fidl 中定义
驱动程序框架的驱动程序主机使用此协议向驱动程序传达各种消息和生命周期钩子。此协议的连接通过 driver_symbols
库中定义的 |DriverRegistration| 建立。
驱动程序关闭其服务器端后,驱动程序框架将启动属于此驱动程序的所有调度程序的关闭。
开始
启动具有指定 |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 中定义
包含属于某个节点的节点属性。
野战 | 类型 | 说明 | 默认 |
---|---|---|---|
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 协议的错误代码。
名称 | 值 | 说明 |
---|---|---|
MISSING_ARGS |
1 |
未提供复合节点规范的参数。 |
EMPTY_NODES |
2 |
给定复合节点规范的 |
ALREADY_EXISTS |
3 |
给定复合节点规范中的 |
条件严格
类型:uint32
在 fuchsia.driver.framework/composite_node_spec.fidl 中定义
表示绑定规则条件。
名称 | 值 | 说明 |
---|---|---|
未知 |
0 |
|
接受 |
1 |
|
REJECT |
2 |
DriverPackageType 灵活
类型:uint8
在 fuchsia.driver.framework/driver_info.fidl 中定义
驱动程序组件所在的 Fuchsia 软件包的类型。如需详细了解各种软件包类别,请访问: https://fuchsia.dev/fuchsia-src/concepts/packages/package#types_of_packages
名称 | 值 | 说明 |
---|---|---|
BOOT |
0 |
BOOT 软件包位于 Zircon 启动映像中。 |
BASE |
1 |
BASE 软件包作为静态本地软件包包含在 Fuchsia build 中。 |
已缓存 |
2 |
CACHED 软件包是基础软件包,如果有完整软件包解析器,可以在解析期间更新这些软件包。 |
统一 |
3 |
只有在通过完整软件包解析器解析时,UNIVERSE 软件包才会安装到设备上。 |
NodeError柔性
类型:uint32
在 fuchsia.driver.framework/topology.fidl 中定义
Node 协议的错误代码。
名称 | 值 | 说明 |
---|---|---|
内部 |
1 |
|
NODE_REMOVED |
2 |
|
NAME_MISSING |
3 |
|
NAME_INVALID |
4 |
节点名称无效。具体来说,它的名称中不得包含句点。 |
NAME_ALREADY_EXISTS |
5 |
存在同名的同级节点。 |
OFFER_SOURCE_NAME_MISSING |
6 |
此节点的优惠缺少来源名称。 |
OFFER_REF_EXISTS |
7 |
此节点的优惠不应有来源或目标。 |
SYMBOL_NAME_MISSING |
8 |
此节点的符号缺少名称。 |
SYMBOL_ADDRESS_MISSING |
9 |
此节点的符号缺少地址。 |
SYMBOL_ALREADY_EXISTS |
10 |
此节点还有另一个同名符号。 |
UNBIND_CHILDREN_IN_PROGRESS |
11 |
该节点正在解除其所有子节点的绑定。 添加数量:20
|
表
CompositeDriverInfo
在 fuchsia.driver.framework/driver_info.fidl 中定义
复合驱动程序的信息。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
composite_name |
string
|
驱动程序的复合绑定规则中指定的复合名称。 |
2 |
driver_info |
DriverInfo
|
驱动程序的一般信息。 |
CompositeDriverMatch
在 fuchsia.driver.framework/driver_info.fidl 中定义
与复合驱动程序匹配的复合驱动程序的信息。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
composite_driver |
CompositeDriverInfo
|
匹配的复合驱动程序的信息。 |
2 |
parent_names |
vector<string>
|
所有父项名称的列表,按索引排序。这些名称来自驱动程序的复合绑定规则中的节点定义。 |
3 |
primary_parent_index |
uint32
|
主节点索引。由驱动程序的复合绑定规则中的主节点标识。 |
CompositeInfo
在 fuchsia.driver.framework/driver_info.fidl 中定义
由复合节点规范定义的复合信息。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
spec |
CompositeNodeSpec
|
创建此复合节点规范时使用的规范信息。 |
2 |
matched_driver |
CompositeDriverMatch
|
仅当驱动程序与此规范的父级中的属性匹配时才提供的节点规范信息。 |
CompositeNodeSpec
在 fuchsia.driver.framework/composite_node_spec.fidl 中定义
表示复合节点规范的结构体。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
name |
string
|
复合节点规范的名称。 |
2 |
parents |
vector<ParentSpec>
|
复合节点规范中的节点。不能为空。第一个节点是主节点。 |
CompositeParent
在 fuchsia.driver.framework/driver_info.fidl 中定义
由复合节点规范定义的复合的父元素。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
composite |
CompositeInfo
|
有关其父级的复合的信息。 |
2 |
index |
uint32
|
此父项在规范父项中的索引。 |
DevfsAddArgs 资源
在 fuchsia.driver.framework/topology.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
connector |
fuchsia.device.fs/Connector
|
这是要在 devfs 中安装的连接器。
当客户端连接到文件系统中的此节点时,系统会调用 |
2 |
class_name |
string[255]
|
这是用于在 devfs 中安装此节点的类名称。节点将位于 /dev/class/{class_name} 中。
如果 /dev/class/ 下不存在 |
3 |
inspect |
handle<vmo>
|
这是将安装在 devfs 中的检查数据的 vmo。 可选:如果未提供该 ID,则 devfs 的检查数据将为空。 |
4 |
connector_supports |
fuchsia.device.fs/ConnectionType
|
给定的 |连接器| 支持的连接类型。 驱动程序框架应处理连接器不支持的连接类型。如果未提供,则系统仅会假定连接器支持的设备类型。 添加数量:16
|
5 |
controller_connector |
fuchsia.device.fs/Connector
|
这是要安装在 devfs 中的控制器连接器。当客户端连接到文件系统中此节点的 device_controller 连接时,系统会调用 添加了:HEAD
|
DeviceCategory
在 fuchsia.driver.framework/driver_info.fidl 中定义
驱动程序组件清单中提供的设备类别。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
category |
string
|
|
2 |
subcategory |
string
|
DriverInfo
在 fuchsia.driver.framework/driver_info.fidl 中定义
驱动程序的常规信息,与复合驱动程序和常规驱动程序一起使用。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
url |
string[4096]
|
驱动程序组件的网址。 |
2 |
name |
string
|
驱动程序的名称,从驱动程序中的 |
3 |
colocate |
bool
|
如果为 true,则驱动程序应共置于其父级的 DriverHost。 |
4 |
package_type |
DriverPackageType
|
此驱动程序所在的软件包类型。 |
5 |
is_fallback |
bool
|
如果此值为 true,则此驱动程序为后备驱动程序。回退驱动程序的绑定优先级较低,因此只有在没有匹配的非回退驱动程序的情况下,才会选择绑定这些驱动程序。 |
6 |
device_categories |
vector<DeviceCategory>
|
设备类别 |
7 |
bind_rules_bytecode |
vector<uint8>
|
绑定规则,这些规则声明了要评估的一组约束条件,以便确定驱动程序索引器是否应将此驱动程序绑定到设备。 |
8 |
driver_framework_version |
uint8
|
此驱动程序正在使用的驱动程序框架的版本。 支持的值包括 1 (DFv1) 和 2 (DFv2)。 如果未提供,则 1 是假定的版本。 |
9 |
is_disabled |
bool
|
驱动程序是否已停用。如果为 true,则不会选择此驱动程序绑定到节点。 添加数量:17
|
DriverStartArgs 资源
在 fuchsia.driver.framework/driver_start_args.fidl 中定义
用于启动驱动程序的参数。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
node |
Node
|
驱动程序绑定到的节点。 |
2 |
symbols |
vector<NodeSymbol>[64]
|
提供给驱动程序的符号,用于 |node|。这些符号来自添加 |node| 的驱动程序,并会根据绑定程序中请求的符号进行过滤。 |
3 |
url |
fuchsia.url/Url
|
包含驱动程序的软件包的网址。这些信息仅供参考,仅用于提供要检查的数据。 |
4 |
program |
fuchsia.data/Dictionary
|
要启动的驱动程序的相关信息。目前,我们支持以下条目:
|
5 |
incoming |
vector<fuchsia.component.runner/ComponentNamespaceEntry>[32]
|
向驱动程序提供的传入命名空间。 |
6 |
outgoing_dir |
server_end<fuchsia.io/Directory>
|
驱动程序提供的传出目录。 |
7 |
config |
handle<vmo>
|
传递给驱动程序的配置。 |
8 |
node_name |
string
|
驱动程序绑定到的节点的名称。 |
9 |
node_properties |
NodePropertyDictionary
|
驱动程序绑定到的节点的节点属性。如果节点是非复合节点,则“default”条目将包含节点自己的属性。如果节点是复合节点,则其每个父节点都有一个条目,并且“默认”条目将引用主要复合父节点的属性。 添加数量:19
|
NodeAddArgs 资源
在 fuchsia.driver.framework/topology.fidl 中定义
用于添加节点的参数。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
name |
NodeName
|
节点名称。 |
2 |
offers |
vector<fuchsia.component.decl/Offer>[128]
|
向绑定到此节点的驱动程序提供的功能。 在添加子节点之前,驱动程序必须确保将这些功能添加到其传出目录。 已移除:19 已弃用:18
|
3 |
symbols |
vector<NodeSymbol>[64]
|
提供给绑定到此节点的驱动程序的函数。 |
4 |
properties |
NodePropertyVector
|
节点的属性。 |
5 |
devfs_args |
DevfsAddArgs
|
关于如何将此节点添加到 devfs 的参数。 |
6 |
offers2 |
vector<Offer>[128]
|
向绑定到此节点的驱动程序提供的功能。 在添加子节点之前,驱动程序必须确保将这些功能添加到其传出目录。 添加日期:18
|
NodeControllerRequestBindRequest
在 fuchsia.driver.framework/topology.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
force_rebind |
bool
|
如果此值为 true,则节点会在尝试通过常规绑定进程进行绑定之前,与匹配的驱动程序取消绑定。 |
2 |
driver_url_suffix |
string
|
如果设置了此属性,则在绑定时,仅会考虑与此网址后缀匹配的驱动程序。 例如:“gpt.cm”“meta/gpt.cm”“fuchsia-boot:///#meta/gpt.cm”。 |
NodeSymbol
在 fuchsia.driver.framework/topology.fidl 中定义
由驱动程序为节点提供的符号的定义。符号是驱动程序主机的本地符号。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
name |
string[128]
|
符号的名称。 |
2 |
address |
uint64
|
驱动程序主机进程中的符号的虚拟地址。 |
联合
CompositeNodeManager_AddSpec_Result strict
在 fuchsia.driver.framework/composite_node_spec.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
CompositeNodeManager_AddSpec_Response
|
|
2 |
err |
CompositeNodeSpecError
|
|
3 |
framework_err |
internal
|
Driver_Start_Result 严格
在 fuchsia.driver.framework/driver.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Driver_Start_Response
|
|
2 |
err |
zx/Status
|
|
3 |
framework_err |
internal
|
NodeController_RequestBind_Result 严格
在 fuchsia.driver.framework/topology.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
NodeController_RequestBind_Response
|
|
2 |
err |
zx/Status
|
|
3 |
framework_err |
internal
|
NodePropertyKey 严格
在 fuchsia.driver.framework/topology.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
int_value |
NodePropertyKeyUint
|
|
2 |
string_value |
NodePropertyKeyString
|
NodePropertyValue 灵活
在 fuchsia.driver.framework/topology.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
int_value |
NodePropertyValueUint
|
|
2 |
string_value |
NodePropertyValueString
|
|
3 |
bool_value |
NodePropertyValueBool
|
|
4 |
enum_value |
NodePropertyValueEnum
|
Node_AddChild_Result 严格
在 fuchsia.driver.framework/topology.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Node_AddChild_Response
|
|
2 |
err |
NodeError
|
|
3 |
framework_err |
internal
|
优惠灵活
在 fuchsia.driver.framework/topology.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
zircon_transport |
fuchsia.component.decl/Offer
|
|
2 |
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 ] |