| # 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/isolated_devmgr.gni") | |
| isolated_devmgr_component("my-devmgr") { | |
| 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" | |
| ] | |
| deps = [ | |
| "//src/devices/tests/sysdev", | |
| "//path/to/my/driver:my-driver", | |
| ] | |
| } | |
| ``` | |
| The `args` parameter configures 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. | |
| 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-package#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-package#meta/my-devmgr.cmx" | |
| } | |
| } | |
| }, | |
| "program": { | |
| "binary": "test/my_devmgr_test" | |
| }, | |
| "sandbox": { | |
| "services": [ | |
| "fuchsia.example.MyDevmgr" | |
| ] | |
| } | |
| } | |
| ``` | |
| In either case you will want to make sure to list the isolated devmgr as a `dep` | |
| for your test component. | |
| ## Using inspect with isolated devmgr | |
| The device tree and the diagnostics are hosted in the outgoing directory of the test component. | |
| In order to view the inspect files - | |
| 1. Add a breakpoint to the test using [zxdb](https://fuchsia.dev/fuchsia-src/development/debugger/debugger_usage). | |
| 2. When breakpoint is hit, open `fx shell` and find the hub path to the test component. | |
| E.g: | |
| ``` | |
| find /hub -name fs-management-devmgr.cmx | |
| /hub/r/test_env_af569d6f/31969/c/fs-management-devmgr.cmx | |
| ``` | |
| 3. You can view the inspect file using iquery. | |
| E.g: | |
| ``` | |
| fx iquery show-file /hub/r/test_env_af569d6f/31969/c/fs-management-devmgr.cmx/32468/out/dev/diagnostics/driver_manager/dm.inspect | |
| ``` |