Find the skeleton driver source, built it, try it, and modify it. There's both an overall one, and some for particular types of things like USB-UARTs. Look at some existing drivers for common things. Find an actual hardware device you want to write a driver for, take time to understand how Linux handles the mechanisms it uses (for example by looking at drivers for other things that use those mechanisms...) and then write your own. Answer from UniWheel on reddit.com
🌐
Reddit
reddit.com › r/embeddedlinux › where to begin linux device driver development
r/embeddedlinux on Reddit: Where to begin Linux device driver development
January 17, 2022 -

Hi, I am an engineering graduate and have been working with microcontrollers for the past 3 years. Recently I had started learning linux programming with gcc for embedded based applications on an ARM based SOC. I now want to learn linux device driver implementation. Are there some good online courses that I can use. What kind of projects can I do for learning purpose.

Resource for creating a device driver Aug 21, 2017
r/archlinux
8y ago
Linux device driver project ideas? May 31, 2022
r/embedded
4y ago
Learning how to write a device driver Jan 23, 2020
r/osdev
6y ago
Best book to start with Linux drivers? Jan 10, 2019
r/linux
7y ago
More results at reddit.com
🌐
Linux Kernel
kernel.org › doc › html › v4.13 › driver-api › index.html
The Linux driver implementer’s API guide — The Linux Kernel documentation
The kernel offers a wide variety of interfaces to support the development of device drivers. This document is an only somewhat organized collection of some of those interfaces — it will hopefully get better over time!
Discussions

kernel - Learning Linux driver development with Raspberry Pi - Raspberry Pi Stack Exchange
I'd like to write a Linux device driver for some real hardware device. What Raspberry Pi peripherals are a good fit? Basically I need the following: It must be small enough for a beginner (few mont... More on raspberrypi.stackexchange.com
🌐 raspberrypi.stackexchange.com
August 12, 2013
Linux drivers development
I recommend using the Yocto extended SDK with devtool for the Linux headers of your target system. The best way to learn is by examining other drivers, which can be found at https://elixir.bootlin.com/linux/latest/source/drivers . Additionally, I found these "books/videos" helpful when I started: https://github.com/Johannes4Linux/Linux_Driver_Tutorial https://sysprog21.github.io/lkmpg/ More on reddit.com
🌐 r/embedded
11
36
July 9, 2023
Is it worth learning linux kernel/device drivers?
Meh, I would hold off on rust. The industry isn't there yet. I would recommend instead learning an architecture in depth like ARM and RISCV. You only need a subset of C++, which are useful. Linux is good to know, especially bash. AWS? What for... More on reddit.com
🌐 r/embedded
45
44
July 28, 2023
how difficult it actually is to write a Linux driver?
People have already made some good points: You should get good at normal C programming first Writing a toy Linux device driver is a lot easier than making one for real hardware Once you have that down, the book for learning to write Linux device drivers is Linux Device Drivers, 3rd Edition by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman. More on reddit.com
🌐 r/linux4noobs
18
14
March 19, 2023
🌐
Apriorit
apriorit.com › home › blog › software development blog › linux device drivers: tutorial for linux driver development
Linux Device Drivers: Linux Driver Development Tutorial – Apriorit
February 16, 2026 - Starting from Linux version 6.1, you can also use Rust ​. However, since Rust support in the Linux kernel is still in the active development phase, in this article, we will focus on C. Note that you can’t use C++ as you can with the Windows kernel, as some parts of the Linux kernel source code (such as header files) may include keywords from C++ (for example, delete or new), while in Assembler, you may encounter lexemes such as ‘ :: ’. There are two ways of writing device drivers in Linux:
🌐
Amazon
amazon.com › Linux-Device-Driver-Development-development › dp › 1803240067
Linux Device Driver Development: Everything you need to start with device driver development for Linux kernel and embedded Linux, 2nd Edition: John Madieu: 9781803240060: Amazon.com: Books
Linux Device Driver Development: Everything you need to start with device driver development for Linux kernel and embedded Linux, 2nd Edition [John Madieu] on Amazon.com. *FREE* shipping on qualifying offers. Linux Device Driver Development: Everything you need to start with device driver ...
🌐
Bootlin
bootlin.com › training › kernel
Embedded Linux kernel and driver development training – Bootlin
In five days, through theory and practical labs, the course makes you familiar with the essentials of kernel development: kernel architecture, the main APIs, integration of device drivers with other parts of the kernel and with user applications. Be able to configure, build and install the Linux ...
🌐
GitHub
github.com › PacktPublishing › Linux-Device-Drivers-Development
GitHub - PacktPublishing/Linux-Device-Drivers-Development: Linux Device Drivers Development, published by Packt · GitHub
This book will initially help you understand the basics of drivers as well as prepare for the long journey through the Linux Kernel. This book then covers drivers development based on various Linux subsystems such as memory management, PWM, RTC, IIO, IRQ management, and so on.
Starred by 615 users
Forked by 283 users
Languages   C 96.2% | Makefile 3.8%
Find elsewhere
🌐
NXP Semiconductors
nxp.com › docs › en › reference-manual › Linux Device Drivers.pdf pdf
Linux Device Drivers, 2nd Edition
the huge amount of source code that makes up Linux. ... It’s high time now to begin programming. This chapter introduces all the essential · concepts about modules and kernel programming. In these few pages, we build · and run a complete module. Developing such expertise is an essential foundation · for any kind of modularized driver.
🌐
Linux Jobs & Careers
linuxcareers.com › resources › blog › 2023 › 04 › a-beginners-guide-to-linux-device-driver-development-careers
A Beginner's Guide to Linux Device Driver Development Careers - Linux Jobs & Careers
April 17, 2023 - Discover the exciting world of Linux device driver development with this beginner's guide, covering essential skills, learning resources, building a strong portfolio, and exploring job opportunities for a successful career.
🌐
Quora
quora.com › What-is-the-best-resource-to-learn-about-Linux-kernel-driver-development-I-have-consulted-references-like-Linux-kernel-development-and-Linux-device-drivers-but-they-are-very-old-and-difficult-to-follow
What is the best resource to learn about Linux kernel driver development? (I have consulted references like: 'Linux kernel development' and 'Linux device drivers' but they are very old and difficult to follow) - Quora
Answer (1 of 2): Congratulations on wanting to become a kernel hacker. This activity can be highly rewarding, and also equally frustrating! Any resource teaching Linux kernel driver development will be difficult to follow, whether old or new. It is not an easy subject. Greg Kroah-Hartmann is as ...
🌐
Linux Journal
linuxjournal.com › content › unlocking-secrets-writing-custom-linux-kernel-drivers-smooth-hardware-integration
Unlocking the Secrets of Writing Custom Linux Kernel Drivers for Smooth Hardware Integration | Linux Journal
Programming Skills · Kernel drivers are primarily written in C. Understanding C programming and low-level system programming concepts are crucial for writing effective drivers. Knowledge of data structures, memory management, and system calls will be particularly useful.
🌐
GitHub
github.com › PacktPublishing › Linux-Device-Driver-Development-Second-Edition
GitHub - PacktPublishing/Linux-Device-Driver-Development-Second-Edition: Linux Device Driver Development - Second Edition, published by Packt · GitHub
Thanks to its subsystems, the Linux kernel supports almost all of the application fields in the industrial world. This updated second edition of Linux Device Driver Development is a comprehensive introduction to the Linux kernel world and the different subsystems that it is made of, and will be useful for embedded developers from any discipline.
Starred by 233 users
Forked by 85 users
Languages   C 96.4% | Makefile 3.6%
🌐
AMD
docs.amd.com › r › en-US › ug1165-zynq-embedded-design-tutorial › Linux-Based-Device-Driver-Development
Linux-Based Device Driver Development - 2026.1 English
Loading application · Your web browser must have JavaScript enabled in order for this application to display correctly
🌐
freeCodeCamp
freecodecamp.org › news › how-to-create-linux-device-drivers
How to Create Linux Device Drivers
October 2, 2024 - Understanding how drivers interface with the kernel, interact with system calls, and manage hardware resources opens up new opportunities for advanced system programming and development. We just published a course on the freeCodeCamp.org YouTube channel that will teach you all about developing Linux device drivers.
🌐
Linux Foundation
training.linuxfoundation.org › home › development › developing embedded linux device drivers (lfd435)
Developing Embedded Linux Device Drivers (LFD435) - Linux Foundation - Education
January 2, 2026 - Develop device drivers for embedded Linux systems—gain essential knowledge of the Linux kernel through hands-on labs with RISC-V-based emulated development targets.
Top answer
1 of 3
3

It can be hard to learn writing drivers when interfacing with complicated devices and/or complicated buses. Because of that I would recommend either using some simple and well known devices (ignoring existing implementation of their drivers in the kernel) like I²C/SPI devices that are usually used with microcontrollers. For example you could find any device that is "supported" by Arduino community (meaning there is a library/documentation for it) and try using it with RaspberryPi.

If that's not enough or you don't want to buy too much hardware, you can create one yourself. Just get some microcontroller (like atmega or something), create a program for it to become some device and then try interfacing with it using Linux drivers. This way you can easily create programs that will emulate different classes of devices. And since you will write your "firmware" yourself, it will help you debug problems.

You need some microcontroller programming skills for that but it's not hard to learn programming with Arduino and I believe it's useful knowledge for driver programmer anyway.

2 of 3
2

Personally I would start with a very simple device, such as one or more LEDs connected directly to GPIO pins.

You could either buy a device ready to plug in, or wire your own one.

The reason I would suggest this is that debugging drivers is generally much more difficult then a normal program, therefore a simple challenge to get started is useful, also you can then use that code as a method of debug for more complex devices (status out to a GPIO pin to attach to an oscilloscope) where timing is important.

If it is of interest there is a kernel driver for LedBorg available here, the source should be a reasonably simple example for driving GPIO pins at a regular interval.

🌐
LWN.net
lwn.net › Kernel › LDD3
Linux Device Drivers, Third Edition [LWN.net]
This is the web site for the Third Edition of Linux Device Drivers, by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman. For the moment, only the finished PDF files are available; we do intend to make an HTML version and the DocBook source available as well. This book is available under the terms of the Creative Commons Attribution-ShareAlike 2.0 license. That means that you are free to download and redistribute it. The development ...
🌐
Quora
quora.com › What-is-linux-driver-development
What is linux driver development? - Quora
Answer (1 of 2): “Do you pine for the nice days of Minix-1.1, when men were men and wrote their own device drivers?” Linus Torvalds Pre-requisites In order to develop Linux device drivers, it is necessary to have an understanding of the following: * C programming. Some in-depth knowledge of C...
🌐
Linux.org
linux.org › home › forums › general linux forums › ask tuxbot (archived)
Learn Linux driver programming | Linux.org
January 23, 2024 - Start with the official Linux kernel documentation, specifically the "Kernel Hacking Guide" and the "Device Drivers" section. Another great book to get you started is "Linux Device Drivers" by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman. It covers everything from character devices to USB drivers and is considered the bible of Linux driver development.
🌐
Goodreads
goodreads.com › book › show › 60873722-linux-device-driver-development
Linux Device Driver Development: Everything you need to start with device driver development for Linux kernel and embedded Linux, 2nd Edition by John Madieu | Goodreads
April 21, 2022 - Get up to speed with the most important concepts in driver development and focus on common embedded system requirements such as memory management, interrupt management, and locking mechanisms Key FeaturesWrite feature-rich and customized Linux device drivers for any character, SPI, and I2C deviceDevelop a deep understanding of locking primitives, IRQ management, memory management, DMA, and so onGain practical experience in the embedded side of Linux using GPIO, IIO, and input subsystemsBook DescriptionLinux is by far the most-used kernel on embedded systems.
Author   John Madieu
Pages   708
🌐
Linux Foundation
events19.linuxfoundation.org › wp-content › uploads › 2017 › 12 › Introduction-to-Linux-Kernel-Driver-Programming-Michael-Opdenacker-Bootlin-.pdf pdf
Introduction to Linux kernel Introduction to Linux kernel driver programming
Driver development advise · ●Look for code for devices similar to yours · ●Read the code. You can use Elixir (https://elixir.bootlin.com/) ●Always read code from the bottom up. You see · the big picture first, and then progressively how · the details are implemented.