Skip to main content
Fuchsia
Discover Reference What's new Fuchsia platform
/
  • English
  • 中文 – 简体
  • 中文 – 繁體
Sign in
  • Contribute to the open source platform
Set up & develop Test & debug Contribute
Fuchsia
  • Discover
  • Reference
  • What's new
  • Fuchsia platform
    • Set up & develop
    • Test & debug
    • Contribute
  • Overview
  • Get started
  • Overview
  • 1. Download the Fuchsia source code
  • 2. Configure and build Fuchsia
  • 3. Start the Fuchsia emulator
  • 4. Explore Fuchsia
  • Set up devices
  • Fuchsia hardware
    • Overview
    • Device setup guides index
    • Install Fuchsia on a NUC
    • Install Fuchsia on a Khadas VIM3 board
  • Fuchsia emulator
    • Fuchsia emulator
  • Build and run
  • Build Fuchsia
    • Build and flash Fuchsia
    • Build Workbench
    • fx workflows
    • Developing with Fuchsia packages
    • Build system
      • Overview
      • Fuchsia build system
      • Retrieve build information
      • Boards and products
        • Overview
        • Bringup Product Definition
      • Build system policies
      • GN
        • Introduction to GN
        • Bundles
        • Variants
        • GN template best practices
        • GN toolchain best practices
      • Build system internals
        • Overview
        • Manifest file formats
        • GN toolchains and the Fuchsia build
          • GN toolchains overview
          • ELF shared library redirection
          • Build variants
    • Advanced
      • Use developer overrides for assembly of a Fuchsia product
      • Bazel migration guidelines
      • Build Clang toolchain
      • Build Rust for Fuchsia
      • Build Fuchsia with custom Rust
      • Build with GN labels
      • Run the Rust test suite
      • Run Clang static analysis
      • Ninja no-op check
      • How Ninja works
      • Fuchsia-specific Ninja improvements
      • Hermetic actions check
      • GN root targets
      • Bazel concepts
        • Project layout and organization
        • Build outputs
        • Build configurations
  • Run components
    • Run an example component
    • Run a test component
  • Write code
  • API development
    • API development overview
    • Fuchsia API evolution guidelines
    • Guidelines
      • API documentation readability rubric
      • Bind library guidelines
      • C library readability rubric
      • Command-line tool guidelines
      • CLI tool help requirements
      • Developer tool guidelines
      • FIDL API readability rubric
      • Go rubric
      • Rust rubric
      • Zircon system interface rubric
  • Audio
    • Loudness
    • Drivers
      • Overview
      • Architecture
      • Audio driver streaming interface
      • Audio Signal Processing
      • Digital Audio Interface (DAI)
      • Audio codec
      • Audio composite
  • Bluetooth
    • Concepts
      • Bluetooth architecture
      • Bluetooth persistent data schema
  • Boards
    • Overview
    • Adding support for new boards
    • Devicetree overview
    • Devicetree visitors
  • Components
    • Overview
    • Build components
    • Connect components
    • Run components
    • Provide data files to components
    • Configure components
      • Overview
      • Config-data package
      • Structured Configuration
      • Evolving Structured Configuration
      • Assembling Structured Configuration
    • Component ID index
    • Stop idle components
  • Drivers
    • Overview
    • DFv1 to DFv2 driver migration
      • Overview
      • 1. Migrate from DFv1 to DFv2
        • Overview
        • Frequently asked questions
        • Update DDK interfaces to DFv2
        • Update other services to DFv2
      • 2. Migrate from Banjo to FIDL
        • Overview
        • Frequently asked questions
        • Convert Banjo protocols to FIDL protocols
      • Extensions
        • Set up the compat device server in a DFv2 driver
        • Connect and serve Banjo protocols in a DFv2 driver
        • Set up devfs in a DFv2 driver
    • DFv2 driver development
      • Overview
      • Write a minimal DFv2 driver
      • Driver examples
      • Tutorials
        • Create a composite node
        • Bind rules tutorial
        • Bind library code generation tutorial
        • FIDL tutorial
        • Metadata tutorial
      • Debugging
        • Troubleshoot common issues in DFv2 driver development
        • Driver utilities
      • Testing
        • DriverTestRealm
        • Threading tips in tests
      • Best practices
        • VMO registration pattern
        • Driver stack performance
      • Guidelines
        • Driver runtime API guidelines
        • Drivers rubric
      • Concepts
        • DMA (Direct Memory Access)
    • DFv1 driver development
      • Fuchsia driver development (DFv1)
      • Building a Driver
      • Interrupts
      • Platform Bus
      • Tutorials
        • Using the C++ DDK template library
      • Testing
        • Driver testing
        • Mock DDK
      • Debugging
        • Using Inspect for drivers
        • Driver Logging
        • Add tracing to a driver
    • DFv1 concepts
      • Fuchsia Driver Framework (DFv1)
      • Device driver model
        • Overview
        • Introduction
        • Device model
        • Driver binding
        • The Device ops
        • Device driver lifecycle
        • Device power management
        • Protocols in drivers
        • FIDL in drivers
        • Banjo in drivers
        • Composite devices
        • Device firmware
    • Driver-specific guides
      • Board drivers
        • GPIO initialization
      • Display drivers
        • How to write a display driver
        • Modifying board drivers
        • What does a display controller do?
      • PCI drivers
        • Configuration
      • Registers
        • Registers overview
      • USB drivers
        • Getting descriptors and endpoints from USB
        • USB system overview
        • Lifecycle of a USB request
        • USB mass storage driver
      • Input drivers
        • Fuchsia input drivers
        • Input report reader library
      • SDMMC drivers
        • SDMMC drivers architecture
      • SPMI drivers
        • SPMI overview
    • Others
      • Deleting drivers
    • SDK-based driver development
      • Overview
      • Navigating a Bazel-and-Fuchsia-SDK-based development environment
      • Codelab: Build a driver
        • Overview
        • Explore the edu device
        • Bind to the device node
        • Configure hardware resources
        • Expose the driver capabilities
        • Interact with the driver
        • Test and debug the driver
      • Driver binding
        • Write bind rules for a driver
        • Create a new bind library for a driver
        • FIDL-based bind libraries tutorial
        • Debug a driver when it fails to load
      • Driver testing
        • Driver unit testing quick start
  • ffx
    • Overview
    • Using ffx
    • Developing for ffx
      • Overview
      • Integration testing
        • Overview
        • Testing utility library
      • Developing an FFX subtool
      • Experimental subtools
      • Subtool writer types
      • Handling errors in subtools
    • Commands
      • Config
      • Listing Targets
      • Log
      • Selecting components
    • Architecture
      • CLI
      • FHO subtool interface
  • FIDL
    • Overview
    • Developer guide
      • Overview
      • Running FIDL
      • Style guide
      • Designing APIs
      • Maxing out pagination
      • Comparing new C++ and high-level C++ language bindings
      • Viewing generated bindings code
      • Editor Support
      • Hanging Gets in Rust
    • Compatibility guide
      • Overview
    • Tutorials
      • Overview
      • Compiling FIDL
      • New C++ bindings
        • Overview
        • Getting started
          • Natural and wire domain objects
          • Server
          • Async client
          • Sync client
        • Memory ownership of wire domain objects
        • Responding asynchronously
        • Thread safety and memory safety
        • Communicating over the driver transport
        • Request pipelining
        • Services
      • Rust
        • Overview
        • Getting started
          • FIDL Rust Crates
          • Server
          • Async client
          • Sync client
        • Request pipelining
        • Services
    • Examples
      • Overview
      • Canvas
      • Key value store: Baseline example
      • Key value store: Improving the design
      • Calculator
  • Graphics
    • Escher (Physically-based renderer) concepts
      • Overview
      • Building
    • Magma (Vulkan driver) concepts
      • Overview
      • Design
      • Test strategy
      • Vulkan
      • Porting
      • Tracing
      • Contributing
    • Scenic (Graphics engine) concepts
      • Overview
      • Frame Scheduling
      • Life of a pixel
      • Views, bounds, and clipping
      • Scenic Views, view tree, and ViewRefs
      • Scenic Views, view focus, and focus chain
    • Sysmem (Shared memory manager) concepts
      • Overview
      • VMO hierarchy
  • IDK
    • IDK
    • Download the Fuchsia IDK
    • IDK layout
    • IDK standards
    • Using the Core IDK
      • Integrating the IDK into your build environment
      • Understanding IDK metadata
      • "Core" IDK Documentation
      • Bootserver
      • Compilation
      • Debugger
      • Devices
      • Logging
      • Packages
      • SSH
  • Internationalization
    • Overview
    • ICU
    • ICU data
    • Internationalization preferences
    • Fonts
      • Fonts
      • Build configuration
      • Font provider service
      • Maintenance tasks
    • Localization
      • Localization
      • Message translation
      • Lookup API
      • Locale fallback
      • Localization workflow
      • Packaging
      • Future work
    • Future work
  • Kernel
    • Getting started
    • Kernel in the build
    • Manage memory
      • Memory usage analysis tools
      • Out of memory system
    • Manage threads
      • Thread safety annotations
      • Thread local storage
    • Object usage analysis tools
    • Cross translation unit static analysis in Zircon
    • Time units
    • Notes on kernel development
    • Adding a new syscall or object type
  • Languages
    • Overview
    • Configure linters and formatter
    • Fuchsia endian policy
    • Support new languages
      • Overview
      • Recommended structure to support Fuchsia
    • C/C++
      • Overview
      • Editor setup
      • Naming conventions
      • C++ style guide
      • Lint
      • Libc support
      • Library restrictions
      • Logging
      • Perftest micro-benchmark library
      • C++ in Zircon
      • Compile time collections
      • fpromise::promise<> guide
      • fbl:: (Fuchsia Base Library) intrusive container guide
        • Introduction to fbl intrusive containers
        • Getting started
        • Controlling container membership
        • Sequenced containers
        • Associative containers
        • Iterators
        • Testing an object for membership in a container
        • Lifecycle checks
        • size()'s order of operation
        • Advanced scenarios
      • Thread safe asynchronous code
    • Go
      • Overview
      • Logging
      • Readability reviews
    • Python
      • Overview
      • Python style guide
      • Testing
    • Rust
      • Overview
      • Learn Rust
      • FIDL Rust crates
      • Rust editor configurations
      • Using cargo on Fuchsia
      • Logging
      • Ergonomic Inspect
      • Testing Rust Code
      • Measuring Rust Binary Bloat
      • External Rust crates
      • External Rust crate Reviews
      • Unsafe code in Rust
      • Running tests in miri
      • Unstable Rust features
      • Integrating C/C++ using bindgen
  • Networking
    • Concepts
      • Telephony
      • Wireless
      • Network policy
  • Observe and Diagnose
    • Overview
    • Inspect
      • Overview
      • Quickstart
      • Reference
        • Inspect VMO file format
      • Health
      • Rust libraries
      • Using Inspect for drivers
      • Codelab: Using Inspect
    • Log
      • Overview
      • Record
      • Choose severity
      • View
      • Additional logging workflows
      • Reference
        • Log message encoding
    • Analytics Platform
      • Detect snapshot filing
      • Diagnostics Persistence Service
      • Sampler - Diagnostics Data Forwarder
    • Analyze with Triage
      • Overview
      • Configuring Triage
      • Triage (fx triage)
      • Codelab: Using Triage
    • Diagnostics reference
      • Diagnostics schema
    • Trace
      • Overview
      • Use trace events
      • Tutorial
        • Overview and Tutorial
        • 1. Register a trace provider
        • 2. Add tracing in your code
        • 3. Record and visualize a trace
      • Advanced
        • Tracing asynchronously
        • Recording a boot trace
        • Recording a kernel trace
        • Recording a CPU performance trace
      • Reference
        • Fuchsia trace format
    • Error codes
      • Troubleshoot zx_err_peer_closed
  • Sessions
    • Building and running a session
    • Writing a Hello World session
    • Session roles and responsibilities, by example
  • Settings
    • Introduction
    • Policy concepts
    • Using Settings
  • Starnix
    • Common coding patterns in Starnix
    • IPC patterns in Starnix
    • Troubleshooting ffx starnix adb connect
  • UI-Input
    • Flatland scene dump
    • Tracing input events
    • Life of a touch event
    • Magnification
  • Virtualization
    • Concepts
    • Get Started
  • ffx workflows
  • Overview
  • Devices
    • Start the Fuchsia emulator
    • Flash a Fuchsia image on a device
    • Create SSH keys for Fuchsia devices
    • View device information
    • View device logs
  • Components
    • Explore components
    • View component information
    • Start a component during development
    • Copy files to and from a component
  • Drivers
    • View driver information
  • Packages
    • Create a Fuchsia package repository
    • Update Fuchsia packages on a device
    • Start package servers
    • List running package servers
    • Stop running package servers
  • Debugging
    • Register debug symbols
    • Symbolize logs
    • Start the Fuchsia debugger
    • Monitor FIDL messages on a device
  • Performance
    • Record traces for performance analysis
    • Measure the memory usage on a device
  • Testing
    • Run tests on a device
  • Fuchsia
  • Fuchsia platform

Device Driver Model

Caution: The pages in this section may contain information that is specific to the legacy version of the driver framework (DFv1).
  • Introduction
  • Device model
  • Driver binding
  • Device ops
  • Device lifecycle
  • Power management
  • Device protocol
  • Platform bus
  • FIDL
  • Banjo
  • Composite devices
  • Device firmware
bug_report code edit

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-02-28 UTC.

  • Terms
  • Privacy
  • Manage cookies
  • English
  • 中文 – 简体
  • 中文 – 繁體