blob: dafea16b7bf57adc93b3e274ff6fdb53b840f5ed [file] [log] [blame] [view]
# Isolated Devmgr
This library contains a set of tools to streamline the creation of components that expose
isolated devmgrs.
## Usage
To create your own version of an isolated devmgr, you first need to define a build rule for it,
which will look like:
```gn
import("//src/lib/isolated_devmgr/devmgr_manifest.gni")
# declare our own manifest
devmgr_manifest("devmgr-manifest") {
}
# declare our isolated devmgr component
package("my_devmgr") {
testonly = true
deps = [
":devmgr-manifest",
"//src/lib/isolated-devmgr",
]
extra = [ "$target_gen_dir/devmgr.manifest" ]
binaries = [
{
name = "isolated_devmgr"
},
]
meta = [
{
dest = "my_devmgr.cmx"
path = dest
},
]
}
```
Then we need to also provide a `cmx` manifest for that new component, called `my_devmgr.cmx`.
The arguments passed to `isolated_devmgr` configure its behavior for your own use case. You can
see all the supported arguments [here](./main.cc). The main arguments you typically will provide
are `svc_name` and `load_driver`. `svc_name` configures the name of the `devfs` namespace that
will be exposed to the component's directory request and `load_driver` (which can be expressed
multiple times) lists drivers to load when it is launched. `device_vid_pid_did` is optional
argument which can be used to create a device.
```json
{
"program": {
"args": [
"--svc_name=fuchsia.example.MyDevmgr",
"--load_driver=/boot/driver/my_driver1.so",
"--load_driver=/boot/driver/my_driver2.so",
"--wait_for=sys/my_driver"
],
"binary": "bin/isolated_devmgr"
},
"sandbox": {
"boot": [
"bin",
"driver",
"lib"
],
"services": [
"fuchsia.process.Launcher",
"fuchsia.sys.Launcher",
"fuchsia.exception.Handler"
]
}
}
```
With this custom isolated devmgr, you can then use it in test cases by either launching it manually
using the fuchsia-url for your package (in this example
`fuchsia-pkg://fuchsia.com/my_devmgr#meta/my_devmgr.cmx`) or you can inject it as a service and
use service injection in your test component's manifest, like so:
```json
{
"facets": {
"fuchsia.test": {
"injected-services" : {
"fuchsia.example.MyDevmgr": "fuchsia-pkg://fuchsia.com/my_devmgr#meta/my_devmgr.cmx"
}
}
},
"program": {
"binary": "test/my_devmgr_test"
},
"sandbox": {
"services": [
"fuchsia.example.MyDevmgr"
]
}
}
```