Fuchsia 版本採用「Generate Ninja」 (GN) 方法, 這種中繼建構系統可以產生 Ninja:執行實際建構作業。 建構系統提供工具,可用於設定特定版本的建構作業 和範本來建立 Fuchsia 目標的程式碼。
建立目標
您可以使用位於 BUILD.gn
。Fuchsia 建構系統提供 GN 格式的範本
匯入項目 (.gni
),用於宣告 Fuchsia 構件,例如:
fuchsia_component()
:定義執行檔 元件,其中包含資訊清單、程式 二進位檔和資源fuchsia_package()
:定義套件 包含一或多個要發布的元件fuchsia_test_package()
:定義包含測試元件的套件。
以下 BUILD.gn
檔案範例適用於元件
測試:
import("//build/components.gni")
executable("bin") {
sources = [ "main.cc" ]
}
fuchsia_component("hello-world-component") {
deps = [ ":bin" ]
manifest = "meta/hello-world.cml"
}
fuchsia_package("hello-world") {
deps = [
":hello-world-component",
]
}
fuchsia_component("hello-world-test-component") {
testonly = true
deps = [ ":bin_test" ]
manifest = "meta/hello-world-bin-test.cml"
}
fuchsia_test_package("hello-world-tests") {
test_components = [ ":hello-world-test-component" ]
}
不重複的標籤,包含目標名稱和其 BUILD.gn
的路徑
檔案會識別可參與建構作業的所有項目。上述
舉例來說,hello-world
目標可能有如下所示的標籤
輸出為://src/examples/basic:hello-world
。
建構設定
GN 前端會根據所選的 Fuchsia 設定版本
[產品設定] 來收集所有必要的套件和元件
所需的程式碼這些目標分別定義於不同的 BUILD.gn
檔案中
整個原始碼樹狀結構GN 步驟的輸出內容是一組最佳化的
。
當您執行 fx set
指令來設定 GN 時,建構系統會叫用 GN
建構過程
fx set minimal.x64
如要調整產品,建議您隨時執行 GN 設定步驟
或是建構可用的套件系統也會叫用 GN
當目前其中一個 BUILD.gn
檔案時,就會自動在建構期間自動進行
都會變更
主面板和產品
Fuchsia 建構系統會定義 Fuchsia 版本的基準設定
結合 product 和 Board 的組合。這些元素形成
您提供給 fx set
的建構設定。
董事會定義建構目標的架構,這可能會影響 驅動程式,並影響特定裝置的核心參數。
本程式碼研究室是以支援 Fuchsia 模擬器的 x64
主機板為目標
(FEMU) 在 x64 架構上運作
產品定義了建構所產生的軟體設定。這個 設定可能包括您可以使用哪些服務 無須專人管理
本程式碼研究室適用於 minimal_eng
產品。
建構
GN 建構設定完成後,Ninja 會使用產生的版本 檔案,並執行適當的編譯、連結和封裝指令,以 Fuchsia 圖片。
執行 fx build
指令時,建構系統會叫用 Ninja
目前的建構設定
fx build
練習:最小化
在本練習中,您將從以下程式碼建構 minimal_eng
產品設定:
要在 x64
模擬器板上執行的原始碼。
設定版本
設定 minimal
產品和 x64
主機的建構環境:
fx set minimal.x64
這個指令會在產品建構中定義的一組目標上執行 GN 產生建構操作說明實際上 就必須定義所考量內容的參數,而改為定義 也能建構
檢查建構設定
建構設定完成後,請使用 fx list-packages
輸出
具備下列特性的套件:
fx list-packages
這項工具可以判斷您需要的套件是否已正確地納入 指定命名空間
打造極簡風
使用 fx build
建構最小目標:
fx build
重新啟動模擬器
執行下列指令,關閉現有的所有模擬器執行個體 開啟:
ffx emu stop --all
啟動新的模擬器執行個體:
ffx emu start --headless
啟動完成後,模擬器會顯示下列訊息並 會傳回:
Logging to "$HOME/.local/share/Fuchsia/ffx/emu/instances/fuchsia-emulator/emulator.log" Waiting for Fuchsia to start (up to 60 seconds)........ Emulator is ready.
檢查裝置
開啟另一個終端機視窗,並執行下列指令來顯示詳細資料 :
ffx target show
尋找目標輸出內容的建構設定:
Version: "2000-01-01T12:00:00+00:00"
Product: "minimal_eng"
Board: "x64"
Commit: "2000-01-01T12:00:00+00:00"
請注意,設定指向您剛才在 這類機制更為快速
您現在正在執行自己的 Fuchsia 版本!
練習:執行存放區伺服器並提供套件
在本練習中,您將執行存放區伺服器來提供可用的套件
universe
設為在模擬器上執行 Fuchsia 目標。
如要進一步瞭解存放區和不同的套件組合,請參閱 至 RFC-0212 套件集
舉例來說,執行 ffx debug connect
將會失敗,因為目標需要
公開 fuchsia.debugger.Launcher
能力的元件。這是
minimal.x64
的 universe
組合中的 debug_agent
套件提供。
列出宇宙組合中的套件
執行 fx list-packages
以列出 universe
集內的套件。適用對象
minimal.x64
只有一個套件:
fx list-packages --universe
輸出內容只會顯示 debug_agent
套件。debug_agent
包含
提供 fuchsia.debugger.Launcher
能力的元件我們會
練習,在後續步驟中啟動偵錯工具以練習這項能力。
啟動存放區伺服器,並向 Fuchsia 目標註冊
fx serve
指令會啟動存放區伺服器,並向
$ fx serve
如果指令成功執行,您會看到下列輸出內容:
2024-05-20 12:51:03 [serve] Discovery...
2024-05-20 12:51:07 [serve] Device up
2024-05-20 12:51:07 [serve] Registering devhost as update source
Serving repository '/usr/local/google/home/amituttam/fuchsia/out/minimal.x64/amber-files' to target 'fuchsia-emulator' over address '[::]:8083'.
讓這個指令繼續執行前景。如要在詳細模式中執行
將 --verbose
或 -v
標記套用至 fx serve
。
練習:執行偵錯工具並列出執行中的程序
持續執行存放區伺服器,並設定要解析的 Fuchsia 目標 就能執行指令來解析 並在命令中執行元件
首先,執行記錄檔以便瞭解情況:
ffx log --filter debug_agent
在單獨的終端機中執行上述指令,輸出結果將為空白。退出
執行指令我們在此篩選 debug_agent
,因為系統會
必須先解析該套件,才能執行偵錯工具。
在另一個終端機中,將偵錯工具連線至執行中的系統:
ffx debug connect
這個指令應會啟動 zxdb
,並將您放置在互動式殼層。如果發生以下情況:
切換到其他執行 ffx log
的終端機,就會看到
輸出內容為:
[01949.544917][pkg-resolver] INFO: attempting to resolve fuchsia-pkg://fuchsia.com/debug_agent as fuchsia-pkg://devhost/debug_agent with TUF
[01949.624075][pkg-resolver] INFO: updated local TUF metadata for "fuchsia-pkg://devhost" to version RepoVersions { root: 9, timestamp: Some(1715399460), snapshot: Some(1715399460), targets: Some(1715399460) } while getting merkle for TargetPath("debug_agent/0")
[01949.835760][pkg-resolver] INFO: resolved fuchsia-pkg://fuchsia.com/debug_agent as fuchsia-pkg://devhost/debug_agent to 3f9783abed30d70b72d5f0730bd6e6033481073126aac0b74cbbf2d14909497e with TUF
[01949.882891][debugger] INFO: [main_launcher.cc(182)] Start listening on FIDL fuchsia::debugger::Launcher.
系統會嘗試解析 debug_agent
套件,並設法解決
從設定的 devhost
存放區擷取解析後,
啟動了元件,用於監聽偵錯工具啟動器通訊協定。
返回 zxdb
後,您現在可以執行 ps
,查看以下項目的執行中程序清單:
以及系統
[zxdb] ps
j: 1033 root
p: 1102 bin/component_manager
j: 1649
j: 1780 bootstrap/console fuchsia-boot:///console#meta/console.cm
p: 1822 console.cm
j: 1989 bootstrap/archivist fuchsia-boot:///archivist#meta/archivist.cm
p: 2051 archivist.cm
j: 2064 bootstrap/console-launcher fuchsia-boot:///console-launcher#meta/console-launcher.cm
...