Linux & Open-Source Training Linux Laptops Linux Services

Linux Kernel Internals Training

This course teaches attendees to acquaints developers with the fundamental subsystems, data structures, and API of the Linux kernel version 3.10.


This three day, hands-on course, provides attendees with experience in creating Linux kernel source code within various subsystems of the Linux kernel.

Attendees will spend approximately 50 percent of the class time actually gaining hands-on experience with these topics. 

Course Objectives

After this course, attendees will be able to:

  • Describe the role and functionality of the major subsystems within the Linux kernel.
  • Describe and make use of many of the key data structures and API functions within the Linux kernel.

Who Should Attend

The course is designed for software engineers who are familiar with Linux from the user and application development level, who wish to gain understanding of how the Linux kernel works internally.

Additional, assumed prerequisite knowledge, is experience in configuring and installing Linux kernels.


Three days.

Course Materials

The workshop materials include a comprehensive student workbook. The workbook contains all of the slides used in the course as well as hands-on lab exercises.

Course Workshop and Set-up

The workshop makes use of standard PC's with a desktop Linux distribution for development.

The following modules will be covered during the class:

  • Linux Kernel Overview
    Diagram of Linux subsystems
    Role of the kernel
    Code Contexts
    User Space and Kernel Space
    Introducing LXR
    System Call Interface
  • Processes
    Process data structures
    The /proc File System
    Process creation
    User/Kernel Mode Stacks
    Linked Lists
  • Loadable Kernel Modules
    What are they
    Module related commands
    Module functions
    Kernel Modules and the GPL
  • Debugging Kernel Code
    More on Printk()
    creating /proc files
    The sys file system
    • debugfs
    kernel crashes —the “oops” message
    KDB and KGDB
  • Synchronization
    Need for Synchronization
    • critical Section
    A tomic Operations
    • Bits
    • Integers
    Spin locks
    • Read-write Spinlocks

    Alternative to Blocking

    • Sequential Locks
    • Read-Copy-Update
    • Per-CPU Variables
  • Memory Management
    Virtual Memory
    kmalloc() and friends
    Slab Allocator
    get_free_page() and friends
    Buddy Algorithm
  • Device Drivers
    What is a Device Driver?
    The /dev directory
    Device Registration
    • The File Operations Table
    Unified Device Model


  • Interrupt Context
    interrupt handlers
    • Registering an Interrupt Handler

    Deferred work

    • Tasklets
    • Workqueues


  • Virtual Filesystem/Block Devices
    VFS data structures
    Adding a filesystem
    The Block Layer
    • I/O Schedulers
    Block devices
  • Configuring and Building the Kernel
    Why build the kernel?
    Where to get the Kernel
    • Upstream and Downstream Kernels
    Kernel Source Tree
    Configuring the Kernel
    Building and Installing the Kernel
  • The Scheduler
    What does the Scheduler Do?
    Completely Fair Scheduler
    • Red/Black Trees
    High Resolution Timer
  • The Linux Boot Process
    • Grub
    Initial RAM Disk
    Kernel Initialization
    init process
    Run Levels


Enrollment Form

Prerequisites: Additional, assumed prerequisite knowledge, is experience in configuring and installing Linux kernels.

If you have any questions about the difficulty level of the class, please contact us at:  classes (at)

Optional: All attendees will get a Linux laptop and a single CPU board to be used during the class. You have the option of purchasing this laptop and/or board with an additional course fee.

On-site: If you would like to arrange an on-site Linux  class, please contact us at: classes (at)

If you don't see this class scheduled in the timeframe/place of your preference, please let us know your preference for timeframe (which month etc.) and any particular geography preference. Send email with your interest to classes(at)


Receive Announcements & Linux Tips
Linux is a registered trademark of Linus Torvalds.