Implement Your Device Driver (Compact 7)
3/12/2014
After you have completed the steps in Plan Your Device Driver, you can begin implementing your device driver. The easiest way to begin this implementation is to start with an existing sample device driver, modify it to fit your design, and add functionality to support your hardware. When you have completed an initial device driver implementation, see Build and Test Your Device Driver for the steps to build your device driver.
Because each device driver can be very different in architecture, the interfaces it supports, its size, the complexity of its implementation, and the kind of hardware it supports, no single step-by-step procedure for device driver development applies to all device drivers. Your device hardware may generate interrupts or may be a polled device. It may support direct memory access (DMA), and you may be able to turn it on and off for power management support. Applications may require your device driver to manage multiple open instances across multiple devices, or your driver may support only one open instance on one hardware device.
For this reason, this guide focuses on the most frequently used scenarios:
- Porting a sample stream driver to start your device driver project
- Managing device driver context
- Adding support for interrupt handling
- Marshaling data between caller and device driver address spaces
- Adding support for DMA
- Supporting device interfaces
- Supporting power management
Not all implementation tasks in this article may apply to your device driver. Choose from the topics in this guide that apply to your particular device driver design. Each topic provides pointers to reference documentation that explains the relevant APIs in more detail. Some topics refer you to a sample device driver that provides a working example of the functionality that is explained in the topic; you can study this example code to understand how to implement the functionality that you need while you learn how to use the APIs more effectively.
In This Section
- Port the Sample Stream Driver
Describes how to copy the sample stream driver to your OS design as a starting point for your device driver implementation.
- Manage Device Driver Context
Shows how device drivers use contexts to manage multiple open instances and multiple devices, and provides example code that shows how to create and return a device context and an open context.
- Add Interrupt Handling Functionality
Describes how device drivers use interrupt service routines (ISRs) and interrupt service threads (ISTs) to process interrupts to service their devices.
- Marshal Data Between Memory Buffers
Describes the kernel buffer marshaling functions that marshal data between applications and your device driver.
- Support Direct Memory Access
Describes three ways that you can use DMA to transfer data between memory and the device, and from memory to memory.
- Support Device Interfaces
Describes how device drivers use device interface classes to implement device interfaces.
- Support Power Management
Describes how you can add power management support to your device driver to reduce power consumption on your device.