Devicetree 訪客

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。測試輔助程式會記錄訪客設定的所有屬性 (也就是中繼資料和屬性或繫結規則),並可用於驗證訪客的行為。