Writing Device Drivers provides information on developing drivers for character-oriented devices, block-oriented devices, network devices, SCSI target and HBA devices, and USB devices for the Oracle Solaris Operating System (Oracle Solaris OS). This book discusses how to develop multithreaded reentrant device drivers for all architectures that conform to the Oracle Solaris OS DDI/DKI (Device Driver Interface, Driver-Kernel Interface). A common driver programming approach is described that enables drivers to be written without concern for platform-specific issues such as endianness and data ordering.
Additional topics include hardening Oracle Solaris drivers; power management; driver autoconfiguration; programmed I/O; Direct Memory Access (DMA); device context management; compilation, installation, and testing drivers; debugging drivers; and porting Oracle Solaris drivers to a 64-bit environment.
Note - This Oracle Solaris release supports systems that use the SPARC and x86 families of processor architectures. The supported systems appear in the Oracle Solaris OS: Hardware Compatibility Lists. This document cites any implementation differences between the platform types.
In this document, these x86 related terms mean the following:
x86 refers to the larger family of 64-bit and 32-bit x86 compatible products.
x64 relates specifically to 64-bit x86 compatible CPUs.
"32-bit x86" points out specific 32-bit information about x86 based systems.
For supported systems, see the Oracle Solaris OS: Hardware Compatibility Lists.
This book is written for UNIX programmers who are familiar with UNIX device drivers. Overview information is provided, but the book is not intended to serve as a general tutorial on device drivers.
Note - The Oracle Solaris operating system (Oracle Solaris OS) runs on both SPARC and x86 architectures. The Oracle Solaris OS also runs on both 64-bit and 32-bit address spaces. The information in this document applies to all platforms and address spaces unless specifically noted.
This book is organized into the following chapters:
Chapter 1, Overview of Oracle Solaris Device Drivers provides an introduction to device drivers and associated entry points on the Oracle Solaris platform. The entry points for each device driver type are presented in tables.
Chapter 2, Oracle Solaris Kernel and Device Tree provides an overview of the Oracle Solaris kernel with an explanation of how devices are represented as nodes in a device tree.
Chapter 3, Multithreading describes the aspects of the Oracle Solaris multithreaded kernel that are relevant for device driver developers.
Chapter 4, Properties describes the set of interfaces for using device properties.
Chapter 5, Managing Events and Queueing Tasks describes how device drivers log events and how to use task queues to perform a task at a later time.
Chapter 6, Driver Autoconfiguration explains the support that a driver must provide for autoconfiguration.
Chapter 7, Device Access: Programmed I/O describes the interfaces and methodologies for drivers to read or write to device memory.
Chapter 8, Interrupt Handlers describes the mechanisms for handling interrupts. These mechanisms include allocating, registering, servicing, and removing interrupts.
Chapter 9, Direct Memory Access (DMA) describes direct memory access (DMA) and the DMA interfaces.
Chapter 10, Mapping Device and Kernel Memory describes interfaces for managing device and kernel memory.
Chapter 11, Device Context Management describes the set of interfaces that enable device drivers to manage user access to devices.
Chapter 12, Power Management explains the interfaces for Power Management, a framework for managing power consumption.
Chapter 13, Hardening Oracle Solaris Drivers describes how to integrate fault management capabilities into I/O device drivers, how to incorporate defensive programming practices, and how to use the driver hardening test harness.
Chapter 14, Layered Driver Interface (LDI) describes the LDI, which enables kernel modules to access other devices in the system.
Chapter 15, Drivers for Character Devices describes drivers for character-oriented devices.
Chapter 16, Drivers for Block Devices describes drivers for a block-oriented devices.
Chapter 17, SCSI Target Drivers outlines the Sun Common SCSI Architecture (SCSA) and the requirements for SCSI target drivers.
Chapter 18, SCSI Host Bus Adapter Drivers explains how to apply SCSA to SCSI Host Bus Adapter (HBA) drivers.
Chapter 19, Drivers for Network Devices describes the Generic LAN driver (GLD). The GLDv3 framework is a function calls-based interface of MAC plugins and MAC driver service routines and structures.
Chapter 20, USB Drivers describes how to write a client USB device driver using the USBA 2.0 framework.
Chapter 21, SR-IOV Drivers describes the requirements to write a SR-IOV device driver.
Chapter 22, Compiling, Loading, Packaging, and Testing Drivers provides information on compiling, linking, and installing a driver.
Chapter 23, Debugging, Testing, and Tuning Device Drivers describes techniques for debugging, testing, and tuning drivers.
Chapter 24, Recommended Coding Practices describes the recommended coding practices for writing drivers.
Appendix A, Hardware Overview discusses multi-platform hardware issues for device drivers.
Appendix B, Summary of Oracle Solaris DDI/DKI Services provides tables of kernel functions for device drivers. Deprecated functions are indicated as well.
Appendix C, Making a Device Driver 64-Bit Ready provides guidelines for updating a device driver to run in a 64-bit environment.
Appendix D, Console Frame Buffer Drivers describes how to add the necessary interfaces to a frame buffer driver to enable the driver to interact with the Oracle Solaris kernel terminal emulator.
For detailed reference information about the device driver interfaces, see the section 9 man pages. Section 9E, Intro(9E), describes DDI/DKI (Device Driver Interface, Driver-Kernel Interface) driver entry points. Section 9F, Intro(9F), describes DDI/DKI kernel functions. Sections 9P and 9S, Intro(9S), describe DDI/DKI properties and data structures.
For information on hardware and other driver-related issues, see the following books:
The following book might also be useful:
SPARC International; The SPARC Architecture Manual, Version 9; Prentice Hall; 1993; ISBN 978-0130992277
Oracle customers have access to electronic support through My Oracle Support. For information, visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info or visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs if you are hearing impaired.
The following table describes the typographic conventions that are used in this book.
Table P-1 Typographic Conventions
The following table shows the default UNIX system prompt and superuser prompt for shells that are included in the Oracle Solaris OS. Note that the default system prompt that is displayed in command examples varies, depending on the Oracle Solaris release.
Table P-2 Shell Prompts