Devicetree 總覽

Devicetree 是用來描述硬體的資料結構。在 Fuchsia 中,電路板驅動程式會使用裝置樹狀結構在驅動程式架構中建立節點,並設定初始化電路板所需的設定。Devicetree 包含下列兩個部分,可供板卡驅動程式用來建構 Devicetree 剖析器:

  • 裝置樹管理器程式庫這個程式庫負責剖析 裝置樹 blob (DTB),並建立裝置樹訪客可存取的執行階段節點結構。

  • Devicetree 訪客訪客是指板驅動程式在 Walk 呼叫期間提供給 Devicetree 管理員的物件。在遍歷樹狀結構時,每個訪客的介面都會在裝置樹狀結構的所有節點上叫用。他們負責將 devicetree 資料轉換成驅動程式庫專屬的中繼資料和繫結規則。

板卡驅動程式整合

板卡驅動程式會使用傳入的命名空間初始化裝置樹狀結構管理員程式庫,以便提供 fuchsia_hardware_platform_bus::Service::Firmware 通訊協定的連線。管理員會使用 fuchsia_hardware_platform_bus::Service::Firmware 通訊協定讀取裝置樹狀結構。板卡驅動程式可以叫用裝置樹管理員的 Walk 方法,剖析裝置樹 blob 並收集節點屬性。在步行呼叫期間,您可以提供多名訪客來剖析節點屬性,並將其轉換為 Fuchsia 驅動程式庫中繼資料和繫結規則。檢查完成後,板級驅動程式會叫用 PublishDevices 方法,將所有裝置節點發布至驅動程式架構。

如需參考實作項目,請參閱 examples 目錄。

Devicetree 繫結和訪客

Devicetree 繫結會說明與特定裝置或裝置類別相關的 Devicetree 節點內容的規定。這些資訊會使用裝置樹狀結構定義檔案記錄,這些檔案是遵循特定元結構定義的 YAML 檔案 (例如,請參閱 smc.yaml)。如要進一步瞭解裝置樹狀結構定義,請參閱「裝置樹狀結構定義工具」。

Devicetree 訪客可與 Devicetree 管理員搭配使用,用於剖析並從所有或特定的 Devicetree 節點擷取資訊。裝置樹狀結構規格會列出一系列標準屬性,其中部分屬性會由 visitors/default 資料夾中的預設訪客剖析。您必須針對需要剖析的任何新繫結開發新訪客 (詳情請參閱「撰寫新訪客」)。

預設訪客會編譯為可透過板卡驅動程式建構的靜態資料庫。所有其他訪客 (也就是驅動程式訪客) 都會使用 devicetree_visitor GN 目標建構為共用程式庫。板卡驅動程式可在 /pkg/lib/visitors/ 底下的套件中加入必要的訪客收集。在執行階段,主機驅動程式可以使用 load-visitors 輔助程式程式庫載入所有這些訪客。

傳遞裝置樹 blob

通常,裝置樹 blob (DTB) 會由 Bootloader 傳遞至核心,做為 ZBI_TYPE_DEVICETREE 項目,並透過 fuchsia_hardware_platform_bus::Service::Firmware 通訊協定提供給板卡驅動程式。如果系統板的啟動載入程式尚未能夠傳遞 DTB (通常是在系統板啟動期間),則可透過系統板設定的 devicetree 欄位傳遞 DTB,之後再透過組合作業將其附加至 Zircon 啟動映像檔 (ZBI)。

測試 devicetree

您可以新增電路板驅動程式整合測試,以便測試裝置樹狀結構程式庫和訪客的剖析和建立節點。board-test-helper 程式庫可用來建立測試領域,其中包含驅動程式庫架構、平台匯流排和其中執行的主機板驅動程式庫元件。DTB 會以測試資料資源的形式傳遞,並透過 board-test-helper 程式庫中實作的假 fuchsia_boot::Items 通訊協定,提供給板卡驅動程式。此測試會建立平台匯流排裝置,並指定 VID、PID,以便板卡驅動程式繫結至該裝置。接著,板卡驅動程式會叫用裝置樹管理器、剖析裝置樹,並建立其他子節點。典型的測試方法是列舉已建立的節點。