| # driver-lab proxy driver |
| |
| This directory contains the `driver-lab` proxy driver, a standalone driver |
| that can claim device nodes and expose them to host-side scripting at run-time |
| for rapid driver development and debugging. |
| |
| See the [specification](./SPEC.md) for more details. |
| |
| **Note:** This code is experimental and has not been subject to the standard |
| level of human code review. |
| |
| --- |
| |
| Engineering-only DFv2 driver (`lab_proxy`) providing policy-checked, |
| audited hardware access for host-driven driver development. Phase 1 |
| offers read-only access and serves the `fuchsia.driver.lab` wire |
| contract consumed by the host tooling at `//tools/driver-lab`. The |
| proxy binds only to nodes explicitly marked with the |
| `fuchsia.driver.lab.PROXY_TARGET` property -- no production node carries |
| it, so the proxy never binds opportunistically. |
| |
| Every operation is validated against the immutable target ceiling and |
| the session's exact allowlist immediately before access, and every |
| attempt -- including rejections -- is recorded in a bounded audit ring. |
| The proxy must never be offered by production images. |
| |
| The normative specification is [SPEC.md](SPEC.md); the companion host |
| tooling specification is at `//tools/driver-lab/SPEC.md`. |
| |
| ## Tracing |
| |
| Every audit record is also written as a Fuchsia trace instant event, and |
| every successful write samples a counter track named |
| `<node>/<resource_name>`, so probes and register or knob A/B arms line up |
| with scheduler, power, and other system trace data. |
| |
| | Category | Contents | |
| | ---------------- | ------------------------------------------------------- | |
| | `driver_lab` | All audit records except interrupt taps; write counters | |
| | `driver_lab:irq` | Interrupt taps, which can be high-rate | |
| |
| ``` |
| $ ffx trace start --categories '#default,driver_lab,driver_lab:irq' |
| ``` |
| |
| Event arguments use the field names of `target-audit.jsonl` evidence rows, |
| so events can be joined with a bundle's rows on `seq`. The `node` argument |
| identifies the emitting instance when several are traced at once. Embedded |
| servers in builds without `enable_driver_lab` emit no events. See |
| [`src/trace.rs`](src/trace.rs). |
| |
| ## Testing |
| |
| Host-side unit tests for the policy/audit/executor core: |
| |
| ``` |
| $ fx test --host lab_proxy_core_lib_test |
| ``` |
| |
| Target unit tests and driver realm tests: |
| |
| ``` |
| $ fx test lab_proxy-unit-test lab_proxy-realm-test |
| ``` |