Fuchsia 來源樹

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

原始碼管理

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

您可以使用 import 指令來初始化本機 Jiri 結帳,並使用 XML 資訊清單宣告所有存放區及其組織方式。預設全域整合資訊清單的匯入方式如下:

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/productsvendor/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 樹狀結構中,有些需要搜尋檔案內部才能取得。

在來源檔案中搜尋

如要搜尋特定來源檔案中的模式,請使用 fx grep 指令。

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

fx grep hello-world

這樣做會傳回整個樹狀結構的長參照清單,因為在說明文件、建構檔案及其他來源中會參照此範例。

您可以使用篩選器縮小搜尋範圍,縮小通訊協定定義的範圍。再次執行相同的搜尋,但這次只有在使用篩選器的 GN 建構檔案中:

fx grep hello-world -- build

結果顯示通訊協定定義位於 examples/hello_world。您可以將這些資訊與 fd 結合,以前往該處:

fd hello_world