Symmetry Innovations

  Standard Training Courses - Writing Drivers for the QNX® Neutrino® RTOS


You must have a good working knowledge of C and a general understanding of programming under the QNX Neutrino RTOS.


This course is designed for anyone who wants to develop drivers for the QNX Neutrino RTOS. By the end of the course, you will have written several sample drivers.

  • Familiarize the developer with the methods for writing different types of drivers under the QNX Neutrino RTOS.
  • Focus on real-world problems and the techniques for solving them.
  • Provide hands-on exercises so the developer can apply the concepts introduced in the course.

    The course consists of the following sections:

  • Introduction

    We'll start with an overview of the QNX Neutrino RTOS and QNX drivers, highlighting key features, services, and architecture. This introduction serves as a "roadmap" to the rest of the course, giving you a feel for what is involved in writing drivers for the QNX Neutrino RTOS.

  • Compiling and debugging

    This section provides a quick introduction to editing, compiling, running, and debugging your application from the QNX Momentics IDE, giving the minimum needed to do the programming exercises in the programming sections.

  • QNX Neutrino RTOS programming basics

    A review of basic QNX Neutrino RTOS programming concepts, such as threads, mutexes, message passing, pulses, and timing. This module provides a refresher for students who already have some familiarity with the topics but may be out of practice. The material also provides the background needed for other course topics.

  • Advanced topics for resource managers

    Continuing from the introductory module, this section covers the various ways to return from handlers, manage access and modification times, leave clients blocked, use multi-threaded resource managers, implement combine messages, perform unblock handling, receive pulses, and make select() and ionotify() work. Resource manager concepts are reinforced through a variety of hands-on exercises.

  • I/O

    Covers in detail the I/O aspects of a driver, including how to do port I/O and memory-mapped I/O, how to perform DMA memory configuration, and how to use the PCI API.

  • Interrupts

    Compared to conventional operating systems, the QNX Neutrino RTOS makes it relatively easy to write and debug interrupt handlers. We present several approaches to interrupt handlers and discuss how to tie handlers into resource managers. A hands-on exercise helps you apply these concepts to real-world problems.

  • I/O exercises

    A collection of challenging exercises that are a must for anyone learning to write drivers. The exercises used depend on the hardware available. You can choose from:

    • Screen driver exercise

      You'll write an I/O manager that does read()s from, write()s to, and devctl()s for changing the configuration of VGA text mode memory.

    • Keyboard driver exercise

      You will write a simple driver that handles x86 keyboard input.

  • File system resource managers

    A discussion on how to write file system resource managers, which are processes that represent data in the form of files or file systems. During this module, you will write a resource manager that presents a tar file as a file system.

  • Writing a character driver

    We'll look at using the Neutrino io-char library to write a driver for character devices such as serial chipsets that support the RS-232 protocol.

  • Hands-on exercises

    In each section of the course, you will have an opportunity to put what you learn into practice. After learning each programming technique, you will apply it to situations that may arise in your own applications.

Go to top of page