I/O Kit Device Driver Design Guidelines
PDF
Introduction
The libkern C++ Runtime
Creation of the Runtime System
Object Creation and Destruction
Object Introspection and Dynamic Casting
Binary Compatibility
libkern Collection and Container Classes
The libkern Classes and Your Driver
libkern Collection and Container Class Overview
Using the libkern Collection and Container Classes
Configuring Your Driver Using the libkern Classes
The IOService API
Driver Life-Cycle and Matching Functionality
Notifications and Driver Messaging
Access Methods
Power Management
Memory Mapping and Interrupt Handling
Miscellaneous IOService Methods
Making Hardware Accessible to Applications
Transferring Data Into and Out of the Kernel
Writing a Custom User Client
A Guided Tour Through a User Client
Kernel-User Notification
Presenting Notification Dialogs
Launching User-Space Executables
Presenting Bundled Dialogs
Displaying Localized Information About Drivers
Internationalizing Kernel Extensions
Getting the Path to a KEXT From User Space
Debugging Drivers
Some Debugging Basics
Debugging Matching and Loading Problems
Two-Machine Debugging
Logging
Testing and Deploying Drivers
Testing Strategies
Packaging Drivers for Installation
Developing a Device Driver to Run on an Intel-Based Macintosh
Byte Swapping
Handling Architectural Differences
Viewing Values in the Device Tree Plane
Interrupt Sharing in an Intel-Based Macintosh
Using the OSSynchronizeIO Function
Accessing I/O Space
Debugging on an Intel-Based Macintosh
Glossary
Revision History
Index