在本節中,您將瞭解 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