Find Courses Here
GNU/Linux Kernel Internals and Device Drivers Print E-mail
Course Length - 5 Days
 
Course Description

This GNU/Linux Kernel Internals and Device Drivers Course is for Software Developers and other Technology Professionals (Network Administrators, Support Personnel, Technicians, Technical Management, etc.) who need to rapidly and thoroughly master how to write, debug, support, and troubleshoot GNU/Linux Device Drivers.

A highlight of the course is the afternoon of the final day of class: an optional "friendly competition" in which everyone in the class races to see who can be the first to implement a GNU/Linux device driver that can be built as either embedded into the GNU/Linux kernel or as a kernel module.

As a final key benefit for this course, all of the software used is yours to keep, to take back with you to your organization, and to use for your future device driver development.

 
  
You Will Learn How To

Unlike any other course in the world, and using 100% hands-on techniques, you will learn the following key skills:

  • How to install and configure Linux for an ideal Linux Kernel Internals and Device Drivers software development environment (including setup of kernel debugger)
  • How to write User-Mode drivers
  • How to write kernel drivers embedded into the kernel source code
  • How to configure drivers using the kernel configuration process
  • How to write kernel modules
  • The /proc interface
  • The sysctl interface
  • Device registration (character, block, and network)
  • Device open/close, device ioctl, device read/write
  • Device synchronization (semaphores and spin locks)
  • Memory management
  • Device hot plug
  • Writing PCI bus drivers
  • Writing USB bus drivers
  • And hardware access (I/O Ports, I/O Memory, Interrupts, and DMA/Bus Mastering)
 
  
Course Prerequisites

Experience with at least one operating system such as Windows, Netware, or UNIX.

  
Course Topics:  
Introduction to GNU/Linux Kernel Internals and Device Drivers 
  • User-Mode Device Drivers
  • Kernel-Mode Device Drivers
  • Kernel Version Numbers
 
Development Environment  
  • Installation
  • Development Tools
  • Debugging Tools
 
User-Mode Access to Devices  
  • open, close, read, write
  • ioctl
  • ioperm, iopl, inb, outb
  • mmap, munmap
 
Kernel Source Code  
  • Installing Kernel Source Code
  • Tour of Source Tree
  • Header Files
  • Driver Source
  • Reading an Existing Driver
 
Building a Driver into the GNU/Linux Kernel  
  • Driver Source Code
  • Driver Configuration Info
  • Kernel Configuration
  • Kernel Building
  • Testing a New Kernel
 
Kernel Modules  
  • mod utils
  • Building
  • Installing/Removing
  • Parameter Info
  • Layered Modules
 
The /proc Interface  
  • Using /proc
  • Registration
  • Reading from /proc
  • Writing to /proc
 
The sysctl Interface  
  • Using sysctl
  • Registration
  • Reading/Writing
 
Device Registration  
  • Character Device Registration
  • Block Device Registration
  • Network Device Registration
  • Other Registration Options
 
Device Open/Close  
  • struct file_operations
  • struct inode
  • struct file
  • open and release
 
Device Synchronization  
  • Semaphores
  • Spin Locks
  • Atomic Operations
 
Device I/O Control  
  • ioctl vs /proc vs sysctl
  • ioctl Macros
  • ioctl function
 
Time and Timers 
  • Time of Day
  • jiffies
  • Short Delays
  • Long Delays
  • Kernel Timers
 
Blocking and Non-Blocking I/O 
  • Wait Queues
  • Blocking I/O
  • Non_Blocking I/O
  • SIGIO
 
Memory Management 
  • kmalloc
  • get_free_pages
  • vmalloc
  • kmem_cache
 
Character Device Read/Write 
  • Getting Data from User-Space
  • Starting I/O
  • Waiting for I/O Completion
  • Sending Results to User-Space
 
Block Device Read/Write 
  • Block vs Char Read/Write
  • Block Device Global Variables
  • Request Handing
  • Creating a RAM Disk
 
PCI Bus 
  • PCI Utilities
  • Registration
  • Configuration
  • Hot Plug
 
USB Bus 
  • USB Utilities
  • Registration
  • Configuration
  • Hot Plug
 
I/O Ports 
  • /proc and I/O Ports
  • Resource Registration
  • Reading/Writing
 
I/O Memory 
  • /proc and I/O Memory
  • Resource Registration
  • Reading/Writing
 
Interrupts 
  • /proc and interrupts
  • Resource Registration
  • Interrupt Service Routines
  • Tasklets
 
Direct Memory Access/Bus Mastering 
  • Consistent Mapping
  • Streaming Mapping
  • Scatter/Gather Mapping