ffx component explore
is an experimental ffx plugin that allows you to interactively explore the internals of fuchsia components. Unlike fx shell
, you only get access to your component‘s incoming & outgoing capabilities. This means you’re able to explore in an environment almost identical to what your component sees.
Currently, it launches a Dash process scoped to your component. In this process:
fx shell
.ls
, cat
and grep
.Note: The filesystem used in Dash
is not POSIX-compliant. Capabilities are presented as files and directories to aid in exploration.
Ensure your branch is synced to tip-of-tree with jiri update
.
Ensure that you are building an engineering product like core
, terminal
or workstation_eng
.
Start up an emulator and/or connect to a device.
Choose a component moniker and start exploring:
> ffx component explore /bootstrap/archivist $ ls bin exposed ns out runtime svc
See what is the namespace root for more details on these directories.
For the following sections, we use the /bootstrap/archivist
moniker. This should be replaced with the moniker of your component.
The /ns
directory contains the component's namespace, exactly as your component would see it.
> ffx component explore /bootstrap/archivist $ cd ns $ ls pkg data svc $ cd data $ ls logs.txt $ mv logs.txt logs2.txt $ mkdir captures
The /exposed
directory contains the capabilities exposed from your component to its parent.
> ffx component explore /bootstrap/archivist $ cd exposed $ ls fuchsia.foo.bar.MyProtocol
If a component is running, the /out
directory contains all the capabilities currently served by it.
> ffx component explore /bootstrap/archivist $ cd out $ ls diagnostics svc $ cd svc $ ls fuchsia.foo.bar.MyProtocol
If your component is running, the /runtime
directory contains debug information provided by the component runner.
> ffx component explore /bootstrap/archivist $ cd runtime/elf $ ls args process_id job_id $ cat process_id 7352
This isn‘t supported yet, but we’re working on it. Soon, we will add support for running custom command-line tools that can use your component's incoming/exposed capabilities.
This is great because:
.cmx
components means that we will no longer have support for CMX shell tools.fx shell
have access to more capabilities than they need.ffx component explore
provides a predictable directory structure that isn‘t tied to the component’s moniker.net
uses fuchsia.net.*
capabilities exposed by the netstack component.activity-ctl
uses fuchsia.activity.*
capabilities exposed by the activity
component.stash-ctl
uses fuchsia.stash.* capabilities exposed by the stash component.Dash{:.external} is the command interpreter used in fx shell
, serial console, terminal windows, virtcon, etc. We are using it as the experience for ffx component explore
because it is familiar and serves as a good starting point for cd
-ing and ls
-ing around to explore your component.
We do not allow accessing child components directly from the parent. Using knowledge of the component topology to access a child component's capabilities made tools brittle in fx shell
. Tools used to keep hard-coded paths to /hub-v2
which encoded knowledge about the system topology.
As an alternative, we recommend:
ffx component run
launches a component in a preset collection (ffx-laboratory
) and offers no interactive capabilities. ffx component explore
allows exploring any existing component in the topology interactively.
ffx component explore
creates a virtual file system at the namespace root that contains the following directories:
Directory | Description |
---|---|
/bin | contains a standard set of tools such as ls , cat , mkdir |
: : etc. : | |
/exposed | contains all exposed capabilities. |
/ns | contains the component's namespace, exactly as your component |
: : would see it. : | |
/svc | contains capabilities needed by Dash . |
If your component is running, the following directories are also present:
Directory | Description |
---|---|
/out | contains all capabilities currently being served by the component. |
/runtime | contains debug information served by the component’s runner. |
That is not supported directly from the command interpreter.
File all feature requests under the ComponentFramework > Tools
monorail component