FHO (Fuchsia 主機物件) 是一組程式庫介面,用於連結 ffx
與子工具搭配使用,無論是編譯為 ffx
Cli 二進位檔或另外
建構樹狀結構或 SDK 中的二進位檔這個設計可以允許泛舟
具備前瞻相容性,讓以 FHO 建構的二進位檔
透過大量不同版本相互通訊
在 ffx 子工具 (以 ffx 前置字串執行的頂層指令) 中,FHO 為 最好是這款程式與裝置之間的相容性層 執行 Fuchsia 的虛擬機器,讓工具忽略所有設定 才能連上裝置、為各項服務建立 FIDL 管道 裝置,並記錄與互動情形相關的實用資訊。
FHO 主機端 (ffx
CLI)
在 FHO 架構中,主機二進位檔 (ffx
) 負責找出
請提供子工具執行所在環境的重要資訊。
可能包含下列詳細資料:
- 使用者和專案設定檔及其內容。
- 管理使用中的 Daemon 及其提供的服務。
- 探索和連結到目標裝置,特別是 使用預設裝置 (如果有的話)。
- 發現專案和/或 SDK 內子工具的位置。
- 發現 SDK 及驗證裝置之間的版本限制 SDK 和子工具
大多數工具都應建立為外部程序,並經由
SDK 或建構輸出目錄,但部分仍內建於 ffx
二進位檔中。
這些工具不一定要與單獨編譯的工具不同
但相容性限制較為有限不過
有些工具甚至不需要 SDK 就能存取
本文件的其餘部分介紹的是獨立編譯的子工具 如何發掘及執行這些動作
FHO 工具端
在理想情況下,以 FHO 為基礎的子工具只是
Fuchsia,但在具有 ffx
主機結構定義資訊的主機上執行
二進位檔,用於連線至裝置上的服務。
不過,由 ffx
執行的工具具有特殊的進入點,可以
傳達讓工具正確執行所需的背景資訊。
還需要一些中繼資料,ffx
能用來探索、
確認相容性,並執行相關測試
工具中繼資料
工具通常會有與其相關聯的 JSON 中繼資料檔案, 如下所示:
{
"name": "echo",
"description": "run echo test against the daemon",
"requires_fho": 0,
"fho_details": {
"FhoVersion0": {}
}
}
這個 JSON 檔案旨在將版本資訊提供給 ffx
,以及
執行 ffx help
或 ffx commands
時將輸出的資訊
上述檔案為「版本 0」FHO 說明:最精簡的內容
子工具介面的起點
FHO 中繼資料版本
系統會依序為 FHO 版本加上編號。任一指定廣告素材的支援版本
子工具的判斷依據是 requires_fho
鍵到數字的範圍
貼在 fho_details
對應中最高值項目的結尾處。子工具
就能以這兩個值之間的任何版本執行。
在上述範例中,子工具「只」支援 FHO 版本 0。如果主辦人 此工具不支援版本 0,必須忽略子工具的例項 以便使用在其他位置找到的新版本;如果沒有相符的版本,則會發生錯誤 完全都能找到。
主機工具應使用
fho_details
。舉例來說
如果您執行的ffx
版本 3
與
以下中繼資料:
{
"name": "echo",
"description": "run echo test against the daemon",
"requires_fho": 0,
"fho_details": {
"FhoVersion2": { "some_thing": "is_something" },
"FhoVersion4": { "some_thing_else": "is_something_else" },
}
}
一般而言,主機工具會從 FhoVersion4
提取中繼資料
並以 FhoVersion3
程式的形式執行程式。
隨著時間的推移,中繼資料可進行漸進式及破壞性變更。 同時讓工具本身支援多種版本 您隨時可以在目前版本的中繼資料欄位中新增漸進式變更 舊版主機工具會忽略這些版本,新版則會使用它們。
如果需要破壞中繼資料,所有新項目 ,而舊版本將繼續使用舊版中繼資料結構。
子工具允許加入 FhoVersion0
區段。
因此即使 requires_fho
較高,也表示可在
使用精簡模式FhoVersion0
部分不應包含任何
鍵。
工具探索
目前子工具的搜尋位置如下:
- 在 FFX 二進位檔本身中。
- 位於專案專屬的建構輸出位置。
- 已設定 SDK 的中繼資料。
路徑型探索
如果 ffx
已設定建構輸出目錄或任何其他位置
搜尋子工具,可能會搜尋這些位置,找出符合
模式:
/ffx-([-_a-zA-Z0-9]/)
或 ffx-toolname
,其中 toolname
是子指令
呼叫容器的名稱請注意,「不要」處理進一步的連字號
以及更深層的巢狀結構,例如ffx-some-sub-tool
以 ffx some-sub-tool
的身分執行,
而非ffx some sub tool
。子工具負責自己的巢狀指令
但 FHO 程式庫本身可能會提供輔助工具。
這些檔案必須伴隨名稱與 .json
相同的檔案
副檔名。這個檔案將是前述章節所述的中繼資料
且必須符合執行的二進位檔詳細資料 (例如 name
頂層的金鑰必須與二進位檔和中繼資料中的 toolname
相同
。
符合此模式的檔案但沒有隨附中繼資料檔案 不會視為子工具,系統會予以忽略。
SDK 探索
在 SDK 中,您可以透過中繼資料搜尋找到工具。
有人搜尋 SDK 資訊清單,搜尋類型為 atoms
ffx_tool
,指向 SDK 相關
中繼資料和可執行二進位檔的位置。
如要執行子指令,與 ffx_tool
類型相符的 SDK 項目將會
直到找到相符的名稱為止。與路徑式搜尋一樣,在搜尋中使用連字號
這個名稱不會建立更深層的指令名稱巢狀結構。
主機工具可將 SDK 中的主要 ffx
host_tool
二進位檔視為
「預設」命令提示詞,讓系統在找不到子工具的情況下,將其叫用為 FHO
版本 0 (基本上,子工具會以 ffx
的形式處理,
一個子指令)。
工具介面
如上所述,中繼資料在 ffx
之間宣告一個版本化介面
二進位檔和正在執行的子工具目的在於透過這個介面
但從相對簡單地著手
破壞子工具中目前內建的所有預期行為。
子工具可能支援較舊版本的 FHO 介面
會納入其中繼資料,尤其是部分子工具
在 ffx
停止支援後,您還需要繼續實作 0 版
視其用於建構指令碼等項目而定。
FHO 版本 0
FHO 版本 0 是第一個簡易的 FHO 版本。僅支援 不應在 SDK 中加入版本 0,但 SDK 中包含的工具可能會 額外支援版本 0。
FHO 第 0 版子工具的叫用程序非常簡單。只要執行
含有發出呼叫 ffx
的確切引數,包括所有引數
給 ffx
本身。也就是說,如果叫用:
> ffx --isolate-dir "/tmp/blah" echo stuff
執行的 ffx
二進位檔會搜尋相符的 ffx-echo
二進位檔,
其最高通用支援版本為 0 時會以下列方式叫用:
> ffx-echo --isolate-dir "/tmp/blah" echo stuff
子工具必須支援各版本已知的所有頂層 ffx
引數
(共 ffx
個)。也透過環境變數執行
FFX_BIN_ENV
,指向頂層叫用的檔案系統路徑
ffx
是在下執行 (但不應覆寫),或可以執行
以便從子工具執行的相同內容環境重新開始處理
下方。
否則,子項程序會獲得相同的 (stdin,stdout,stderr)
原先 ffx 叫用會在下執行的三倍和環境變數。
原因是:
- 這可讓您在建構中直接叫用子工具,不必建構
主要
ffx
二進位檔,從版本的建構中移除不必要的目標 關鍵路徑 - 但不會幹擾需要完整功能的現有外掛程式 並控管執行時的輸入和輸出環境
- 因此,這個架構的第一版將著重於 瞭解建構這項能力的各個面向