Curated References
Essential resources for Linux driver development, organized by topic.
Official Kernel Documentation
Core References
- Kernel Documentation - Primary documentation source
- Driver API - Driver-specific APIs
- Core API - Fundamental kernel APIs
By Subsystem
| Subsystem | Documentation |
|---|---|
| Device Model | Driver Model |
| Device Tree | Devicetree |
| Block Layer | Block |
| Network | Networking |
| USB | USB API |
| PCI | PCI |
| I2C | I2C |
| SPI | SPI |
| GPIO | GPIO |
| IIO | Industrial I/O |
| RTC | RTC |
| Regulator | Regulator |
| Clock | Clock Framework |
| PWM | PWM |
| Watchdog | Watchdog |
| HWMON | Hardware Monitoring |
| LED | LED |
| Power Management | Power |
Memory and DMA
Synchronization
Debugging and Testing
Development Process
Books
Recommended
| Title | Notes |
|---|---|
| Linux Device Drivers, 3rd Edition | Classic reference (covers 2.6, concepts still relevant). Free online |
| Linux Kernel Development (Robert Love) | Excellent kernel internals overview |
| Essential Linux Device Drivers (Sreekrishnan Venkateswaran) | Good subsystem coverage |
Advanced Topics
| Title | Notes |
|---|---|
| Understanding the Linux Kernel (Bovet & Cesati) | Deep kernel internals |
| Professional Linux Kernel Architecture (Mauerer) | Comprehensive reference |
| Linux Kernel Networking (Rami Rosen) | Network stack deep dive |
Online Resources
Source Code Browsing
- Elixir Cross Referencer - Searchable kernel source
- LXR (Linux Cross Reference) - Alternative source browser
- GitHub Mirror - Linux kernel on GitHub
Mailing Lists and News
- LWN.net - Linux Weekly News (essential reading)
- LKML (Linux Kernel Mailing List) - Main development list
- Kernel Newbies - Resources for beginners
Tutorials and Guides
- Kernel Newbies - First Kernel Patch
- Bootlin Training Materials - Free embedded Linux training
- The Linux Kernel Module Programming Guide
Tools
Development
| Tool | Purpose |
|——|———|
| checkpatch.pl | Code style checker |
| sparse | Static analysis |
| coccinelle | Semantic patching |
| scripts/get_maintainer.pl | Find patch reviewers |
Testing
| Tool | Purpose | |——|———| | QEMU | Hardware emulation | | KUnit | Unit testing | | kselftest | Integration tests | | syzkaller | Fuzzing |
Debugging
| Tool | Purpose |
|——|———|
| dmesg | Kernel log viewer |
| ftrace | Function/event tracing |
| perf | Performance analysis |
| crash | Crash dump analysis |
Specifications
Hardware Protocols
- USB Specification - USB-IF documents
- PCI Express Specification - PCI-SIG (requires membership)
- I2C Specification - NXP I2C-bus specification
- SPI Overview - Wikipedia (no formal spec)
Device Tree
- Devicetree Specification - Official specification
- Kernel DT Bindings - Binding documentation
Kernel Versions
This guide targets Linux 6.6 LTS. Check kernel changelogs for API changes:
- KernelNewbies Changelog - Human-readable changelogs
- Git Changelog - Official commits
Getting Help
- Search first: Use Elixir to find existing drivers similar to yours
- Read the docs: Check docs.kernel.org for your subsystem
- Ask on IRC:
#kernelnewbieson OFTC - Mailing lists: Use
get_maintainer.plto find the right list - Stack Exchange: Unix & Linux Stack Exchange for general questions