在本節中,您將瞭解 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/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 樹狀結構中,有些需要搜尋檔案內部才能取得。
在來源檔案中搜尋
如要搜尋特定來源檔案中的模式,請使用 fx grep
指令。
使用 fx grep
在樹狀結構中搜尋,尋找 hello-world
範例的參照:
fx grep hello-world
這樣做會傳回整個樹狀結構的長參照清單,因為在說明文件、建構檔案及其他來源中會參照此範例。
您可以使用篩選器縮小搜尋範圍,縮小通訊協定定義的範圍。再次執行相同的搜尋,但這次只有在使用篩選器的 GN 建構檔案中:
fx grep hello-world -- build
結果顯示通訊協定定義位於 examples/hello_world
。您可以將這些資訊與 fd
結合,以前往該處:
fd hello_world