Learning Paths

Not sure where to start? Choose a learning path based on your experience level or role.


By Experience Level

Beginner Path

Prerequisites: C programming basics, Linux command line familiarity

Goal: Write and test your first kernel module

Step Part Topics Time
1 Part 1 Environment setup, Hello World module 2 hours
2 Part 2 Kernel architecture, module lifecycle, coding style 3 hours
3 Part 3 Character devices - your first real driver 4 hours

You’ll build: A character device driver that can read/write data from user space.


Intermediate Path

Prerequisites: Completed beginner path OR have written basic modules before

Goal: Master concurrency, memory, and the device model

Step Part Topics Time
1 Part 4 Spinlocks, mutexes, work queues, RCU 4 hours
2 Part 5 kmalloc, DMA, memory mapping 4 hours
3 Part 6 Device model, platform drivers, devm_* 3 hours
4 Part 7 Interrupt handling, threaded IRQs 3 hours
5 Part 8 Device tree bindings, platform bus 3 hours

You’ll build: A platform driver with device tree support, proper resource management, and interrupt handling.


Advanced Path

Prerequisites: Completed intermediate path OR experienced with driver basics

Goal: Master subsystem-specific drivers and complex hardware

Step Part Topics Time
1 Part 9 I2C, SPI, GPIO subsystems 4 hours
2 Part 10 PWM, Watchdog, HWMON, LED 4 hours
3 Part 11 IIO, RTC, Regulator, Clock 5 hours
4 Part 12 Network device drivers 4 hours
5 Part 13 Block device drivers 3 hours

You’ll build: Production-quality I2C sensor driver, IIO data acquisition driver, network interface driver.


Professional Path

Prerequisites: Completed advanced path OR significant driver development experience

Goal: Production drivers, upstream contribution, complex debugging

Step Part Topics Time
1 Part 14 USB drivers, gadget framework 5 hours
2 Part 15 PCIe drivers, MSI/MSI-X, DMA 5 hours
3 Part 16 Power management, runtime PM 3 hours
4 Debugging ftrace, kprobes, KGDB, crash 4 hours
5 Testing KUnit, kselftest, fuzzing 3 hours
6 Upstreaming Patch submission, review process 2 hours

You’ll achieve: Production-quality drivers, kernel upstream contributions, advanced debugging skills.


By Role

Embedded Systems Engineer

You work with SoCs, custom boards, and embedded Linux.

Recommended path:

Part 1 → Part 2 → Part 6 → Part 8 → Part 9 → Part 10 → Part 11 → Part 16

Focus areas:

  • Platform drivers and device tree
  • I2C/SPI sensor integration
  • GPIO, PWM, and peripheral control
  • Power management

Hardware Engineer Transitioning to Software

You understand hardware but are new to Linux kernel programming.

Recommended path:

Part 1 → Part 2 → Part 3 → Part 6 → Part 7 → Part 8 → Part 9

Focus areas:

  • Kernel/user space boundary
  • Device model concepts
  • Register access (ioremap)
  • Interrupt handling
  • Device tree bindings

IoT Developer

You build connected devices with sensors and actuators.

Recommended path:

Part 1 → Part 2 → Part 3 → Part 9 → Part 10 → Part 11 → Part 14 (USB gadget)

Focus areas:

  • I2C/SPI for sensors
  • IIO subsystem for data acquisition
  • LED and PWM for feedback
  • USB gadget for connectivity

Storage/Filesystem Developer

You work on storage systems and need block device knowledge.

Recommended path:

Part 1 → Part 2 → Part 4 → Part 5 → Part 13 → Part 15

Focus areas:

  • Concurrency (Part 4) - critical for storage
  • Memory and DMA (Part 5)
  • Block device drivers (Part 13)
  • PCIe for NVMe-style devices (Part 15)

Network Developer

You work on network hardware or virtual network devices.

Recommended path:

Part 1 → Part 2 → Part 4 → Part 5 → Part 12 → Part 15 → Part 16

Focus areas:

  • Concurrency for packet processing (Part 4)
  • DMA for high-throughput (Part 5)
  • Network device drivers (Part 12)
  • PCIe for NICs (Part 15)
  • Power management for network wakeup (Part 16)

Kernel Contributor

You want to contribute drivers to the Linux kernel.

Recommended path:

Full guide + Appendix F (Upstreaming) + Appendix E (Testing)

Focus areas:

  • All core concepts
  • Coding style (checkpatch compliance)
  • Testing (KUnit, kselftest)
  • Patch submission workflow
  • Documentation and bindings

Quick Reference

I want to… Start here
Learn the basics Part 1
Write a char device Part 3
Use device tree Part 8
Write an I2C driver Part 9
Handle interrupts Part 7
Debug driver issues Debugging
Upstream a driver Upstreaming

Not sure? Start with the Beginner Path. The concepts build on each other, and you can always skip ahead once you’re comfortable.


Back to top

Linux Driver Development Guide is a community resource for learning kernel driver development. Not affiliated with the Linux Foundation. Content provided for educational purposes.

This site uses Just the Docs, a documentation theme for Jekyll.