The documentation in this section is designed to help driver developers create
new drivers using Fuchsia's [driver framework version 2](https://fuchsia.dev/docs/concepts/drivers/README) (DFv2).

## How-to

- [**Write a minimal DFv2 driver**](https://fuchsia.dev/docs/development/drivers/developer_guide/write-a-minimal-dfv2-driver): Learn how to create a minimal DFv2 driver from scratch.
- [**Driver examples**](https://fuchsia.dev/docs/development/drivers/developer_guide/driver-examples): Explore sample drivers intended to demonstrate various Fuchsia driver concepts.

## Tutorials

- [**Create a composite node**](https://fuchsia.dev/docs/development/drivers/developer_guide/create-a-composite-node): Learn how to create a composite node using composite node specifications.
- [**Bind rules tutorial**](https://fuchsia.dev/docs/development/drivers/tutorials/bind-rules-tutorial): Learn how to write bind rules for DFv2 drivers to discover and match devices.
- [**Bind library code generation tutorial**](https://fuchsia.dev/docs/development/drivers/tutorials/bind-libraries-codegen): Learn how to use bind libraries to auto-generate code for DFv2 drivers.
- [**FIDL tutorial**](https://fuchsia.dev/docs/development/drivers/tutorials/fidl-tutorial): Learn how to define FIDL protocols, export them from a driver, and use them in another driver.
- [**Metadata tutorial**](https://fuchsia.dev/docs/development/drivers/tutorials/metadata-tutorial): Learn how to pass metadata from one driver to another using the metadata library in DFv2.

## Debugging

- [**Troubleshoot common issues in DFv2 driver development**](https://fuchsia.dev/docs/development/drivers/developer_guide/troubleshoot-common-issues): Learn how to debug and fix common errors in DFv2 driver development.
- [**Driver utilities**](https://fuchsia.dev/docs/development/drivers/diagnostics/driver-utils): Learn how to use driver utilities for communicating with devices for diagnostics.

## Testing

- [**DriverTestRealm**](https://fuchsia.dev/docs/development/drivers/testing/driver_test_realm): Learn how to use the `DriverTestRealm` framework for running driver integration tests.
- [**Device enumeration tests**](https://fuchsia.dev/docs/development/drivers/testing/device_enumeration): Learn how to run device enumeration tests across boards to verify full driver topology integration.
- [**Threading tips in tests**](https://fuchsia.dev/docs/development/drivers/testing/threading-tips-in-tests): Understand best practices for handling threading in driver tests to avoid crashes.

## Best practices

- [**VMO registration pattern**](https://fuchsia.dev/docs/development/drivers/best_practices/vmo-registration-pattern): Understand approaches for transferring bulk data between applications and drivers.
- [**Driver stack performance**](https://fuchsia.dev/docs/development/drivers/best_practices/driver_stack_performance): Understand performance-related best practices for authoring new device driver APIs.

## Guidelines

- [**Driver runtime API guidelines**](https://fuchsia.dev/docs/development/drivers/developer_guide/driver-runtime-api-guidelines): Follow these guidelines when defining C APIs in the driver runtime.
- [**Driver C++ rubric**](https://fuchsia.dev/docs/development/drivers/developer_guide/cpp-rubric): Follow these rules when creating a new C++ driver in the Fuchsia source repository.
- [**Driver Rust rubric**](https://fuchsia.dev/docs/development/drivers/developer_guide/rust-rubric): Follow these rules when creating a new Rust driver in the Fuchsia source repository.

## Concepts

- [**DMA (Direct Memory Access)**](https://fuchsia.dev/docs/development/drivers/concepts/driver_development/dma): Understand DMA and its importance in DFv2 driver development.
- For more information on DFv2-specific concepts, see [Drivers](https://fuchsia.dev/docs/concepts/drivers/README) under the **Fundamentals** section.

## Additional information

See the following tutorials under the **SDK** section:

- [**Codelab: Build a driver**](https://fuchsia.dev/docs/development/drivers/tutorials/sdk_build_driver/introduction): Learn how to create a DFv2 driver from scratch in the Fuchsia SDK environment.
- [**Write bind rules for a driver**](https://fuchsia.dev/docs/development/sdk/write-bind-rules-for-driver): Learn how to write bind rules for DFv2 drivers in the Fuchsia SDK environment.
- [**Driver unit testing quick start**](https://fuchsia.dev/docs/development/sdk/driver-testing/driver-unit-testing-quick-start): Learn how to write unit tests for DFv2 drivers in the Fuchsia SDK environment.
- [**View driver information**](https://fuchsia.dev/docs/development/tools/ffx/workflows/view-driver-information): Learn how to use the `ffx driver` command to retrieve information about drivers.

[](https://issues.fuchsia.dev/issues/new?component=1439230&template=1881640&description=Issue+on:+https://fuchsia.dev/docs/development/drivers/dfv2-overview.md "Report a bug or suggest improvements on this page") [](https://cs.opensource.google/fuchsia/fuchsia/+/main:docs/development/drivers/dfv2-overview.md "View the source code of this page") [](https://ci.android.com/edit?repo=fuchsia/fuchsia/main&file=docs/development/drivers/dfv2-overview.md&cloneRepo=fuchsia/fuchsia:refs/heads/main&fullPath=fuchsia/docs/development/drivers/dfv2-overview.md "Edit the source code of this page")