Consultancy and Total Solutions Training Provider for Embedded Systems, Electronics and Electrical Engineering, Programming, Computing, Operations, ISO9000, ISO14000 and Management.

Bridging the Gap

Training Courses

Developing Device Drivers for Linux

Course id: 0022


Linux is increasingly the operating system of choice from multiserver farms right down to embedded systems. The majority of Linux-based systems are now powering non-PC based hardware – such as tablets, routers and mobile phones – whereby customized device drivers are necessary for hardware interfacing.

Course highlight
This course emphasises on the developing stable device drivers for Linux 2.6.x

What participants say about the course
The following are some verbatim statements from the participants:

  • Instructor provided examples in a simple way for basic understanding. Easier to understand -- Jun 2012
  • Key points were delovered clearly -- Jun 2012
  • Samples of working code were provided which greatly helped in preliminary understanding -- Jun 2012

What you will learn

This course concentrates on the theoretical and practical knowledge to allow participants to achieve the following learning outcomes. Upon completing the course, participants would be able to:
  • Know the major Linux subsystems such as system calls, process management and network stack, and understand the interactions between them
  • Understand Linux's boot and shutdown sequence
  • Develop reliable character and block drivers
  • Debug drivers at the kernel level
  • Register and handle interrupts

Who should attend

This course is particularly suited for engineers, scientist and technicians who would like/are required to develop Linux device drivers to control hardware.


Participants must be well versed in C programming and using gcc, and comfortable with the Linux environment. Some understanding in operating system paradigms would be beneficial.

Course methodology

This course is presented classroom style, with lab exercises/demonstrations.

Course duration

4 days.

Course structure

  • Linux Overview
    • Introduction to GNU/Linux
    • Licensing issues
  • Major Linux Subsystems
    • System Call Interface
    • Process Management
    • Memory Management
    • Virtual Filesystem
    • Network stack
    • Device drivers
  • Initialisation and Shutdown
    • Linux startup process
    • Kernel boot loaders
    • Shutdown?
  • Linux Device Drivers
    • Introduction
    • Classes
    • Issues
  • Kernel Modules
    • Modules vs Applications
    • Loading and Unloading
    • Module Parameters
    • Using printk() instead
  • Character Drivers
    • Data structures
    • Device registration
    • Device open and release
    • Device read and write
    • Using kmalloc() and kfree() instead
  • Module Debugging
    • Debugging using printk() messages
    • Debugging using /proc filesystem
    • Debugging using strace tool
    • Debugging using other methods
  • Advance Driver Operations
    • Device capabilities
    • Device poll and select
    • Device seeking
    • Device access control
  • Kernel Memory
    • Memory basics
    • Understanding kmalloc()
    • Memory pools
    • Memory limits
  • Accessing Hardware
    • Using I/O ports
    • Using I/O memory
    • Memory Mapping in Linux with mmap()
    • Using direct I/O
  • Interrupt Handling
    • Interrupt handler installation
    • Handler implementation
    • Interrupt sharing
    • Interrupt driven I/O
  • Data Types
    • Basic C data types
    • Interfacing data types
    • Portability issues
    • Linked lists
  • Block Drivers
    • Device registration
    • Device operations
    • Device processing
  • Miscellaneous/Discussion
    • Other devices

Course Schedule





News on ProvenPac

  ProvenPac Sdn. Bhd.
  C-4-3 Gembira Park,
  Jalan Riang, 58200
  Kuala Lumpur, Malaysia

  Tel: +603 03 5889 5889

No public course
currently scheduled.


Please inform me when
this course is scheduled.


Please contact me to
arrange in-house training.