协议
Binder
在 fuchsia.component/binder.fidl 中定义
框架提供的协议,允许使用该协议的组件绑定到提供该协议的组件。连接到此协议的操作将触发绑定。因此,此协议不包含任何方法。如需详细了解绑定,请参阅 https://fuchsia.dev/fuchsia-src/concepts/components/v2/lifecycle#binding。
当组件连接到协议时,公开此功能的组件会启动(如果它尚未运行)。启动失败后,组件框架将以 zx.Status epitaph 的形式关闭通道的服务器端。
注意:该组件不需要提供此协议,是由框架实现的。
ChildIterator
在 fuchsia.component/realm.fidl 中定义
用于遍历某个领域的子项列表的协议。
继续
让迭代器进入下个状态,返回下一批子项。
返回 ChildRef
的矢量。如果没有更多子向量,则返回空向量。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
children |
vector<fuchsia.component.decl/ChildRef>[128]
|
控制器
在 fuchsia.component/controller.fidl 中定义
GetExposedDictionary
返回包含组件公开功能的字典。
请求
名称 | 类型 |
---|---|
dictionary |
server_end<fuchsia.component.sandbox/Dictionary>
|
响应
名称 | 类型 |
---|---|
payload |
Controller_GetExposedDictionary_Result
|
IsStarted
如果此实例当前正在运行,则返回 true。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
payload |
Controller_IsStarted_Result
|
开始
启动组件,可以选择提供要提供给组件的其他句柄。如果实例当前正在运行,则返回 INSTANCE_ALREADY_RUNNING。
请求
名称 | 类型 |
---|---|
args |
StartChildArgs
|
execution_controller |
server_end<ExecutionController>
|
响应
名称 | 类型 |
---|---|
payload |
Controller_Start_Result
|
EventStream
在 fuchsia.component/events.fidl 中定义
组件层次结构上事件的监听器。
GetNext
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
events |
vector<Event>
|
WaitForReady
立即退货。用于指示 FIDL 连接已完成。非静态流需要此权限才能在组件启动之前验证订阅是否已完成。
请求
<EMPTY>
响应
<EMPTY>
ExecutionController
在 fuchsia.component/controller.fidl 中定义
OnStop
当子项因调用 Stop
而停止时,子项自行退出或因任何其他原因而被调用 OnStop
,然后此通道会被关闭。
响应
名称 | 类型 |
---|---|
stopped_payload |
StoppedPayload
|
停止
启动该组件的停止操作。完成后,将使用已停止的载荷调用 OnStop。
请注意,组件随时可能会自行停止运行,因此可能会在调用 Stop
之前收到 OnStop
。
请求
<EMPTY>
自省
在 fuchsia.component/introspector.fidl 中定义
一种协议,组件实例用来获取自身领域中组件的相关信息。
该协议目前仅支持获取名称,但可能会扩展为其他特权信息,例如组件的网址。
组件框架为使用框架中的 fuchsia.component.Introspector
的组件提供此功能。
GetMoniker
获取相对于与提供的词法单元对应的组件领域这一领域的名称。运行程序可以通过 fuchsia.component.runner/ComponentStartInfo.component_instance
获取令牌。
如果令牌无效,或者不对应于此领域下的组件,则返回 Error.INSTANCE_NOT_FOUND
。
请求
名称 | 类型 |
---|---|
component_instance |
handle<event>
|
响应
名称 | 类型 |
---|---|
payload |
Introspector_GetMoniker_Result
|
命名空间
在 fuchsia.component/namespace.fidl 中定义
用于执行命名空间操作的协议。
创建
请求
名称 | 类型 |
---|---|
entries |
vector<NamespaceInputEntry>
|
响应
名称 | 类型 |
---|---|
payload |
Namespace_Create_Result
|
领域
在 fuchsia.component/realm.fidl 中定义
组件实例用来管理自己的领域(例如用于绑定到其子项)的协议。
系统会按照接收顺序处理针对此协议的请求。希望并行发送请求的客户端应打开多个连接。
组件框架为使用 fuchsia.component.Realm
的组件提供此服务。
CreateChild
动态创建子组件实例。当此函数成功返回时,表示实例存在,但可能没有运行。
子实例的环境由集合的环境决定。decl
不得设置 environment
。
如果为 decl.startup == EAGER
或 collection.durability == SINGLE_RUN
,[CreateChild] 将启动组件,并在组件启动后返回。否则,[CreateChild] 将在创建组件后立即返回,而不会启动或解析该组件。
错误数:
INVALID_ARGUMENTS
:collection
不是有效的引用,或child
不是有效的声明。COLLECTION_NOT_FOUND
:collection
不存在。INSTANCE_ALREADY_EXISTS
:“collection
”中已存在“decl.name
”。INSTANCE_CANNOT_RESOLVE
:child
的组件声明在SingleRun
集合中无法解析。NO_SPACE
:无法为新实例分配存储空间。INSTANCE_DIED
:此领域已不存在。
请求
名称 | 类型 |
---|---|
collection |
fuchsia.component.decl/CollectionRef
|
decl |
fuchsia.component.decl/Child
|
args |
CreateChildArgs
|
响应
名称 | 类型 |
---|---|
payload |
Realm_CreateChild_Result
|
DestroyChild
销毁动态创建的组件实例。当此函数返回时,实例将被销毁并停止运行。不过,在此函数返回后,可能会在后台清理组件的资源(例如其隔离存储空间)。
错误数:
INVALID_ARGUMENTS
:child
不是有效的引用或未引用动态实例。INSTANCE_NOT_FOUND
:child
不存在。COLLECTION_NOT_FOUND
:collection
不存在。INSTANCE_DIED
:此领域已不存在。
请求
名称 | 类型 |
---|---|
child |
fuchsia.component.decl/ChildRef
|
响应
名称 | 类型 |
---|---|
payload |
Realm_DestroyChild_Result
|
ListChildren
返回列出集合中的所有实例的迭代器。
注意:结果不一定一致。实例可以在迭代器处于活动状态时创建或销毁,但在此方法返回后,迭代器不会观察到这些更改。
错误数:
INVALID_ARGUMENTS
:collection
不是有效的引用,或iter
没有ZX_RIGHT_WAIT
。COLLECTION_NOT_FOUND
:collection
不存在。INSTANCE_DIED
:此领域已不存在。- 如果
iter
没有标准频道权限,此函数可能会返回ACCESS_DENIED
,或者组件管理器可能会关闭iter
。
请求
名称 | 类型 |
---|---|
collection |
fuchsia.component.decl/CollectionRef
|
iter |
server_end<ChildIterator>
|
响应
名称 | 类型 |
---|---|
payload |
Realm_ListChildren_Result
|
OpenExposedDir
打开子组件实例的公开目录。当此函数成功返回时,exposed_dir
会绑定到一个目录,该目录包含子级通过 ComponentDecl.exposes
(通过组件清单中的“expose”声明指定)向其领域公开的功能。子组件不会因此调用而启动。相反,如果父项绑定到 exposed_dir
中包含的某个 capability,则会开始运行。
只要 child
存在,exposed_dir
就处于打开状态。
错误数:
INVALID_ARGUMENTS
:child
不是有效的子引用。INSTANCE_NOT_FOUND
:child
不存在。INSTANCE_CANNOT_RESOLVE
:无法解析child
的组件声明。INSTANCE_DIED
:此领域已不存在。
请求
名称 | 类型 |
---|---|
child |
fuchsia.component.decl/ChildRef
|
exposed_dir |
server_end<fuchsia.io/Directory>
|
响应
名称 | 类型 |
---|---|
payload |
Realm_OpenExposedDir_Result
|
结构
Controller_GetExposedDictionary_Response
在 fuchsia.component/controller.fidl 中定义
<EMPTY>
Controller_IsStarted_Response 资源
在 fuchsia.component/controller.fidl 中定义
野战 | 类型 | 说明 | 默认 |
---|---|---|---|
is_started |
bool
|
无默认取景方式 |
Controller_Start_Response
在 fuchsia.component/controller.fidl 中定义
<EMPTY>
Introspector_GetMoniker_Response
在 fuchsia.component/introspector.fidl 中定义
野战 | 类型 | 说明 | 默认 |
---|---|---|---|
moniker |
string[4096]
|
无默认取景方式 |
命名空间 InputEntry 资源
在 fuchsia.component/namespace.fidl 中定义
野战 | 类型 | 说明 | 默认 |
---|---|---|---|
path |
string[4095]
|
无默认取景方式 | |
dictionary |
fuchsia.component.sandbox/Dictionary
|
无默认取景方式 |
命名空间_Create_Response 资源
在 fuchsia.component/namespace.fidl 中定义
野战 | 类型 | 说明 | 默认 |
---|---|---|---|
entries |
vector<NamespaceEntry>
|
无默认取景方式 |
Realm_CreateChild_Response
在 fuchsia.component/realm.fidl 中定义
<EMPTY>
Realm_DestroyChild_Response
在 fuchsia.component/realm.fidl 中定义
<EMPTY>
Realm_ListChildren_Response
在 fuchsia.component/realm.fidl 中定义
<EMPTY>
Realm_OpenExposedDir_Response
在 fuchsia.component/realm.fidl 中定义
<EMPTY>
枚举
错误严格
类型:uint32
在 fuchsia.component/error.fidl 中定义
组件框架协议的标准错误代码。
名称 | 值 | 说明 |
---|---|---|
内部 |
1 |
组件管理器在执行操作时遇到其他未指定的错误。 |
INVALID_ARGUMENTS |
2 |
至少有一个参数的格式无效。 |
不支持 |
3 |
目前尚不支持此功能。 |
ACCESS_DENIED |
4 |
调用方无权执行指定操作,或为调用提供的某个句柄没有足够的权限。 |
INSTANCE_NOT_FOUND |
5 |
未找到组件实例。 |
INSTANCE_ALREADY_EXISTS |
6 |
组件实例已存在。 |
INSTANCE_CANNOT_START |
7 |
无法启动组件实例。 |
INSTANCE_CANNOT_RESOLVE |
8 |
无法解析组件的声明。 |
COLLECTION_NOT_FOUND |
9 |
未找到组件集合。 |
RESOURCE_UNAVAILABLE |
10 |
资源不足,无法执行此操作。 |
INSTANCE_DIED |
11 |
组件实例意外终止。 |
RESOURCE_NOT_FOUND |
12 |
请求的资源不存在。 |
INSTANCE_CANNOT_UNRESOLVE |
13 |
无法解析组件。 |
INSTANCE_ALREADY_STARTED |
14 |
组件实例已启动。 添加数量:14
|
事件类型 strict
类型:uint32
在 fuchsia.component/events.fidl 中定义
以下 EventType 用于 EventStream 协议。 它们是 hooks.rs 中 EventType 枚举的 FIDL 版本,具有相同含义。
名称 | 值 | 说明 |
---|---|---|
CAPABILITY_REQUESTED |
1 |
已请求此组件提供的功能。事件载荷带有请求渠道。 |
发现 |
3 |
发现了组件实例。这是组件生命周期的第一阶段。在创建动态子项时、在父项解析时为静态子项分派,在组件管理器启动时为根子项分派。 |
已销毁 |
4 |
该实例被销毁且不再存在。 |
已解决 |
5 |
实例的声明首次已成功解析。 |
已开始 |
6 |
根据组件管理器,此实例已启动。不过,如果这是一个可执行组件,则运行程序需要执行进一步操作才能启动该组件。 |
已停止 |
7 |
已成功停止实例。 |
DEBUG_STARTED |
8 |
与 STARTED 类似,不同之处在于载荷将携带订阅者可以使用的事件对来推迟组件的启动。例如,这允许调试程序在创建任何进程之前执行某些设置。 |
未解决 |
9 |
未成功解析实例。 |
命名空间错误灵活
类型:uint32
在 fuchsia.component/namespace.fidl 中定义
从命名空间中的方法返回的错误。
名称 | 值 | 说明 |
---|---|---|
阴影 |
1 |
父级的父级与另一个命名空间条目共用一个前缀 |
复制 |
2 |
两个条目具有相同的命名空间路径。 |
转化次数 |
3 |
未能将命名空间字典转换为目录。 |
BAD_ENTRY |
4 |
命名空间条目无效。 |
DICTIONARY_READ |
5 |
从其中一个字典读取时出错。 |
表
CapabilityRequestedPayload 资源
在 fuchsia.component/events.fidl 中定义
CapabilityRequested 事件的载荷
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
name |
name
|
功能的名称。 |
2 |
capability |
handle<channel>
|
通道服务器端的句柄,用于托管功能。 |
CreateChildArgs 资源
在 fuchsia.component/realm.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
numbered_handles |
vector<fuchsia.process/HandleInfo>[128]
|
要传递给组件实例的编号句柄。 如果该组件的运行程序不支持带编号的句柄,则应关闭句柄。 |
2 |
dynamic_offers |
vector<fuchsia.component.decl/Offer>[128]
|
将定位到组件实例的动态优惠。 在此向量中包含 任何类型的优惠(例如协议、目录)都可以作为动态优惠使用。对静态优惠有效的任何来源也对动态优惠有效。此外,与静态优惠不同,动态优惠可以将“同级”动态子组件用作来源,只需将来源设置为设置 动态优惠始终定位到新创建的子组件。因此, 如果动态优惠的来源(即 为了将此字段设置为非空值,创建子组件的集合必须指定 |
3 |
controller |
server_end<Controller>
|
此组件的控制器,可用于影响组件的生命周期。 添加数量:14
|
4 |
config_capabilities |
vector<fuchsia.component.decl/Configuration>[128]
|
将针对组件实例的配置功能。 在此列表中包含“配置”时,系统会将“配置功能”添加为当前领域的动态功能。此外,它还会为子项创建一个动态优惠。 创建的动态优惠从 如果新创建的子级被销毁,则配置功能及其生成的动态优惠都将被销毁。 为了将此字段设置为非空值,创建子组件的集合必须指定 添加了:HEAD
|
5 |
dictionary |
fuchsia.component.sandbox/Dictionary
|
包含组件实例额外功能的字典。 添加了:HEAD
|
DebugStartedPayload 资源
在 fuchsia.component/events.fidl 中定义
DebugStarted 事件的载荷。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
runtime_dir |
fuchsia.io/Directory
|
运行程序提供的目录,用于显示有关组件的运行时和运行程序专属信息。另一端则发送到 ComponentStartInfo 中的运行程序。例如,可以查询该组件是否为 ELF 组件,以及是否支持下面的 break_on_start 协议。 |
2 |
break_on_start |
handle<eventpair>
|
可供调试程序用于延迟组件启动的事件对,例如,ELF 调试程序可以在保存事件对的同时对作业设置异常渠道,然后丢弃事件对,以通知运行程序可以创建进程。另一端则发送到 ComponentStartInfo 中的运行程序。 |
DestroyedPayload
在 fuchsia.component/events.fidl 中定义
已销毁事件的载荷。
序数 | 野战 | 类型 | 说明 |
---|
DiscoveredPayload
在 fuchsia.component/events.fidl 中定义
已发现事件的载荷。
序数 | 野战 | 类型 | 说明 |
---|
事件资源
在 fuchsia.component/events.fidl 中定义
包含单个事件的所有相关信息
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
header |
EventHeader
|
与为其生成此事件的组件相关的信息。 |
2 |
payload |
EventPayload
|
某些事件类型的可选载荷 |
EventHeader
在 fuchsia.component/events.fidl 中定义
提供目标组件实例相关元数据的头部。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
event_type |
EventType
|
与事件对应的事件类型 |
2 |
moniker |
string[4096]
|
标识组件实例的相对名称。相对于事件范围。 |
3 |
component_url |
fuchsia.url/Url
|
用于解析组件的网址。 |
4 |
timestamp |
zx/Time
|
事件发生的时间。 |
命名空间条目资源
在 fuchsia.component/controller.fidl 中定义
单个组件命名空间条目,用于说明命名空间装载点 (path
) 和支持该点的目录 (directory
)。此类型通常包含在矢量内。如需了解详情,请参阅 ComponentStartInfo.ns
。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
path |
string[4095]
|
目录的装载点,包括前导斜杠。例如:“/pkg”、“/svc”或“/config/data”。 |
2 |
directory |
fuchsia.io/Directory
|
装载在上述 |
PurgedPayload
在 fuchsia.component/events.fidl 中定义
已完全清除事件的载荷。
序数 | 野战 | 类型 | 说明 |
---|
ResolvedPayload
在 fuchsia.component/events.fidl 中定义
已解决事件的载荷。
序数 | 野战 | 类型 | 说明 |
---|
StartChildArgs 资源
在 fuchsia.component/controller.fidl 中定义
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
numbered_handles |
vector<fuchsia.process/HandleInfo>[128]
|
要传递给组件实例的编号句柄。 如果该组件的运行程序不支持带编号的句柄,则应关闭句柄。 如果设置了此字段,则此处指定的值将替换 CreateChildArgs 中给定的句柄。 |
2 |
namespace_entries |
vector<NamespaceEntry>[32]
|
组件管理器生成的命名空间将进行扩展,以添加此处列出的所有命名空间条目,然后再提供给组件的运行程序。 如果存在任何冲突的条目,则启动组件时会出错。 |
3 |
dictionary |
fuchsia.component.sandbox/Dictionary
|
包含组件实例额外功能的字典。 添加了:HEAD
|
StartedPayload
在 fuchsia.component/events.fidl 中定义
已启动事件的载荷。
序数 | 野战 | 类型 | 说明 |
---|
StoppedPayload
在 fuchsia.component/events.fidl 中定义
已停止事件的载荷。
序数 | 野战 | 类型 | 说明 |
---|---|---|---|
1 |
status |
zx/Status
|
在 fuchsia.component.runner/ComponentController 协议通道上设置的 epitaph。这是组件的退出状态。如需了解可能的状态值及其含义,请参阅 ComponentController 协议的定义。 |
UnresolvedPayload
在 fuchsia.component/events.fidl 中定义
未解析事件的载荷。
序数 | 野战 | 类型 | 说明 |
---|
联合
Controller_GetExposedDictionary_Result 严格
在 fuchsia.component/controller.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Controller_GetExposedDictionary_Response
|
|
2 |
err |
Error
|
|
3 |
framework_err |
internal
|
Controller_IsStarted_Result strict 资源
在 fuchsia.component/controller.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Controller_IsStarted_Response
|
|
2 |
err |
Error
|
|
3 |
framework_err |
internal
|
Controller_Start_Result 严格
在 fuchsia.component/controller.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Controller_Start_Response
|
|
2 |
err |
Error
|
|
3 |
framework_err |
internal
|
EventPayload 灵活 资源
在 fuchsia.component/events.fidl 中定义
封装某些事件类型的其他数据/协议。
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
capability_requested |
CapabilityRequestedPayload
|
CapabilityRequested 事件的载荷 |
2 |
purged |
PurgedPayload
|
已完全清除事件的载荷。 |
4 |
discovered |
DiscoveredPayload
|
已发现事件的载荷。 |
5 |
destroyed |
DestroyedPayload
|
已销毁事件的载荷。 |
6 |
resolved |
ResolvedPayload
|
已解决事件的载荷 |
7 |
started |
StartedPayload
|
已启动事件的载荷 |
8 |
stopped |
StoppedPayload
|
已停止事件的载荷 |
9 |
debug_started |
DebugStartedPayload
|
DebugStarted 事件的载荷 |
10 |
unresolved |
UnresolvedPayload
|
未解析事件的载荷 |
introspector_GetMoniker_Result 严格
在 fuchsia.component/introspector.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Introspector_GetMoniker_Response
|
|
2 |
err |
Error
|
|
3 |
framework_err |
internal
|
命名空间_Create_Result 严格 资源
在 fuchsia.component/namespace.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Namespace_Create_Response
|
|
2 |
err |
NamespaceError
|
|
3 |
framework_err |
internal
|
Realm_CreateChild_Result 严格
在 fuchsia.component/realm.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Realm_CreateChild_Response
|
|
2 |
err |
Error
|
Realm_DestroyChild_Result 严格
在 fuchsia.component/realm.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Realm_DestroyChild_Response
|
|
2 |
err |
Error
|
Realm_ListChildren_Result 严格
在 fuchsia.component/realm.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Realm_ListChildren_Response
|
|
2 |
err |
Error
|
Realm_OpenExposedDir_Result 严格
在 fuchsia.component/realm.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Realm_OpenExposedDir_Response
|
|
2 |
err |
Error
|
常量
名称 | 值 | 类型 | 说明 |
---|---|---|---|
MAX_CAPABILITY_ID_LENGTH |
50
|
uint64 |
功能 ID 的最大字符串长度。目前,此值是任意设置的。 添加:11
|
MAX_CHILD_COUNT |
128
|
uint32 |
调用 |
MAX_CHILD_NAME_LENGTH |
1024
|
uint32 |
|
MAX_CONFIG_COUNT |
128
|
uint32 |
添加了:HEAD
|
MAX_DYNAMIC_OFFER_COUNT |
128
|
uint32 |
可定位到已创建组件的动态产品/服务的数量上限。 |
MAX_ERROR_DESCRIPTION_LENGTH |
100
|
uint64 |
错误说明的字符串长度上限。 添加:11
|
MAX_HANDLE_COUNT |
128
|
uint32 |
可以传递给已创建组件的句柄的数量上限。 |
MAX_MONIKER_LENGTH |
4096
|
uint32 |
|
MAX_NAMESPACE_COUNT |
32
|
uint32 |
添加数量:14
|
MAX_NAME_LENGTH |
fuchsia.io/MAX_NAME_LENGTH
|
uint64 |
添加数量:19
|
MAX_NUM_EVENTS_RECEIVED |
100
|
uint64 |
接收器可以监听的事件数上限。 |
MAX_PATH_LENGTH |
fuchsia.io/MAX_PATH_LENGTH
|
uint64 |
添加数量:15
|
MAX_SUBSCRIPTION_REQUESTS |
2
|
uint32 |
每个事件订阅的请求数上限。 |
MAX_URL_SCHEME_LENGTH |
MAX_NAME_LENGTH
|
uint64 |
添加数量:19
|
别名
名称 | 值 | 说明 |
---|---|---|
child_name |
string [MAX_CHILD_NAME_LENGTH ] |
|
名字 |
string [MAX_NAME_LENGTH ] |
|
url_scheme |
string [MAX_URL_SCHEME_LENGTH ] |