探索元件

ffx component explore 指令會啟動互動式殼層,讓您探索在目標裝置上執行的 Fuchsia 元件內部。

概念

ffx component explore 指令會啟動範圍限定為目標元件的「Dash」程序。透過這個 Dash 程序,您可以:

  • 請使用熟悉的 POSIX 指令,例如 lscatgrep
  • 探索元件的輸入和傳出功能。

Dash 是之前用於 Fuchsia 專案其他工具的指令解譯器,例如 fx shell、序列主控台、終端機視窗和 virtcon。Dash 可以為開發人員提供熟悉的 ffx component explore 體驗 (例如 cdls),以便瀏覽 Fuchsia 元件中的聊天室,例如:

[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ ls
exposed
ns
out
runtime
svc
$

不過,與 fx shell 不同的是,命名空間僅包含元件的傳入和傳出功能。這項限制意味著您可以在與元件看到的環境中進行探索,幾乎完全相同。

探索元件

如要連線至 Fuchsia 元件並啟動互動式殼層,請執行下列指令:

ffx component explore COMPONENT_IDENTIFIER

COMPONENT_IDENTIFIER 替換為目標元件的網址網址執行個體 ID。這個指令也接受針對這些 ID 進行不重複的部分比對。

以下範例指令會啟動互動式殼層 ($) 探索 /bootstrap/archivst 元件:

[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$

在本指南的所有範例中,主機機器終端機的殼層提示會以 [host]$ 表示,而元件互動殼層的提示則以 $ 表示,不含 [host] 前置字串。為了不同定義,[host]$ 表示指令會在主機的終端機上執行,$ 表示指令是在連線至目標元件的互動式殼層上執行。

本指南在大多數範例中,也會使用 /bootstrap/archivist (這是路徑名稱) 做為目標元件。實務上,這個引數應替換成目標元件的元件 ID。

探索元件可用的功能

如要探索目標元件的功能,請前往元件互動殼層中的 /ns 目錄。/ns 目錄包含元件的命名空間,與元件所看到的命名空間完全相同,例如:

[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ cd ns
$ ls
config
events
pkg
svc

如要讓殼層的命名空間與元件命名空間相符,請使用 -l (或 --layout) 標記,例如:

[host]$ ffx component explore /bootstrap/archivist -l namespace
Moniker: /bootstrap/archivist
$ ls
config
events
pkg
svc

如要進一步瞭解這些目錄,請參閱 ffx 元件探索中的命名空間根為何?

探索元件公開的功能

/exposed 目錄包含從目標元件向父項公開的功能,例如:

[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ cd exposed
$ ls
diagnostics
fuchsia.diagnostics.ArchiveAccessor
fuchsia.diagnostics.FeedbackArchiveAccessor
fuchsia.diagnostics.LegacyMetricsArchiveAccessor
fuchsia.diagnostics.LoWPANArchiveAccessor
fuchsia.diagnostics.LogSettings
fuchsia.logger.Log
fuchsia.logger.LogSink

探索元件提供的功能

如果目標元件正在裝置上執行,/out 目錄會包含元件目前提供的所有功能,例如:

[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ cd out
$ ls
diagnostics
svc
$ cd svc
$ ls
fuchsia.diagnostics.ArchiveAccessor
fuchsia.diagnostics.FeedbackArchiveAccessor
fuchsia.diagnostics.LegacyMetricsArchiveAccessor
fuchsia.diagnostics.LoWPANArchiveAccessor
fuchsia.diagnostics.LogSettings
fuchsia.logger.Log

探索元件的偵錯執行階段資料

如果目標元件在裝置上執行,/runtime 目錄會包含元件執行元件提供的偵錯資訊,例如:

[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ cd runtime/elf
$ ls
job_id
process_id
process_start_time
$ cat process_id
2542

在元件殼層中使用自訂指令列工具

如要在目標元件的殼層環境中新增自訂指令列工具,請使用 --tools 旗標將工具套件的網址提供給 ffx component explore 指令,例如:

[host]$ ffx component explore /core/network --tools fuchsia-pkg://fuchsia.com/net-cli
Moniker: /core/network
$ net help
Usage: net <command> [<args>]

commands for net-cli

Options:
  --help            display usage information

Commands:
  filter            commands for packet filter
  if                commands for network interfaces
  log               commands for logging
  neigh             commands for neighbor tables
  route             commands for routing tables
  dhcp              commands for an interfaces dhcp client
  dhcpd             commands to control a dhcp server
  dns               commands to control the dns resolver

在元件的殼層中執行指令,以非互動的方式執行

如要在元件的裝置端殼層中執行指令,並以非互動方式接收 stdoutstderr 和結束程式碼,請使用 -c (或 --command) 旗標,例如:

[host]$ ffx component explore /bootstrap/archivist -c "cat /runtime/elf/process_id"
Moniker: /bootstrap/archivist
2542

附錄

為什麼看不到父項的子項元件?

Fuchsia 不允許直接從父項存取子項元件。先前,藉由瞭解元件拓撲存取子項元件的功能,工具不僅變得雜亂,而且仰賴經過硬式編碼的路徑來掌握系統拓撲。

建議您改用下列替代方式:

  • 明確地將子項的功能轉送至父項元件。
  • 探索子項元件。

這與 ffx 元件的執行方式有何不同?

ffx component run 指令會在元件拓撲中的指定集合建立及啟動元件。不過,ffx component run 不提供互動功能。另一方面,ffx component explore 可讓您透過互動方式探索拓撲中的任何現有元件。總而言之,您可以使用 ffx component explore 來瞭解剛才使用 ffx component run 建立的元件。

ffx 元件探索的命名空間根目錄為何?

根據預設,ffx component explore 指令會在命名空間根目錄 (/) 建立包含下列目錄的虛擬檔案系統:

目錄 說明
/.dash 包含 Dash 所需的二進位檔。
/exposed 包含所有公開的功能。
/ns 包含元件的命名空間,與您元件看到的命名空間完全相同。
/svc 包含 Dash 所需的功能。

如果目標元件正在裝置上執行,也會具有下列目錄:

目錄 說明
/out 包含元件目前提供的所有功能。
/runtime 包含元件執行元件提供的偵錯資訊。

如果您在 ffx component explore 中設定 --layout namespace 旗標,殼層的命名空間就會與元件的命名空間相符。

我可以使用 Dash 殼層存取 Zircon 控點或撥打 FIDL 通話嗎?

無法直接從指令解譯器支援這項操作。

如何提出 ffx 元件探索的功能要求?

請前往 ComponentFramework > Tools Issue Tracker 元件提交所有功能要求。