<<../../_common/intro/_components_intro.md>>
<<../../_common/intro/_components_manager.md>>
<<../../_common/intro/_components_capabilities.md>>
<<../../_common/intro/_components_organization.md>>
In this exercise, you'll explore the component instance tree and look in detail at capability routing in action using some core system components.
<<../_common/_start_femu.md>>
Open another terminal window and use the component list
command to dump the system's component tree:
ffx component list
You should see output similar to the (truncated) list below:
/ /bootstrap /bootstrap/archivist /bootstrap/base_resolver /bootstrap/console /bootstrap/console-launcher /bootstrap/decompressor /bootstrap/device_name_provider /bootstrap/driver_manager /bootstrap/fshost /bootstrap/kernel_debug_broker /bootstrap/miscsvc /bootstrap/netsvc /bootstrap/power_manager /bootstrap/ptysvc /bootstrap/pwrbtn-monitor /bootstrap/shutdown_shim /bootstrap/sysinfo /bootstrap/virtual_console /core /core/activity ... /core/detect /core/font_provider /core/log-stats /core/remote-control /core/sampler /core/system-update-committer /core/temperature-logger /core/test_manager /core/full-resolver /startup
This list represents the component instance tree, with organizational components like bootstrap
, core
, and startup
forming sub-trees underneath the root.
The component show
command provides more details about each component.
Use this command to see the details of http-client
— a component that provides an HTTP request service:
ffx component show http-client.cm
The command outputs the following report:
Moniker: /core/network/http-client URL: #meta/http-client.cm Type: CML static component Component State: Resolved Incoming Capabilities: config fuchsia.logger.LogSink fuchsia.net.name.Lookup fuchsia.posix.socket.Provider pkg Exposed Capabilities: fuchsia.net.http.Loader Merkle root: d9e73f5b061f2f227e596e2e0079ff3a095fc69e192cf85e0d7621826c76356c Execution State: Running Start reason: '/core/feedback' requested capability 'fuchsia.net.http.Loader' Running since: ... Job ID: 41268 Process ID: 41311 Outgoing Capabilities: fuchsia.net.http.Loader
Notice a few of the details reported here:
In the previous output, there are three capability groups listed:
use
. These are provided to the component through its namespace.expose
. These are the component's exposed services.One of the capabilities exposed by http-client
to its parent realm is fuchsia.net.http.Loader. This enables other components to issue HTTP requests.
Use the component select
command determine how many components interact with this capability:
ffx component capability fuchsia.net.http.Loader
The command lists all the matching components:
Exposed: /core/network/http-client /core/network Used: /core/cobalt /core/feedback /core
This indicates that the cobalt
and feedback
components use this capability (i.e., have it listed under Incoming Capabilities). The common ancestor between these components is core
, which handles the routing of this capability to the necessary children.