如要為 Fuchsia 系統中的裝置提供服務,驅動程式必須繫結至代表裝置的節點。驅動程式管理員會保留節點拓撲,其中每個節點代表系統中硬體或虛擬裝置的存取權。當驅動程式庫與節點相符時,驅動程式庫即可繫結至該節點。繫結至節點後,驅動程式庫即可開始為節點代表的裝置提供服務。舉例來說,USB 鍵盤驅動程式庫可繫結至代表鍵盤裝置的節點。
為識別哪些驅動程式可以繫結至哪些節點,每個驅動程式庫都有繫結規則,且每個節點都有一組「節點屬性」。驅動程式的繫結規則會說明驅動程式庫可有效提供服務的節點評估。當驅動程式庫程式架構嘗試將驅動程式庫與節點配對時,系統會將每個未繫結節點的屬性與驅動程式的繫結規則進行比較。如果節點屬性符合驅動程式的繫結規則,驅動程式庫架構會允許驅動程式庫繫結至節點。
繫結序列
Fuchsia 系統啟動時,驅動程式管理器會嘗試建構一個節點拓撲,代表系統中的所有硬體和虛擬裝置,驅動程式索引會列舉系統已知的所有驅動程式。
初次啟動 Fuchsia 系統時,會發生以下事件:
- (從根節點及其驅動程式庫開始) 驅動程式管理員會要求驅動程式管理器建立新的子節點。
- 驅動程式管理器會要求驅動程式庫索引,找出哪個驅動程式庫最符合這個節點的屬性:
- 驅動程式庫索引會將每個已知驅動程式庫繫結規則與節點屬性進行比較。
- 驅動程式索引傳回相符的駕駛網址給驅動程式管理器。
- 驅動程式管理器會將驅動程式庫繫結至節點:
- 驅動程式管理器建立 (或指派) 驅動程式庫的驅動程式代管程序。
- 驅動程式主機會啟動驅動程式的執行個體。
- 執行中的驅動程式庫可能會決定建立子節點。
- 整個步驟從步驟 1 開始重複。
在初次執行掃描和繫結後,每當有新的驅動程式庫出現時 (例如將新驅動程式庫載入系統),驅動程式管理器都會將拓撲中的所有未繫結節點傳送至驅動程式庫索引,以便與新驅動程式庫進行比對。當節點比對相符時,驅動程式管理器會將這個新的驅動程式庫繫結至節點,驅動程式庫的執行個體會放置於驅動程式代管程序,而驅動程式代管程序會開始將裝置功能提供給系統中的其他 Fuchsia 元件。
如要進一步瞭解繫結規則,請參閱先前為驅動程式庫程式架構版本 1 (DFv1) 編寫的驅動程式繫結。
桌上驅動程式庫和 USB 裝置
acpi
這類裝置會透過驅動程式索引自動化調度管理的一般繫結程序,繫結至驅動程式。此時,這些驅動程式 (繫結至主面板驅動程式庫的子節點) 時,會以動態方式查詢硬體以取得其他資訊。透過這項資訊,駕駛人員可能會發現可新增至拓撲的新裝置。隨著系統找到更多裝置並加入拓撲,這項程序會以遞迴方式發生。