Linux kernel and drivers development training

Our Linux Kernel Drivers development course is based on real experience, and is mostly hands-on

Get familiar with device driver development for the Linux kernel. Start from the basics of Linux kernel sources and compilation, and explore up to driver development and integration into kernel frameworks. Includes hands-on labs on embedded targets.

LINUX KERNEL DRIVERS COURSE CONTENT

Introduction to the Linux kernel

    •  Kernel features
    •  Understanding the development process
    •  Legal constraints with device drivers
    •  Kernel user interface (/proc and /sys)
    •  Userspace device drivers

Kernel source code

    •  Specifics of Linux kernel development
    •  Coding standards
    •  Retrieving Linux kernel sources
    •  Tour of the Linux kernel sources

Configuring, compiling and booting the kernel

  • Kernel configuration
  • Native and cross-compilation
  • Booting the kernel
  • Booting the kernel using NFS

Linux kernel modules

  • Linux device drivers
  •  A simple module
  •  Programming constraints
  •  Loading, unloading modules
  •  Module dependencies
  •  Adding sources to the kernel tree

Linux device model

  • Understand how the kernel is designed
  • to support device drivers
  • The device model
  • Binding devices and drivers
  • Platform devices, Device Tree
  • Interface in userspace: /sys

I2C API

  • The I2C subsystem of the kernel
  • Details about the API provided to kernel drivers to interact with I2C devices

Kernel frameworks

  • Block vs. character devices
  • Interaction of userspace applications with the kernel
  • Details on character devices, file_operations, ioctl(), etc…
  • Exchanging data to/from userspace
  • The principle of kernel frameworks

The input subsystem

  • Principle of the kernel input subsystem
  • API offered to kernel drivers to expose input devices capabilities to userspace application
  • Userspace API offered by the input subsystem

Memory management and accessing hardware

  • Linux: memory management
  • Physical and virtual (kernel and user) address spaces
  • Linux memory management implementation
  • Allocating with kmalloc()
  • Allocating by pages
  • Allocating with vmalloc()

The misc kernel subsystem

  • What the misc kernel subsystem is useful for 
  • API of the misc kernel subsystem, both the kernel side and userspace side

Processes, scheduling, sleeping, waiting for resources and interrupt management

  • Process management in the Linux kernel
  • The Linux kernel scheduler and how processes sleep
  • Interrupt handling in device drivers: interrupt handler registration and programming, scheduling deferred work

Locking

  •  Issues with concurrent access to resources
  • Locking primitives: mutexes, semaphores, spinlocks
  • Atomic operations
  • Typical locking issues
  • Using the lock validator to identify the sources of locking problems

Kernel debugging techniques

  • Debugging with printk
  •  Debugfs entries
  •  Analyzing a kernel oops
  •  Using kgdb, a kernel debugger
  •  Using the Magic SysRq commands
  •  Debugging through a JTAG probe

ARM board support and SoC support

  • Understand the organization of the ARM support code
  • Understand how the kernel can be ported to a new hardware board

Working with the community

  •  Organization of the kernel community
  •  The release schedule and process: release candidates, stable releases, long-term support,etc…
  •  Legal aspects, licensing
  •  How to submit patches to contribute code to the community
Contact us
* indicates required field

How long is the training?

The duration of the training can be adapted to the client’s needs.
The normal training lasts 5 days – from 9am to 5pm.

Language

The course is given in French or in English.

The training material is in English in all cases.

Pre-requisites

  • Be proficient in C programming language
  • Be familiar with basic Linux command line and utilities
  • Know the basics of building programs

(these prerequisites are not mandatory but would help in being more efficient during the training)

WHO IS THIS COURSE AIMED AT?

  • Software and System Engineers

    • Understand the specifics of the Linux Kernel
    • Identify the different frameworks, their features, their limitations
    • Secure the usage of Linux Kernel design rules
    • Learn to write a driver from A to Z
    • Experiment it on a recent open source target
  • Managers and Leaders

    • Understand how the Linux community works
    • Identify the benefits and caveats of upstreaming code
    • Identify the impact of the frameworks on the design of drivers
  • Hardware Engineers

    • Understand the Linux hardware/software interface
    • Learn how to write Linux Kernel drivers
    • Identify the good writing practices
  • System Architects

    • Get an overview of the Linux Kernel architecture
    • Understand how this architecture is based on several different models
    • Identify the frameworks easing the Kernel Drivers design
    • Make the best use in designing a system of these features

BeagleBone Black as embedded target

The target used during the training is the BeagleBone Black, one of the latest platform offering extensive open source support. This board from Texas Instruments offers a Cortex-A8 clocked at 1GHz.

Trainer and our experience

Portrait_Sébastien_Jan_1080p-1

Sébastien Jan has 16 years of Embedded Software experience. He is a Linux Kernel Expert and has been teaching Linux Kernel to Professionals for the past 6 years.

Linux Kernel Drivers Course Price

  • Linux Kernel and Drivers Course
  • 2050
    VAT excluded, per person*
  • * Special rate for students, please contact us.