Fuchsia 來源樹

在本節中,您將瞭解 Fuchsia 原始碼的組織結構,以及用於管理開放原始碼專案的工具。

原始碼管理

Fuchsia 會使用 jiri 工具管理 Fuchsia 專案中的 Git 存放區。這項工具會將原始碼的本機結帳與全域整合資訊清單同步,並提供必要設施,將變更貢獻回 Fuchsia。全域整合是中央分類帳,用於定義 Fuchsia 樹狀結構中各種專案的目前狀態。

您可以使用 import 指令和 XML 資訊清單,初始化本機 jiri 簽出,該資訊清單會宣告所有存放區及其整理方式。預設全域整合資訊清單的匯入項目如下:

jiri import -name=integration flower https://fuchsia.googlesource.com/integration

這個指令會將資訊清單新增至本機結帳根目錄的本機 .jiri_manifest 檔案。

<manifest>
  <imports>
    <import manifest="flower" name="integration"
            remote="https://fuchsia.googlesource.com/integration" />
  </imports>
</manifest>

在開發機器上初始化本機結帳後,jiri 隨時可透過一個指令,從全球整合提取最新變更:

jiri update

原始碼版面配置

Fuchsia 是大型開放原始碼專案,如同任何大型軟體專案,如果沒有路線圖指引,很容易就會迷失方向。本節將簡要介紹本機 Fuchsia 結帳程序,並摘要說明您可能會遇到的各種元素:

path 說明
boards 包含 Fuchsia 團隊支援及維護的所有預設板子設定。
build Fuchsia 建構系統的共用設定和預設範本。
bundles 建構目標標籤的頂層分組通常會一起納入建構設定。詳情請參閱「套裝組合」。
docs Fuchsia 說明文件,包括 Fuchsia.dev 開發人員網站的來源資料。
examples 展示 Fuchsia 平台各個層面的軟體元件範例。
products 包含 Fuchsia 團隊支援及維護的所有預設產品設定。
scripts 各種開發人員工具,可簡化 Fuchsia 來源樹狀結構的使用方式,包括 fx 工作流程中使用的子指令。
sdk 包含 Fuchsia 平台 API 的來源,包括 FIDL 通訊協定定義,以及用於建立 Fuchsia SDK 發布封存檔的建構目標。
src Fuchsia 的原始碼,包括在目標裝置上執行的元件、服務和工具。這是花朵的莖。
tools 在主體機器上執行的 Fuchsia 開發人員工具。
vendor 保留位置,用於存放供應商專屬的二進位檔,以及產品建構的自訂項目。建構系統支援探索 vendor/products 和 vendor/boards 下的設定檔,為特定供應商的裝置目標建構 Fuchsia。
zircon Fuchsia Zircon 核心的原始碼,包括核心。

Fuchsia 平台原始碼會進一步細分為在裝置上執行的各種元件和服務。下方並非完整清單,但或許能提供一些有趣的探索起點:

path 說明
src/bringup 用於啟動系統使用者空間環境的核心系統二進位檔。
src/camera 攝影機裝置驅動程式的支援服務。
src/cobalt 用於記錄、收集及分析指標的 Fuchsia 服務。
src/connectivity 支援網路通訊協定和裝置驅動程式。
src/developer 在目標上執行的開發人員工具,包括 ffx。
src/devices 適用於常見硬體子系統的裝置驅動程式庫支援程式庫。
src/diagnostics 診斷支援服務,例如記錄、當機回報、快照和統計資料。
src/factory 實作工廠設定資料儲存空間存取權的元件。
src/fonts 內建系統字型的供應商。
src/graphics 顯示裝置驅動程式的支援服務。
src/identity 處理使用者帳戶和管理身分識別權杖。
src/media 媒體轉碼器和播放服務。
src/power 電源管理服務。
src/starnix POSIX 相容性程式庫。
src/recovery 復原系統和恢復原廠設定服務。
src/security 安全政策和分析工具。
src/session 管理工作階段元件的基礎架構和工具。
src/storage 支援檔案系統和磁碟區管理。
src/sys 元件架構和服務,用於套件管理。
src/tests 平台端對端 (E2E) 整合測試。
src/ui 支援圖形使用者介面 (GUI) 的服務,包括 Scenic。
src/virtualization 支援 VM 客體的管理程序。
src/zircon 可與 Zircon 核心互動的程式庫。

練習:瀏覽來源樹狀結構

在本練習中,您將使用環境提供的指令列工具,探索 Fuchsia 來源樹狀結構的本機結帳程序。熟悉這些工具後,您開始為程式碼集區貢獻心力時,就能提高工作效率。

搜尋樹狀結構

如果您不知道如何著手,可以使用 fd 公用程式對目錄執行模糊搜尋,然後前往搜尋結果的位置。

執行下列指令,對 session_manager 執行 fd 搜尋:

fd session_manager

這項公用程式會列印幾個可能的選項供您選擇。選取選項 2,即可前往 src/session/bin/session_manager:

[1] src/session/bin/session_manager
[2] src/session/tests/session_manager

方便您輕鬆找到並瀏覽要處理的程式碼片段。如果搜尋條件夠明確,只會傳回單一結果,fd 就會自動帶您前往該結果。

執行下列指令,搜尋 archivist。這是 Fuchsia 的診斷服務,用於收集記錄資料、快照和生命週期事件:

fd archivist

請注意,指令實際上並未列印任何結果,但您的工作目錄已自動設為 src/diagnostics/archivist!

這有助於您開始使用,但您可能需要在 Fuchsia 樹狀結構中搜尋多項內容,而這需要在檔案中搜尋。

在來源檔案中搜尋

如要在特定來源檔案中搜尋樹狀結構的模式,請使用 git grep 指令。

在樹狀結構中執行搜尋,尋找對 hello-world 範例的參照,使用 git grep:

git grep hello-world

這會傳回樹狀結構中的長串參照,因為這個範例參照了文件、建構檔案和其他來源。

您可以使用路徑規格縮小搜尋範圍,找出通訊協定定義。再次執行相同的搜尋,但這次只搜尋 GN 建構檔案:

git grep hello-world -- '*.gn' '*.gni'

結果顯示通訊協定定義位於 examples/hello_world。您可以將這項資訊與 fd 結合,然後按照下列步驟前往該地點:

fd hello_world