ffx component explore
命令会启动一个交互式 shell,供您探索
在目标设备上运行的 Fuchsia 组件的内部机制。
概念
ffx component explore
命令会启动作用域限定的 Dash 进程
添加到目标组件通过这个 Dash 流程,您可以:
- 使用熟悉的 POSIX 命令,例如
ls
、cat
和grep
。 - 探索组件的传入和传出功能。
Dash 是之前在 Fuchsia 项目中的其他工具中使用的命令解释器,
例如 fx shell
、串行控制台、终端窗口和 virtcon
。Dash 提供
ffx component explore
为开发者提供熟悉的体验,例如 cd
和 ls
,
在 Fuchsia 组件中导航空间,例如:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ ls
exposed
ns
out
runtime
svc
$
不过,与 fx shell
不同的是,命名空间仅包含组件的传入事件
和传出功能这一限制意味着您几乎可以在一个环境中
与组件所看到的完全相同
探索组件
如需连接到 Fuchsia 组件并启动交互式 shell,请运行以下命令:
ffx component explore COMPONENT_IDENTIFIER
将 COMPONENT_IDENTIFIER 替换为名称, 目标组件的网址或实例 ID。命令 还接受这些标识符的唯一部分匹配。
以下示例命令会启动一个交互式 shell ($
),供您探索
/bootstrap/archivst
组件:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$
在本指南的所有示例中,宿主机终端中的 shell 提示符为
用 [host]$
表示,而来自组件交互式 shell 的提示是
单独表示为 $
,不带 [host]
前缀。换句话说
[host]$
表示该命令在宿主机的终端上运行,而 $
表示命令在连接到目标组件的交互式 shell 上运行。
本指南还对目标组件使用了 /bootstrap/archivist
(简称)。
在大多数示例中都是如此。实际上,应将此参数替换为组件标识符
组件的名称
探索组件可用的功能
如需了解目标组件的功能,请导航到 /ns
目录
。/ns
目录包含该组件的
命名空间名称,与组件看到的完全相同,例如:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ cd ns
$ ls
config
events
pkg
svc
如果您希望 shell 的命名空间与组件命名空间匹配,
使用 -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
在组件的 shell 中使用自定义命令行工具
要将自定义命令行工具添加到目标组件的 Shell 环境中,请使用
--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
在组件的 shell 上以非交互方式运行命令
在组件的设备端 shell 中以非交互方式运行命令并接收
stdout
、stderr
和退出代码,请使用 -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
标志,则 shell 的
与组件的命名空间相匹配。
我可以使用 Dash shell 访问 Zircon 句柄或进行 FIDL 调用吗?
命令解释器无法直接支持此功能。
如何提交 ffx 组件探索功能请求?
请通过以下方式提交所有功能请求:
ComponentFramework > Tools
问题跟踪器
组件。