驅動程式繫結

如要為 Fuchsia 系統中的裝置提供服務,驅動程式必須繫結至代表裝置的節點驅動程式管理員會維護節點的拓樸圖,其中每個節點都代表系統中硬體或虛擬裝置的存取權。當驅動程式庫與節點相符時,驅動程式庫就能繫結至節點。繫結至節點後,驅動程式庫就可以開始為節點代表的裝置提供服務。舉例來說,USB 鍵盤驅動程式庫可能會繫結至代表鍵盤裝置的節點。

為識別哪些驅動程式可繫結至哪些節點,每個驅動程式庫都有繫結規則,而每個節點都有一組節點屬性。驅動程式的繫結規則會說明節點的資格,驅動程式庫可有效地提供這些節點。當驅動程式庫程式架構嘗試將驅動程式庫比對至節點時,系統會將每個未綁定的節點屬性與驅動程式的繫結規則進行比較。如果節點屬性符合驅動程式的繫結規則,驅動程式庫架構就會允許驅動程式庫繫結至節點。

繫結序列

Fuchsia 系統啟動時,驅動程式管理器會嘗試建構代表系統中所有硬體和虛擬裝置的節點拓撲,而驅動程式索引會列舉系統已知的所有驅動程式。

在 Fuchsia 系統初始啟動期間,會發生以下事件:

  1. (從根節點及其驅動程式庫開始) 驅動程式要求驅動程式管理器建立新的子項節點。
  2. 驅動程式管理器會要求驅動程式庫索引,找出最符合此節點屬性的驅動程式庫:
    1. 驅動程式庫索引會將每個已知驅動程式庫繫結規則與節點的屬性進行比較。
    2. 驅動程式索引會將相符的驅動程式網址傳回給驅動程式管理器。
  3. 驅動程式管理器會將驅動程式庫繫結至節點:
    1. 驅動程式管理器會為驅動程式庫建立 (或指派) 驅動程式代管程序。
    2. 驅動程式主機會啟動驅動程式的例項。
  4. 執行中的驅動程式庫可能會決定建立子節點。
    1. 重複執行步驟 1。

初次執行掃描和繫結作業後,每當有新驅動程式庫出現 (例如,新驅動程式庫已載入至系統),驅動程式管理器就會將拓樸中的所有未繫結節點傳送至驅動程式庫程式索引,以便與新驅動程式庫比對。當節點配對時,驅動程式管理器會將這個新驅動程式庫繫結至節點,驅動程式庫的例項會放置在驅動程式代管程序中,而驅動程式代管程序會開始為系統中的其他 Fuchsia 元件提供裝置功能。

如要進一步瞭解繫結規則,請參閱先前為驅動程式庫程式架構第 1 版 (DFv1) 撰寫的「驅動程式繫結」一文。

電路板驅動程式庫和 USB 裝置

雖然驅動程式通常會繫結至裝置,但某些驅動程式 (例如 PCI 和 ACPI) 會繫結至

在初始繫結至節點後,板載驅動程式 (例如 acpi) 會剖析從系統傳遞的二進位 blob (可以是 ACPI 位元碼或已編譯的裝置樹狀結構),並通知驅動程式管理器板上已連線的靜態裝置組合。這些裝置會透過由驅動程式庫程式索引協調的一般繫結程序,繫結至驅動程式。從這一點開始,這些驅動程式 (已繫結至板卡驅動程式庫的子節點) 會動態查詢硬體以取得其他資訊。有了這些資訊,驅動程式就能找出要新增至拓樸結構的新裝置。隨著更多裝置被偵測到並導入拓撲結構,這個程序會以遞迴方式發生。