查看 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 set
的 variants
引數:
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_64
和 aarch64
應該能正常運作。您需要也包含執行階段程式庫的工具鍊。
我們通常也會讓主機和
*-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
結尾應為斜線。如果 clang
或 gcc
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 環境中偵錯的隨機提示,請參閱 偵錯。
提交變更
- 請參閱 CONTRIBUTING.md
-
binutils
2.30 版在make check
版本aarch64-elf
和x86_64-elf
設定。這些問題在 上游binutils-2_30-branch
Git 分支版本,我們實際上 建構應用程式不過,2.30 的發布版本適用於建構 Zircon;該資料來源 但本身的測試套件發生了一些錯誤↩