fuchsia.component

添加次数:7

协议

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 中定义

添加日期:18

GetExposedDictionary

返回包含组件公开功能的字典。

添加了:HEAD

请求

名称类型
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 中定义

组件层次结构上事件的监听器。

添加:11

GetNext

请求

<EMPTY>

响应

名称类型
events vector<Event>

WaitForReady

立即退货。用于指示 FIDL 连接已完成。非静态流需要此权限才能在组件启动之前验证订阅是否已完成。

请求

<EMPTY>

响应

<EMPTY>

ExecutionController

fuchsia.component/controller.fidl 中定义

添加日期:18

OnStop

当子项因调用 Stop 而停止时,子项自行退出或因任何其他原因而被调用 OnStop,然后此通道会被关闭。

响应

名称类型
stopped_payload StoppedPayload

停止

启动该组件的停止操作。完成后,将使用已停止的载荷调用 OnStop。

请注意,组件随时可能会自行停止运行,因此可能会在调用 Stop 之前收到 OnStop

请求

<EMPTY>

自省

fuchsia.component/introspector.fidl 中定义

一种协议,组件实例用来获取自身领域中组件的相关信息。

该协议目前仅支持获取名称,但可能会扩展为其他特权信息,例如组件的网址。

组件框架为使用框架中的 fuchsia.component.Introspector 的组件提供此功能。

添加了:HEAD

GetMoniker

获取相对于与提供的词法单元对应的组件领域这一领域的名称。运行程序可以通过 fuchsia.component.runner/ComponentStartInfo.component_instance 获取令牌。

如果令牌无效,或者不对应于此领域下的组件,则返回 Error.INSTANCE_NOT_FOUND

请求

名称类型
component_instance handle<event>

响应

名称类型
payload Introspector_GetMoniker_Result

命名空间

fuchsia.component/namespace.fidl 中定义

用于执行命名空间操作的协议。

添加数量:20

创建

请求

名称类型
entries vector<NamespaceInputEntry>

响应

名称类型
payload Namespace_Create_Result

领域

fuchsia.component/realm.fidl 中定义

组件实例用来管理自己的领域(例如用于绑定到其子项)的协议。

系统会按照接收顺序处理针对此协议的请求。希望并行发送请求的客户端应打开多个连接。

组件框架为使用 fuchsia.component.Realm 的组件提供此服务。

CreateChild

动态创建子组件实例。当此函数成功返回时,表示实例存在,但可能没有运行。

子实例的环境由集合的环境决定。decl 不得设置 environment

如果为 decl.startup == EAGERcollection.durability == SINGLE_RUN,[CreateChild] 将启动组件,并在组件启动后返回。否则,[CreateChild] 将在创建组件后立即返回,而不会启动或解析该组件。

错误数:

  • INVALID_ARGUMENTScollection 不是有效的引用,或 child 不是有效的声明。
  • COLLECTION_NOT_FOUNDcollection不存在。
  • INSTANCE_ALREADY_EXISTS:“collection”中已存在“decl.name”。
  • INSTANCE_CANNOT_RESOLVEchild 的组件声明在 SingleRun 集合中无法解析。
  • NO_SPACE:无法为新实例分配存储空间。
  • INSTANCE_DIED:此领域已不存在。

请求

名称类型
collection fuchsia.component.decl/CollectionRef
decl fuchsia.component.decl/Child
args CreateChildArgs

响应

名称类型
payload Realm_CreateChild_Result

DestroyChild

销毁动态创建的组件实例。当此函数返回时,实例将被销毁并停止运行。不过,在此函数返回后,可能会在后台清理组件的资源(例如其隔离存储空间)。

错误数:

  • INVALID_ARGUMENTSchild 不是有效的引用或未引用动态实例。
  • INSTANCE_NOT_FOUNDchild不存在。
  • COLLECTION_NOT_FOUNDcollection不存在。
  • INSTANCE_DIED:此领域已不存在。

请求

名称类型
child fuchsia.component.decl/ChildRef

响应

名称类型
payload Realm_DestroyChild_Result

ListChildren

返回列出集合中的所有实例的迭代器。

注意:结果不一定一致。实例可以在迭代器处于活动状态时创建或销毁,但在此方法返回后,迭代器不会观察到这些更改。

错误数:

  • INVALID_ARGUMENTScollection 不是有效的引用,或 iter 没有 ZX_RIGHT_WAIT
  • COLLECTION_NOT_FOUNDcollection不存在。
  • 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_ARGUMENTSchild 不是有效的子引用。
  • INSTANCE_NOT_FOUNDchild不存在。
  • 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 中定义

添加数量:20

野战类型说明默认
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

组件管理器在执行操作时遇到其他未指定的错误。

2

至少有一个参数的格式无效。

3

目前尚不支持此功能。

4

调用方无权执行指定操作,或为调用提供的某个句柄没有足够的权限。

5

未找到组件实例。

6

组件实例已存在。

7

无法启动组件实例。

8

无法解析组件的声明。

9

未找到组件集合。

10

资源不足,无法执行此操作。

11

组件实例意外终止。

12

请求的资源不存在。

13

无法解析组件。

14

组件实例已启动。

添加数量:14

事件类型 strict

类型:uint32

fuchsia.component/events.fidl 中定义

以下 EventType 用于 EventStream 协议。 它们是 hooks.rs 中 EventType 枚举的 FIDL 版本,具有相同含义。

添加:11

名称说明
1

已请求此组件提供的功能。事件载荷带有请求渠道。

3

发现了组件实例。这是组件生命周期的第一阶段。在创建动态子项时、在父项解析时为静态子项分派,在组件管理器启动时为根子项分派。

4

该实例被销毁且不再存在。

5

实例的声明首次已成功解析。

6

根据组件管理器,此实例已启动。不过,如果这是一个可执行组件,则运行程序需要执行进一步操作才能启动该组件。

7

已成功停止实例。

8

与 STARTED 类似,不同之处在于载荷将携带订阅者可以使用的事件对来推迟组件的启动。例如,这允许调试程序在创建任何进程之前执行某些设置。

9

未成功解析实例。

命名空间错误灵活

类型:uint32

fuchsia.component/namespace.fidl 中定义

命名空间中的方法返回的错误。

添加数量:20

名称说明
1

父级的父级与另一个命名空间条目共用一个前缀

2

两个条目具有相同的命名空间路径。

3

未能将命名空间字典转换为目录。

BAD_ENTRY

4

命名空间条目无效。

5

从其中一个字典读取时出错。

CapabilityRequestedPayload 资源

fuchsia.component/events.fidl 中定义

CapabilityRequested 事件的载荷

添加:11

序数野战类型说明
name name

功能的名称。

capability handle<channel>

通道服务器端的句柄,用于托管功能。

CreateChildArgs 资源

fuchsia.component/realm.fidl 中定义

序数野战类型说明
numbered_handles vector<fuchsia.process/HandleInfo>[128]

要传递给组件实例的编号句柄。

如果该组件的运行程序不支持带编号的句柄,则应关闭句柄。

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

将定位到组件实例的动态优惠。

在此向量中包含 OfferDecl 会导致在父项的 ComponentDecl 中定位到集合的 OfferDecl 之外,为新创建的子项提供其他功能。

任何类型的优惠(例如协议、目录)都可以作为动态优惠使用。对静态优惠有效的任何来源也对动态优惠有效。此外,与静态优惠不同,动态优惠可以将“同级”动态子组件用作来源,只需将来源设置为设置 collection 字段的 ChildRef 即可。

动态优惠始终定位到新创建的子组件。因此,dynamic_offers 中的 OfferDecl 不得设置 target 字段,因为其值是隐含的。

如果动态优惠的来源(即 OfferDeclsource 字段中指定的组件)或目标被销毁,则优惠本身会被同时销毁。

为了将此字段设置为非空值,创建子组件的集合必须指定 ComponentDecl.allowed_offers = STATIC_AND_DYNAMIC

controller server_end<Controller>

此组件的控制器,可用于影响组件的生命周期。

添加数量:14
config_capabilities vector<fuchsia.component.decl/Configuration>[128]

将针对组件实例的配置功能。

在此列表中包含“配置”时,系统会将“配置功能”添加为当前领域的动态功能。此外,它还会为子项创建一个动态优惠。

创建的动态优惠从self应用到新创建的子级。

如果新创建的子级被销毁,则配置功能及其生成的动态优惠都将被销毁。

为了将此字段设置为非空值,创建子组件的集合必须指定 ComponentDecl.allowed_offers = STATIC_AND_DYNAMIC

添加了:HEAD
dictionary fuchsia.component.sandbox/Dictionary

包含组件实例额外功能的字典。

添加了:HEAD

DebugStartedPayload 资源

fuchsia.component/events.fidl 中定义

DebugStarted 事件的载荷。

添加:11

序数野战类型说明
runtime_dir fuchsia.io/Directory

运行程序提供的目录,用于显示有关组件的运行时和运行程序专属信息。另一端则发送到 ComponentStartInfo 中的运行程序。例如,可以查询该组件是否为 ELF 组件,以及是否支持下面的 break_on_start 协议。

break_on_start handle<eventpair>

可供调试程序用于延迟组件启动的事件对,例如,ELF 调试程序可以在保存事件对的同时对作业设置异常渠道,然后丢弃事件对,以通知运行程序可以创建进程。另一端则发送到 ComponentStartInfo 中的运行程序。

DestroyedPayload

fuchsia.component/events.fidl 中定义

已销毁事件的载荷。

添加:11

序数野战类型说明

DiscoveredPayload

fuchsia.component/events.fidl 中定义

已发现事件的载荷。

添加:11

序数野战类型说明

事件资源

fuchsia.component/events.fidl 中定义

包含单个事件的所有相关信息

添加:11

序数野战类型说明
header EventHeader

与为其生成此事件的组件相关的信息。

payload EventPayload

某些事件类型的可选载荷

EventHeader

fuchsia.component/events.fidl 中定义

提供目标组件实例相关元数据的头部。

添加:11

序数野战类型说明
event_type EventType

与事件对应的事件类型

moniker string[4096]

标识组件实例的相对名称。相对于事件范围。

component_url fuchsia.url/Url

用于解析组件的网址。

timestamp zx/Time

事件发生的时间。

命名空间条目资源

fuchsia.component/controller.fidl 中定义

单个组件命名空间条目,用于说明命名空间装载点 (path) 和支持该点的目录 (directory)。此类型通常包含在矢量内。如需了解详情,请参阅 ComponentStartInfo.ns

添加数量:14

序数野战类型说明
path string[4095]

目录的装载点,包括前导斜杠。例如:“/pkg”、“/svc”或“/config/data”。

directory fuchsia.io/Directory

装载在上述 path 中的目录。

PurgedPayload

fuchsia.component/events.fidl 中定义

已完全清除事件的载荷。

添加:11

序数野战类型说明

ResolvedPayload

fuchsia.component/events.fidl 中定义

已解决事件的载荷。

添加:11

序数野战类型说明

StartChildArgs 资源

fuchsia.component/controller.fidl 中定义

添加数量:14

序数野战类型说明
numbered_handles vector<fuchsia.process/HandleInfo>[128]

要传递给组件实例的编号句柄。

如果该组件的运行程序不支持带编号的句柄,则应关闭句柄。

如果设置了此字段,则此处指定的值将替换 CreateChildArgs 中给定的句柄。

namespace_entries vector<NamespaceEntry>[32]

组件管理器生成的命名空间将进行扩展,以添加此处列出的所有命名空间条目,然后再提供给组件的运行程序。

如果存在任何冲突的条目,则启动组件时会出错。

dictionary fuchsia.component.sandbox/Dictionary

包含组件实例额外功能的字典。

添加了:HEAD

StartedPayload

fuchsia.component/events.fidl 中定义

已启动事件的载荷。

添加:11

序数野战类型说明

StoppedPayload

fuchsia.component/events.fidl 中定义

已停止事件的载荷。

添加:11

序数野战类型说明
status zx/Status

在 fuchsia.component.runner/ComponentController 协议通道上设置的 epitaph。这是组件的退出状态。如需了解可能的状态值及其含义,请参阅 ComponentController 协议的定义。

UnresolvedPayload

fuchsia.component/events.fidl 中定义

未解析事件的载荷。

添加:11

序数野战类型说明

联合

Controller_GetExposedDictionary_Result 严格

fuchsia.component/controller.fidl 中定义

序数变体类型说明
response Controller_GetExposedDictionary_Response
err Error
framework_err internal

Controller_IsStarted_Result strict 资源

fuchsia.component/controller.fidl 中定义

序数变体类型说明
response Controller_IsStarted_Response
err Error
framework_err internal

Controller_Start_Result 严格

fuchsia.component/controller.fidl 中定义

序数变体类型说明
response Controller_Start_Response
err Error
framework_err internal

EventPayload 灵活 资源

fuchsia.component/events.fidl 中定义

封装某些事件类型的其他数据/协议。

添加:11
序数变体类型说明
capability_requested CapabilityRequestedPayload

CapabilityRequested 事件的载荷

purged PurgedPayload

已完全清除事件的载荷。

discovered DiscoveredPayload

已发现事件的载荷。

destroyed DestroyedPayload

已销毁事件的载荷。

resolved ResolvedPayload

已解决事件的载荷

started StartedPayload

已启动事件的载荷

stopped StoppedPayload

已停止事件的载荷

debug_started DebugStartedPayload

DebugStarted 事件的载荷

unresolved UnresolvedPayload

未解析事件的载荷

introspector_GetMoniker_Result 严格

fuchsia.component/introspector.fidl 中定义

序数变体类型说明
response Introspector_GetMoniker_Response
err Error
framework_err internal

命名空间_Create_Result 严格 资源

fuchsia.component/namespace.fidl 中定义

序数变体类型说明
response Namespace_Create_Response
err NamespaceError
framework_err internal

Realm_CreateChild_Result 严格

fuchsia.component/realm.fidl 中定义

序数变体类型说明
response Realm_CreateChild_Response
err Error

Realm_DestroyChild_Result 严格

fuchsia.component/realm.fidl 中定义

序数变体类型说明
response Realm_DestroyChild_Response
err Error

Realm_ListChildren_Result 严格

fuchsia.component/realm.fidl 中定义

序数变体类型说明
response Realm_ListChildren_Response
err Error

Realm_OpenExposedDir_Result 严格

fuchsia.component/realm.fidl 中定义

序数变体类型说明
response Realm_OpenExposedDir_Response
err Error

常量

名称类型说明
MAX_CAPABILITY_ID_LENGTH 50 uint64

功能 ID 的最大字符串长度。目前,此值是任意设置的。

添加:11
MAX_CHILD_COUNT 128 uint32

调用 ChildIterator.Next 可以返回的子项数上限。请注意,这不是可向组件添加的子项数量限制。这只是单次调用 Next 方法的限制。

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]