本文說明如何將元件直接新增至元件 執行個體樹狀結構,並在執行階段與這些結構互動。
Fuchsia 除了 元件架構 針對特定用途如要使用 下列架構,請改為參閱對應的指南:
- 工作階段元件: 建構及執行工作階段
- 測試元件: 執行 Fuchsia 測試
概念
執行元件前,您應瞭解下列概念:
- 在執行階段中, 元件執行個體樹狀結構 人脈 元件執行個體 組成父項和子項關係階層
- 元件執行個體會經歷四個主要的生命週期狀態:建立、 啟動、停止和刪除
- A 罩杯 元件 moniker 識別元件執行個體 透過頂層路徑找出這層結構中的重要檔案
- 元件執行個體會「靜態」宣告為
容器中其他元件的子項
元件資訊清單
或動態建立
查看在執行階段期間的元件集合每個執行個體
由元件
name
和url
組成。 - A 罩杯 元件網址 會識別元件元件 網址會由元件架構解析,通常會由元件架構中的資源 套件。
如要進一步瞭解元件執行,請參閱 元件生命週期。
元件執行個體
執行元件的第一步是將新元件執行個體新增至 。元件執行個體在樹狀結構中的位置會決定該元件執行個體 可供使用 功能 ,直接在 Google Cloud 控制台實際操作。
探索靜態元件
靜態元件會宣告為
。您可以使用 ffx component show
判定路徑名稱和
靜態元件執行個體的元件網址:
ffx component show COMPONENT_NAME
將 COMPONENT_NAME
替換為元件名稱。以下範例
會顯示 pkg-resolver
元件的指令輸出內容:
$ ffx component show pkg-resolver
Moniker: /core/pkg-resolver
URL: fuchsia-pkg://fuchsia.com/pkg-resolver#meta/pkg-resolver.cm
Type: CML static component
Component State: Resolved
Execution State: Running
...
您無法在執行階段建立或刪除靜態元件執行個體。
管理動態元件
系統會在集合內的執行階段建立動態元件。別擔心!您可以使用
ffx component create
:建立新的元件執行個體,提供目標
現有集合中的路徑名稱,以及一個用來解決該集合的元件網址
元件:
ffx component create TARGET_MONIKER COMPONENT_URL
將 TARGET_MONIKER
替換為新元件的目的地路徑名稱
現有集合內,COMPONENT_URL
則是位置
元件。舉例來說,下列指令會
ffx-laboratory
集合中名為 hello-world
的元件執行個體:
$ ffx component create /core/ffx-laboratory:hello-world fuchsia-pkg://fuchsia.com/hello-world-rust#meta/hello-world-rust.cm
URL: fuchsia-pkg://fuchsia.com/hello-world-rust#meta/hello-world-rust.cm
Moniker: /core/ffx-laboratory:hello-world
Creating component instance...
同樣地,使用 ffx component destroy
刪除動態元件執行個體
以達到最佳效果:
ffx component destroy TARGET_MONIKER
將 TARGET_MONIKER
替換為要刪除的元件的路徑名稱。
下列範例會刪除在上述步驟中建立的 hello-world
元件:
$ ffx component destroy /core/ffx-laboratory:hello-world
Moniker: /core/ffx-laboratory:hello-world
Destroying component instance...
元件執行
樹狀結構中有元件執行個體後,您就可以啟動和停止目標。
使用 ffx component
存取這個執行個體。
啟動執行個體
使用 ffx component start
明確啟動元件執行個體:
ffx component start TARGET_MONIKER
將 TARGET_MONIKER
替換為元件的路徑名稱,即可開始使用。
以下範例會啟動先前建立的 hello-world
元件:
$ ffx component start /core/ffx-laboratory:hello-world
Moniker: /core/ffx-laboratory:hello-world
Starting component instance...
停止執行個體
使用 ffx component stop
終止執行中的元件執行個體
使用 Moniker:
ffx component stop TARGET_MONIKER
將 TARGET_MONIKER
替換為要停止的元件的路徑名稱。
下列範例停止按照上方啟動的 hello-world
元件執行:
$ ffx component stop /core/ffx-laboratory:hello-world
Moniker: /core/ffx-laboratory:hello-world
Stopping component instance...
執行元件
ffx component run
指令提供了執行基本元件的快速入門導覽課程
開發階段這是 ffx component create
的捷徑,後面接著
ffx component start
:
ffx component run TARGET_MONIKER COMPONENT_URL
將 TARGET_MONIKER
替換為新元件的目的地路徑名稱
現有集合內,COMPONENT_URL
則是位置
元件。舉例來說,下列指令會
ffx-laboratory
中名為 hello-world-rust
的元件執行個體
集合:
$ ffx component run /core/ffx-laboratory:hello-world-rust fuchsia-pkg://fuchsia.com/hello-world-rust#meta/hello-world-rust.cm
URL: fuchsia-pkg://fuchsia.com/hello-world-rust#meta/hello-world-rust.cm
Moniker: /core/ffx-laboratory:hello-world-rust
Creating component instance...
Starting component instance...
上述範例相當於執行下列個別 ffx
指令:
$ ffx component create /core/ffx-laboratory:hello-world-rust fuchsia-pkg://fuchsia.com/hello-world-rust#meta/hello-world-rust.cm
$ ffx component start /core/ffx-laboratory:hello-world-rust
元件更新方式
變更元件時,通常需要更新其中一個元件 應用程式的執行個體舉例來說,您可以變更元件的 二進位檔,然後重新啟動元件,與新的二進位檔執行。或者,您可以變更 而在資訊清單中加入新能力路徑,並想讓這類能力 可在裝置上查看的路線。
使用 ffx component reload
指令,是最快速且完整的方式
重新載入元件。但不是唯一方法
方法,或許可以針對特殊用途使用更精確的作業。
本文將概略說明這些方法,在下方提供完整說明。
摘要
指令 | 說明 | 最新快訊 包裹 | 最新快訊 資訊清單 | 保留 資源 |
---|---|---|---|---|
ffx 元件重新載入 | 轉機次數 更新 開始 | 好啊 | 好啊 | 好啊 |
ffx 元件 destroy/create/start | 破壞 然後開始 | 好啊 | 好啊 | 否 |
ffx 元件執行作業 --recreate | 破壞 然後開始 | 好啊 | 好啊 | 否 |
ffx 元件 停止/開始 | 和 開始 不含 毀滅 | 否 | 否 | 好啊 |
- 「更新套件」這表示套件碼會在 已重新載入。
- 「更新資訊清單」這表示系統會重新載入資訊清單快取,並將 包含 FIDL 檔案的轉送和其他資訊
- 「保留資源」也就是說,儲存空間等資源 而會保留保留版本。
重新載入
更新元件的程式碼和資訊清單,同時保留具有以下功能的資源:
ffx component reload TARGET_MONIKER
這個指令會先關閉該元件,然後重新載入並重新啟動。 這個指令會更新套件和資訊清單,但不會刪除元件或 釋出資源
reload
指令會保留儲存空間等元件的資源。這個
如果初始化、取得或重建速度較慢,保留功能就能派上用場
處於特定狀態的偵錯資源
刪除元件時,重新載入的速度也比較快,例如 需要關閉再重新啟動工作階段或目標時 裝置/模擬器。
刪除/建立/開始
如要完全重新載入元件並捨棄取得的資源,請先刪除 現有的元件執行個體,然後重新啟動您可以使用下列功能:
$ ffx component destroy TARGET_MONIKER
$ ffx component create TARGET_MONIKER COMPONENT_URL
$ ffx component start TARGET_MONIKER
這個序列會重新載入套件和資訊清單,因此程式碼會 能力變更也會更新不過,如果刪除這個元件 就會釋出所有資源如果您的目標是: 從完全重新初始化的元件開始著手。
執行 --recreate
另一個方便的指令類似刪除/建立/開始序列
搭配 --recreate
使用 run
指令:
ffx component run TARGET_MONIKER COMPONENT_URL --recreate
停止/開始
雖然更新不是更新主要方式,但停止更新會連帶影響 然後啟動元件,該元件將會部分更新
$ ffx component stop TARGET_MONIKER
$ ffx component start TARGET_MONIKER
假設 ffx serve
這類套件管理員正在執行,那麼最新版的
載入並執行元件的程式碼不過,基於快取方式
Fuchsia 元件架構中運作,因此資訊清單不會更新。
資訊清單包含元件轉送設定,以及
*.cm
檔案。因此,如果您變更元件的能力路徑,
啟動元件不會納入這些變更。
ffx-laboratory
ffx-laboratory
是元件集合,可以提供一組受限的
也就是開發技術向 Google Cloud 支援團隊
下列元件中的元件:
- 通訊協定功能
fuchsia.logger.LogSink
:記錄記錄訊息fuchsia.process.Launcher
:建立新程序
- 儲存空間功能
tmp
:臨時儲存空間 (非永久儲存空間)data
:由「/tmp
」支援的模擬永久儲存空間cache
:由「/tmp
」支援的模擬快取儲存空間
- 目錄功能
/dev
:裝置驅動程式庫devfs
(由驅動程式管理員提供)/boot
:元件管理服務提供的唯讀bootfs
ffx-laboratory
是 transient
集合。
這個集合中的元件執行個體即使停止,仍會保留下來。目的地:
刪除此集合中的元件執行個體,請使用 ffx component destroy
指令
疑難排解
本節包含執行 所有元件
無法解析元件
使用 ffx component start
或 ffx component run
時,您可能會看到
如果元件架構無法解析元件執行個體,就會發生下列錯誤:
$ ffx component run /core/ffx-laboratory:hello-world fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm
URL: fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm
Moniker: /core/ffx-laboratory:hello-world
Creating component instance...
Starting component instance...
Lifecycle protocol could not bind to component instance: InstanceCannotResolve
當元件網址無法解析為有效元件時,就會發生這種情況 資訊清單。
如要解決這個問題,請確認下列事項:
元件執行個體已存在
使用 ffx component create
或 ffx component run
時,您可能會看到
如果元件執行個體已存在,就會發生下列錯誤:
$ ffx component run /core/ffx-laboratory:hello-world fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm
URL: fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm
Moniker: /core/ffx-laboratory:hello-world
Creating component instance...
Component instance already exists. Use --recreate to destroy and recreate a new instance, or --name to create a new instance with a different name.
如果其他元件已使用目標路徑名稱,就會發生這種錯誤 執行個體。
如要解決這個問題,請使用 ffx component
destroy
指令手動刪除執行個體:
$ ffx component destroy /core/ffx-laboratory:hello-world
Moniker: /core/ffx-laboratory:hello-world
Destroying component instance...
如果您使用的是 ffx component run
,請新增 --recreate
標記以刪除
並重新建立執行個體:
$ ffx component run /core/ffx-laboratory:hello-world fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm --recreate
URL: fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm
Moniker: /core/ffx-laboratory:hello-world
Creating component instance...
Component instance already exists. Destroying...
Recreating component instance...
Starting component instance...
或者,新增 --name
旗標,建立具有不同
名稱:
$ ffx component run /core/ffx-laboratory:hello-world fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm --name hello-world-2
URL: fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm
Moniker: /core/ffx-laboratory:hello-world-2
Creating component instance...
Starting component instance...