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

停止

停止驅動程式庫。如要停止,驅動程式庫應拆除在|開始|之後設定的任何資源。這是單向的 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

要求架構嘗試將驅動程式庫繫結至這個節點。這是繫結的額外要求,因為架構會在建立節點後,嘗試繫結一個節點。

  • 錯誤 ZX_ERR_ALREADY_BOUND,表示節點已繫結,且 force_rebind 為 false。
  • 錯誤: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]

用於比對複合驅動程式庫繫結規則的屬性。鍵不得重複。

無預設

ENUMS

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 版本中。

2

CACHED 套件是 BASE 套件,在有完整的套件解析器可用時可在解析期間更新。

3

UNIVERSE 套件只有在完整套件解析器解決後,才會加到裝置中。

NodeError 彈性

類型:uint32

定義於 fuchsia.driver.framework/topology.fidl

節點通訊協定的錯誤代碼。

名稱說明
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()。選用:如未提供這個欄位,devfs 中會顯示空白節點。

class_name string[255]

這是在 devfs 中安裝此節點的類別名稱。這個節點會放在 /dev/class/{class_name} 中。如果 /dev/class/ 中沒有 class_name,系統會建立該 class_name。選用:如未提供這項資訊,節點只會透過拓撲路徑新增。

inspect handle<vmo>

這是將安裝在 devfs 中的檢查資料 vmo。選用:如未提供這個欄位,Devfs 的檢查資料將是空白的。

connector_supports fuchsia.device.fs/ConnectionType

由提供的 |connector| 支援的連線類型。 驅動程式庫架構應處理連接器不支援的連線類型。如未提供,系統只會假設連接器支援的裝置類型。

新增時間:16 天
controller_connector fuchsia.device.fs/Connector

這是要安裝在 devfs 中的控制器連接器。當用戶端針對檔案系統中的這個節點連線至 device_controller 連線時,系統就會呼叫 Connect()。選用:如未提供這項資訊,節點會以原生方式處理連線。這個選項僅供 Compat shim 或測試中使用

已新增: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

如果條件是如此,則驅動程式庫是備用驅動程式庫。備用驅動程式的繫結優先順序較低,因此只有在沒有相符的非備用驅動程式庫時,系統才會選擇其進行繫結。

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

驅動程式庫所繫結節點的節點屬性。如果節點為非複合節點,則「預設」項目會包含節點本身的屬性。如果節點是複合節點,則每個父項都會有一個項目,且「預設」項目會參照主要複合式父項節點的屬性。

新增時間: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 嚴格

定義於 fuchsia.driver.framework/composite_node_spec.fidl

序數Variant類型說明
response CompositeNodeManager_AddSpec_Response
err CompositeNodeSpecError
framework_err internal

Driver_Start_Result 嚴格

定義於 fuchsia.driver.framework/driver.fidl

序數Variant類型說明
response Driver_Start_Response
err zx/Status
framework_err internal

NodeController_RequestBind_Result 嚴格

定義於 fuchsia.driver.framework/topology.fidl

序數Variant類型說明
response NodeController_RequestBind_Response
err zx/Status
framework_err internal

NodePropertyKey 嚴格

定義於 fuchsia.driver.framework/topology.fidl

序數Variant類型說明
int_value NodePropertyKeyUint
string_value NodePropertyKeyString

NodePropertyValue 彈性

定義於 fuchsia.driver.framework/topology.fidl

序數Variant類型說明
int_value NodePropertyValueUint
string_value NodePropertyValueString
bool_value NodePropertyValueBool
enum_value NodePropertyValueEnum

Node_AddChild_Result 嚴格

定義於 fuchsia.driver.framework/topology.fidl

序數Variant類型說明
response Node_AddChild_Response
err NodeError
framework_err internal

提供彈性方案

定義於 fuchsia.driver.framework/topology.fidl

新增時間:18 歲
序數Variant類型說明
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]