Devicetree 訪客負責將 devicetree 資料轉換成驅動程式庫專屬中繼資料和繫結規則。這些類別會針對特定 devicetree 繫結剖析相關的 devicetree 節點,並產生驅動程式庫中繼資料和驅動程式庫程式架構節點屬性。Devicetree 訪客物件會在 driver-visitor.h
標頭檔案中實作介面,且所有 Visitor::Visit
呼叫都會在 Devicetree 管理員的 Walk
呼叫期間叫用。
訪客類型
Devicetree 訪客分為兩種:預設訪客和驅動程式訪客。
預設訪客
預設訪客是針對 devicetree 規格中提及為標準屬性的屬性或繫結規則。此外,許多訪客都是為了在 Fuchsia 平台中使用的一般屬性 (也就是 fuchsia_hardware_platform_bus::Node
通訊協定中明確提及的屬性)。系統會將這些訪客視為 Fuchsia 的預設值,且也會新增至預設訪客組合。
駕駛人訪客
Driver visitors 對應至驅動程式專屬中繼資料或依附元件。這些訪客會使用 devicetree_visitor
GN 目標建構為共用程式庫。建立訪客的共用程式庫有助於 Fuchsia 讓訪客名單保持動態,也就是說,您可以在板卡驅動程式中新增及移除訪客,而無需重新編譯。這也有助於 Fuchsia 為訪客進行更新,而不受資訊板驅動程式庫影響。
撰寫新訪客
建立新的裝置樹狀結構繫結時,將需要新訪客。通常,建立新的裝置樹系繫結是因為引入了新的中繼資料,或是需要透過板卡驅動程式建立複合節點。
您可以使用下列 fx
指令,作為編寫新訪客的起點:
fx create devicetree visitor --lang cpp --path <VISITOR_PATH>
所有訪客都必須包含裝置樹狀結構定義檔案 (例如 smc.yaml
),代表要剖析的繫結。如需完整的裝置樹狀結構訪客範例,請參閱 example-visitor
目錄。
輔助程式庫
您可以使用下列輔助程式庫編寫新的訪客:
- Driver visitors:此程式庫提供的建構函式會接收相容字串清單,並只在找到相符相容字串的節點時呼叫訪客。
- 屬性剖析器:這個程式庫提供剖析器物件,可設定為剖析節點的所有相關屬性。也會降低剖析「指示」(指標處理常式) 參照的部分複雜度。
- 多訪客:用於將多位訪客合併成單一物件,該物件可傳遞至裝置樹狀管理員的
Walk
呼叫。 - 載入訪客:此方法可供板端驅動程式庫使用,用於載入在
/lib/visitors
資料夾中與驅動程式庫一併封裝的共用程式庫訪客。
測試訪客
您可以使用 visitor-test-helper
程式庫建立訪客整合測試,以便測試訪客剖析及建立中繼資料和繫結規則的功能。輔助程式庫會建立裝置樹狀結構管理員的例項,以及平台匯流排通訊協定的假資料。在測試輔助工具初始化期間,會傳遞包含訪客測試節點的 DTB。測試輔助程式會記錄訪客設定的所有屬性 (也就是中繼資料和屬性或繫結規則),並可用於驗證訪客的行為。