Fundamentals
Reference
What's new
Open source project
/
English
中文 – 简体
中文 – 繁體
Sign in
Contribute to the open source platform
Build Fuchsia
Community
Governance
Fundamentals
Reference
What's new
Open source project
Build Fuchsia
Community
Governance
Overview
Quickstart
Get started with Fuchsia
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
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
Banjo tutorial
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
HLCPP (Old)
Overview
Getting started
Compiling HLCPP
Server
Async client
Sync client
Debug output
Serving multiple clients
Request pipelining
Services
Testing protocols
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
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 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
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
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
Test and debug
Test
Run Fuchsia tests
Testing Scenic and Escher
Questions and answers
Zircon testing
Zircon testing overview
Block device testing
NAND testing
Compatibility Testing
Overview
Getting started
User guide
Introduction
Troubleshooting failures
Contributing
Contributing Tests
CTF Test Realm
Testing Guidelines
CTF Troubleshooting Guide
Platform Surface Area (Plasa)
Overview
Plasa manifest
FIDL API Compatibility Testing
Frequently Asked Questions
Component testing
Overview
Test components
Test Runner Framework
Integration testing
Test realm factory
Realm builder
Create Test Realm
Driver testing
Testing a USB device
Fuzzing
Overview
Write a Fuzzer
Build a Fuzzer
Run a Fuzzer
Handling Results Found Through Fuzzing
Improving Your Fuzzer
Overview
Additional Topics
Host-target interaction tests
Scripting Layer for Fuchsia (SL4F)
Testing for flakiness in CQ
Flaky test policy
Stress tests
Rust stress test library
Bluetooth
Writing unit tests for the C++ bt-host driver
Testability rubrics
Hardware testing guide
Testing Third Party Changes
Observe and Diagnose
Overview
Inspect
Overview
Quickstart
Health
Rust libraries
Using Inspect for drivers
Codelab: Using Inspect
Log
Overview
Record
Choose severity
View
Logging and tests
Analytics Platform
Detect snapshot filing
Diagnostics Persistence Service
Sampler - Diagnostics Data Forwarder
Analyze with Triage
Overview
Configuring Triage
Triage (fx triage)
Codelab: Using Triage
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
Error codes
Troubleshoot zx_err_peer_closed
Performance testing
How to run performance tests
Use cases for performance tests
Perfcompare: Try builder for pre-submit testing
Viewing Zircon microbenchmarks with Chromeperf
Fuchsiaperf format for performance test results
Fuchsiaperf producers: libraries
Fuchsiaperf consumers: analysis tools
Naming style for metrics
Metric name expectation files
Documenting performance tests
Chromeperf uploading and config
FAQ
Debug
Debugging workflow
Packet capture
Just In Time Debugging
UI debugging tips
Using the native debugger (zxdb)
zxdb: The Fuchsia debugger
Get started with zxdb
Use breakpoints
Control thread execution
Debug tests using zxdb
Evaluate expressions
Inspect memory
List handles and kernel objects
Understand how symbols are loaded
Work with assembly language
Work with exceptions
Advanced topics
Troubleshooting zxdb
Tutorial: Debug tests using zxdb
Tutorial: Debug with minidumps using zxdb
Developing the native debugger (zxdb)
Debug the kernel
Debug the kernel using QEMU
JTRACE
Kernel debugging tips
Advanced
ACPI debugging
Monitoring
fidlcat
Overview
Guide
Profile
Profiling CPU Usage
Fuchsia Controller
Fuchsia Controller tutorial
Best practices on using async Python in Fuchsia Controller
FIDL bindings in Python
Publish and deploy
Prebuilt packages
Overview
Publish prebuilt packages to CIPD
Publish a CIPD symbols package for ELF binaries
Make your CIPD package visible to Fuchsia developers
Contribute code
Contribute source code
Contribute source changes
Workflow tips and FAQ
Upload changes from multiple repositories
Make changes across different petals
Source code layout
Owners
Static analyzers
Presubmit checks
Gerrit auto-submit
Commit message options
Fuchsia package information using metadata files
README.fuchsia file syntax
Fuchsia archive format (FAR)
Third-party source code management
Verifying system properties
Build integration
Fuchsia
Open source project
Component ID index
Terminology