Wind River Education Services Course Catalog

Wind River Education Services offers cost-effective training in various forms. Browse our course catalog below to plan and track a curriculum that will satisfy the training needs of your device software development engineers.

Linux Device Drivers

Buy Now

Course Description

Course Results

Products Supported

Who Should Attend

Course Format

Please see course datasheet for further details here Buy Now

Course Details Summary

  • Duration: 3 Days
  • Course Information: View
  • Format: Lectures and Labs
  • Type: Instructor-led
  • Price/Schedule: View

The Linux Device Drivers course provides engineers with a fast, cost-effective way to acquire the skills necessary to develop, deploy, and debug their own customized Linux device drivers in the Wind River Linux environment.

After this course, you will be able to do the following:

  • Develop and manipulate Linux kernel modules
  • Develop Linux device drivers for the various types of devices supported in Linux
  • Describe the workings of the different kernel subsystems and how they impact the structure of a device driver
  • Debug Linux device drivers
  • Wind River Linux 8.0
  • The following target is available: QEMU simulated target (Intel® x86-64)
  • Anyone new to device driver development in Linux
  • Linux application developers who are looking to gain more insight into how the Linux kernel works
  • Developers interested in the interface between the Linux kernel and device drivers

Day 1

Introduction to Linux Device Drivers

  • Linux architecture overview
  • Linux device driver overview
  • Device driver types
  • Linux device model
  • In-tree vs. out-of-tree driver development

Linux Kernel Source Code

  • Source code organization
  • The kernel configurator
  • The kernel build system
  • Working with kernel patches
  • LAB: Getting Started with the Wind River Linux Lab Environment

Introduction to Linux Kernel Modules

  • Overview
  • Anatomy of a kernel module
  • Module licensing
  • Building modules
  • Installing modules
  • Managing modules
  • Module parameters
  • LAB: Developing Kernel Modules

Character Device Drivers

  • Driver lifecycle
  • Major and minor numbers
  • Character driver entry points
  • Blocking operations
  • Controlling a device
  • Querying read/write ability
  • Restricting operations
  • LAB: Developing a Character Device Driver

Day 2

Managing Memory in the Linux Device Drivers

  • How Linux manages memory
  • Allocating memory with kmalloc()
  • Page-based memory allocation
  • Manipulating memory
  • Memory-mapped I/O
  • Accessing user space memory
  • Implementing the mmap operation
  • LAB: Managing Memory in Kernel Code

Concurrency in Linux Device Drivers

  • Concurrency
  • Race conditions
  • Locking primitives
  • Deadlock
  • Atomic variables
  • LAB: Managing Concurrency in Kernel Code

Managing Time in Linux Device Drivers

  • Measuring time in the kernel
  • Delaying execution
  • Deferring execution
  • LAB: Managing Execution of Driver Code

Handling Interrupts in Linux Device Drivers

  • How interrupts work
  • IRQs
  • Top half processing
  • Bottom half processing
  • LAB: Implementing Interrupt Handlers

Debugging Linux Device Drivers

  • Debugging by printing
  • Debugging by querying
  • Debugging by observation
  • Using a kernel debugger
  • LAB: Implementing Debugging Strategies in Kernel Code
  • LAB: Configuring KGDB
  • LAB: Kernel Debugging with GDB

Day 3

Linux PCI Device Drivers

  • PCI configuration space
  • Identifying devices
  • Matching devices and drivers
  • Driver registration
  • Probe() function
  • Memory and I/O regions
  • DMA
  • Remove() function
  • LAB: Driving Devices over PCI

Linux USB Device Drivers

  • USB architecture
  • Matching devices and drivers
  • Driver registration
  • Probe function
  • Communicating with USBs
  • LAB: Driving Devices over USB

Block Device Drivers

  • Driver lifecycle
  • Major and minor numbers
  • Block driver entry points
  • Processing requests
  • Controlling a device
  • LAB: Developing a Block Device Driver

Linux Network Device Drivers

  • Overview of network devices
  • Driver registration
  • Network driver entry points
  • Controlling interfaces
  • Packet transmission
  • Interrupt-driven packet reception
  • NAPI drivers
  • LAB: Developing a Network Device Driver

Prerequisite Course

Prerequisite Skills

  • Familiarity with makefiles and GNU toolchain
  • Understanding of various methods used to deploy and debug Linux-based applications in a cross-development environment
  • C or C++ programming experience on Linux/UNIX
  • This three-day expert-led course consists of lectures and lab sessions.
  • Students gain hands-on experience and receive personal guidance from expert Wind River instructors.
  • Specific questions are addressed.