開始使用 Zircon

查看 Zircon 原始碼

本指南假設 Fuchsia 專案已在 $FUCHSIA_DIR 中進行檢查, 和 fx 已設定完成。

使用預設工具鍊建構 Zircon

fx 指令會納入用於設定、建構及互動的各種工具 。fx set 指令用於指定產品和主機板 這個架構的簡短總覽舉例來說,如要將 arm64 的建構目標設為 Zircon, 執行下列指令:

fx set bringup.arm64

Fuchsia 運用 產品到 以及建立建構目標的集合 拆解產品 是最小的產品,功能組合最小。

下列指令會列印其他產品設定清單:

fx list-products

以下指令會顯示已定義的 Jamboard 架構清單:

fx list-boards

如要執行建構,請執行下列指令:

fx build

建構結果會儲存在 $FUCHSIA_DIR/out/default 中。

明確設定目標工具鍊

根據預設,Fchsia 會使用 clang 工具鍊。您可以使用以下方式將其設為 gcc: 含有 fx setvariants 引數:

fx set bringup.x64 --variant gcc

您也可以使用變體標記來啟用 asan。

為所有目標建構 Zircon

您可以使用 fx multi 為所有目標建構應用程式,並使用包含所有 要建構的規格您可以在 $FUCHSIA_DIR/out/<product>.<board>.variant。多重建構規格範例 是 bringup-cq,也就是 概略說明 CQ 測試建構的內容。

請先針對所有目標建構應用程式再提交,確保版本能正常運作 架構

QEMU

如果您只測試實際硬體,但模擬器會略過此步驟,可以略過這個步驟 也能快速進行本機測試

如要瞭解建構和建構方式,請參閱 QEMU。 搭配 zircon 使用 QEMU

建構工具鍊 (選用)

如果預建工具鍊二進位檔不適合您,您可以自行建構 從基本上游來源取得的成果

  • 根據預設,Clang 工具鍊會用來建構 Zircon;如果您透過 variants = [ "clang" ]variants = [ "asan" ]
  • 根據預設,Clang 工具鍊也會用於建構主機端程式碼,但任何 適用於建構主機的 C++14 工具鍊應可正常運作。
  • 您也可以使用 GCC 工具鍊。

根據您想要的方式建構 Zircon,您可以視需求建構其中一種,也可以兩者都建構。

GCC 工具鍊

我們使用 GNU binutils 2.301 和 GCC 8.2, --enable-initfini-array --enable-gold 且使用 --target=x86_64-elf --enable-targets=x86_64-pep 代表 x86-64,ARM64 則為 --target=aarch64-elf

對於 binutils,我們建議使用 --enable-deterministic-archives,但這麼做 並不需要取得可正常運作的版本。

如果是 GCC,則需要將 MAKEOVERRIDES=USE_GCC_STDINT=provide 傳遞至 make 指令列。這可確保 stdint.h GCC 安裝一次 是獨立運作的 (來源中的 stdint-gcc.h),而不是使用 #include_next 並預期他處安裝另一個 stdint.h 檔案。

只需要支援 C 和 C++ 語言,且不需要其他目標程式庫 而不是用 libgcc,因此您可以自由運用configure多種 停用其他功能,讓 GCC 版本更迅速地使用 減少儲存空間 (例如--enable-languages=c,c++ --disable-libstdcxx --disable-libssp --disable-libquadmath。請參閱 GCC 安裝說明文件 ,掌握更多詳細資訊。

您可能需要使用各種其他 configure 切換鈕或其他先決條件,才能執行 執行特定工作請參閱 GNU 說明文件。

Clang/LLVM 工具鍊

我們會使用 Clang 的中繼快照,並經常更新到新的快照。不限 具有近期的 Clang 版本,並支援程式語言中的 x86_64aarch64 應該能正常運作。您需要也包含執行階段程式庫的工具鍊。 我們通常也會讓主機和 *-fuchsia 個目標。請參閱這裡的說明 深入瞭解我們如何建構 Clang

設定工具鍊的建構引數

如果您使用的是預先建構的工具鍊,可以略過這個步驟,因為 會自動尋找。

設定指向工具鍊安裝位置的建構引數:

fx set bringup.x64 --variant clang --args clang_tool_dir = "<absolute path to>/clang-install/bin/"

或 GCC:

fx set bringup.x64 --variant gcc --args gcc_tool_dir = "<absolute path to>/gcc-install/bin/"

請注意,*_tool_dir 結尾應為斜線。如果 clanggcc PATH 適用於 Zircon,您可以直接使用空白前置字串。

將檔案複製到 Zircon 並從中複製檔案

設定本機連結 IPv6 後,就能使用 fx cp 將檔案複製到及複製來源檔案 裝置。

包含額外的使用者空間檔案

Zircon 版本會建立包含必要使用者空間的啟動檔案系統映像檔 系統開機的元件 (例如裝置管理員、部分裝置驅動程式 等)。核心可以包含第二個啟動檔案系統映像檔 是由 QEMU 或系統啟動載入程式做為 ramdisk 映像檔。

如要建立這類啟動檔案系統映像檔,請使用 建構應用程式它可以組合任一來源目錄的啟動檔案系統映像檔 時,指定目錄中的所有檔案及其子目錄都會包含在內) 或透過資訊清單檔案,依據檔案個別指定 包括

$BUILDDIR/tools/zbi -o extra.bootfs @/path/to/directory

echo "issue.txt=/etc/issue" > manifest
echo "etc/hosts=/etc/hosts" >> manifest
$BUILDDIR/tools/zbi -o extra.bootfs manifest

在系統啟動的 Zircon 系統中,啟動檔案系統中的檔案會顯示在 /boot 底下,因此 在上述資訊清單範例中,「主機」檔案會出現在 /boot/etc/hosts 中。

網路啟動

透過 Gigaboot 和 Zirconboot 這兩種機制支援網路啟動功能。 Gigaboot 是採用 EFI 技術的系統啟動載入程式,而 Zirconboot 則是可以 可讓最小的 Zircon 系統做為 zircon 的系統啟動載入程式。

無論是透過 EFI 啟動的系統 (例如 Acer 與 NUC),都可以使用上述任一選項。啟用 而 zirconboot 可能才是網路啟動的唯一選項。

搭乘 Gigaboot

GigaBoot20x6 系統啟動載入程式支援簡易網路 啟動通訊協定 (透過 IPV6 UDP),不需要任何特殊主機 設定或具備特殊存取權限

透過 IPV6 連結本機位址和多點傳送功能 可讓要啟動的裝置通告其可開機性,且主機 找到這個映像檔並傳送系統映像檔到該映像檔中

$BUILDDIR/tools/bootserver $BUILDDIR/zircon.bin

# if you have an extra bootfs image (see above):
$BUILDDIR/tools/bootserver $BUILDDIR/zircon.bin /path/to/extra.bootfs

根據預設,開機伺服器會持續執行,且每當伺服器觀察到網路開機時 信標,會將核心 (以及啟動檔案系統 (如有提供)) 傳送到該裝置。如果發生以下情況: 傳遞 -1 選項,則開機伺服器會在成功開機後結束。

透過 Zirconboot

Zirconboot 是允許 Zircon 系統做為系統啟動載入程式的機制 。Zirconboot 與 Gigaboot 具有相同的啟動通訊協定 相同。

如要使用 zirconboot,請透過netsvc.netboot=true 核心指令列zirconboot 啟動時,會嘗試擷取並啟動 並且從在連接主機上執行的開機伺服器中進入 Zircon 系統。

網路記錄檢視

預設版本的 Zircon 包含網路日誌服務, 系統對連結本機 IPv6 UDP 進行記錄請注意,這只是一個小工程 通訊協定也會在某些情況下變更

目前,如果您使用 -N 旗標在 QEMU 上執行 Zircon 硬體,以及支援乙太網路介面 (ASIX USB Dongle 或 Intel 乙太網路) 的硬體 NUC) 上,Loglistener 工具將觀察透過本機連結播送的記錄:

$BUILDDIR/tools/loglistener

偵錯

如需在 Zircon 環境中偵錯的隨機提示,請參閱 偵錯

提交變更


  1. binutils 2.30 版在 make check 版本 aarch64-elfx86_64-elf 設定。這些問題在 上游 binutils-2_30-branch Git 分支版本,我們實際上 建構應用程式不過,2.30 的發布版本適用於建構 Zircon;該資料來源 但本身的測試套件發生了一些錯誤