Edocti
Advanced Technical Training for the Software Engineer of Tomorrow
Edocti Training

Linux Device Drivers Essentials

Intermediate
21 h
4.8 (231 reviews)

Scheduled sessions

Starts: Jul 15, 2026 , 3 days
Live online Confirmed EN ● Instructor-led
€ 550 Enroll
Linux Device Drivers Essentials

Driver fundamentals: Learn to write, compile, and debug Linux kernel device drivers step by step.

Get hands-on practice with kernel modules, character devices, kernel logging, and essential APIs.

Explore memory management, hardware interrupts, and synchronization primitives through real-world examples.

Gain practical experience via intensive labs (~70% of the course) focused on building and testing functional drivers.

How this helps: Understand the critical boundaries between kernel and user space, and adopt industry best practices for driver development.

Who it’s for: Software engineers with basic C and Linux knowledge transitioning into kernel-level programming.

By the end of the training, you’ll confidently build, load, and troubleshoot custom Linux device drivers.

Skills You Will Learn

Linux Kernel Modules Character Devices Kernel Memory Management Interrupts & Exceptions Hardware I/O & Timers Kernel Synchronization Device Driver APIs Kernel Debugging

Curriculum

Introduction

  • Kernel versions
  • Kernel sources and the use of git
  • Rolling your own kernel
  • Platforms
  • Types of device drivers
  • Elements of an embedded Linux project (high-level overview)

Device drivers

  • Types of devices; mechanism vs. policy; avoiding binary blobs
  • How applications use device drivers
  • The system call mechanism
  • Error numbers
  • printk()
  • devres: managed device resources
  • Modules and device drivers: module_driver() macros, modules and hot plug

Memory management and allocation

  • Virtual and physical memory
  • Memory zones
  • Page tables
  • kmalloc(), __get_free_pages(), vmalloc()
  • Slabs and cache allocations

Character devices

  • Device nodes
  • Major and minor numbers; reserving numbers
  • Accessing the device node
  • Registering the device
  • udev
  • dev_printk() and related functions
  • file_operations structure
  • Driver entry points
  • The file and inode structures

Transferring between user and kernel space

  • User-space vs. kernel-space; system calls; process context
  • The linked list and other data structures
  • put(get)_user() and copy_to(from)_user()
  • Direct transfer: Kernel I/O and memory mapping
  • User-space functions for mmap()
  • Driver entry point for mmap()

Interrupts and exceptions

  • Interrupts and exceptions
  • Asynchronous interrupts
  • MSI
  • Enabling / disabling interrupts
  • What not to do at interrupt time
  • IRQ data structures
  • Installing an interrupt handler

Timing measurements

  • Types of measurements
  • Jiffies
  • Getting the current time
  • Clock sources
  • Programmable interval timer
  • Time stamp counter
  • HPET
  • Tickless kernels

Kernel timers

  • Inserting delays
  • Low resolution timers
  • High resolution timers

ioctls

  • Driver entry points for ioctls
  • Locked and lockless ioctls
  • Defining ioctls

Unified device model and sysfs

  • Basic data structures
  • Real devices
  • sysfs
  • kset and kobject examples

Sleeping and wait queues

  • Going to sleep and waking up
  • Exclusive sleeping
  • Polling

Interrupt handling

  • Top and bottom halves
  • Deferrable functions and softirqs
  • Tasklets
  • Work queues
  • Threaded interrupt handlers
  • Interrupt handling in user-space

Hardware I/O

  • Buses and ports
  • Memory barriers
  • Registering I/O ports
  • Accessing I/O registers and I/O memory
  • Access by user: ioperm(), iopl(), /dev/port

Application (if time allows)

  • Implementing a LED driver
  • Implementing a temperature sensor driver

Course Day Structure

  • Part 1: 09:00–10:30
  • Break: 10:30–10:45
  • Part 2: 10:45–12:15
  • Lunch break: 12:15–13:15
  • Part 3: 13:15–15:15
  • Break: 15:15–15:30
  • Part 4: 15:30–17:30

Did you attend this course?

Your feedback is invaluable to us. Please share your experience with us and help us improve this course for future participants.

Share your feedback

Want to find out more? We are here to help!

Or email us directly at training@edocti.com.