第 1 部分针对 Oracle Solaris 平台设计设备驱动程序
9. 直接内存访问 (Direct Memory Access, DMA)
《编写设备驱动程序》提供了有关为 Oracle Solaris 操作系统 (Oracle Solaris Operating System, Oracle Solaris OS) 开发适用于面向字符的设备、面向块的设备、网络设备、SCSI 目标和 HBA 设备以及 USB 设备的驱动程序的相关信息。本书讨论了如何为符合 Solaris OS DDI/DKI(Device Driver Interface/Driver-Kernel Interface,设备驱动程序接口/驱动程序内核接口)的所有体系结构开发多线程可重入设备驱动程序。介绍了一种常用的驱动程序编写方法,该方法允许在编写驱动程序时忽略特定于平台的问题,如字节存储顺序 (endianness) 和数据排序等。
其他主题包括:强化 Oracle Solaris 驱动程序;电源管理;驱动程序自动配置;程控 I/O;直接内存访问 (Direct Memory Access, DMA);设备上下文管理;编译、安装和测试驱动程序;调试驱动程序以及将 Oracle Solaris 驱动程序移植到 64 位环境。
注 - 此 Oracle Solaris 发行版支持使用 SPARC 和 x86 系列处理器体系结构的系统。支持的系统可以在《Oracle Solaris OS: Hardware Compatibility Lists》(《Oracle Solaris OS:硬件兼容性列表》)中找到。本文档列举了在不同类型的平台上进行实现时的所有差别。
在本文档中,这些与 x86 相关的术语表示以下含义:
x86 泛指 64 位和 32 位的 x86 兼容产品系列。
x64 特指 64 位的 x86 兼容 CPU。
“32 位 x86”指出了有关基于 x86 的系统的特定 32 位信息。
有关支持的系统,请参见《Oracle Solaris OS: Hardware Compatibility Lists》(《Oracle Solaris OS:硬件兼容性列表》)。
本书是为熟悉 UNIX 设备驱动程序的 UNIX 程序员编写的。虽然本书提供了概述信息,但编写本书的目的不是为了将其作为设备驱动程序的通用教程。
注 - Oracle Solaris 操作系统 (Oracle Solaris Operating System, Oracle Solaris OS) 既可在 SPARC 体系结构也可在 x86 体系结构中运行。而且,Oracle Solaris OS 既可在 64 位地址空间也可在 32 位地址空间中运行。除非特别说明,否则本文档中的信息适用于所有的平台和地址空间。
本书分为以下各章:
第 1 章介绍了 Oracle Solaris 平台上的设备驱动程序和关联的入口点。每种类型的设备驱动程序的入口点都列在表中。
第 2 章对 Solaris 内核进行了概述,并介绍了如何将设备表示为设备树中的节点。
第 3 章针对设备驱动程序开发者介绍了 Solaris 多线程内核的各个方面。
第 4 章介绍了一组用于使用设备属性的接口。
第 5 章介绍了设备驱动程序如何记录事件,以及如何使用任务队列在以后执行任务。
第 6 章介绍了驱动程序必须提供的用于自动配置的支持。
第 7 章 介绍了驱动程序用来读取或写入设备内存的接口和方法。
第 8 章介绍了用来处理中断的机制。这些机制包括分配、注册、维护和删除中断。
第 9 章 介绍了直接内存访问 (Direct Memory Access, DMA) 和 DMA 接口。
第 10 章介绍了用于管理设备和内核内存的接口。
第 11 章介绍了一组设备驱动程序用来管理用户对设备的访问的接口。
第 12 章介绍了用于电源管理(一个用于管理能耗的框架)的接口。
第 13 章介绍了如何将故障管理功能集成到 I/O 设备驱动程序中、如何引入防御性编程做法,以及如何使用驱动程序强化测试工具。
第 14 章 介绍了 LDI,利用 LDI,内核模块可以访问系统中的其他设备。
第 15 章介绍了面向字符的设备的驱动程序。
第 16 章介绍了面向块的设备的驱动程序。
第 17 章概述了 Sun 公用 SCSI 体系结构 (Sun Common SCSI Architecture, SCSA) 和对 SCSI 目标驱动程序的要求。
第 18 章介绍了如何将 SCSA 应用到 SCSI 主机总线适配器 (Host Bus Adapter, HBA) 驱动程序。
第 19 章介绍了通用 LAN 驱动程序 (Generic LAN driver, GLD)。GLDv3 框架是 MAC 插件和 MAC 驱动程序服务例程与结构的基于函数调用的接口。
第 20 章介绍了如何使用 USBA 2.0 框架编写客户机 USB 设备驱动程序。
第 22 章提供了有关编译、链接和安装驱动程序的信息。
第 23 章介绍了有关调试、测试和调优驱动程序的技术。
第 24 章介绍了推荐的用于编写驱动程序的编码惯例。
附录 A介绍了设备驱动程序的多平台硬件问题。
附录 B提供了设备驱动程序内核函数表。同时指出了过时的函数。
附录 C提供了更新设备驱动程序以在 64 位环境中运行的指导原则。
附录 D介绍了如何为帧缓存器驱动程序添加必要的接口,以使驱动程序能够与 Oracle Solaris 内核终端仿真器进行交互。
有关设备驱动程序接口的详细参考信息,请参见手册页第 9 节。第 9E 节 Intro(9E) 介绍 DDI/DKI(Device Driver Interface/Driver-Kernel Interface,设备驱动程序接口/驱动程序内核接口)驱动程序入口点。第 9F 节 Intro(9F) 介绍 DDI/DKI 内核函数。第 9P 节和 9S 节 Intro(9S) 介绍 DDI/DKI 属性和数据结构。
有关硬件以及其他与驱动程序相关问题的信息,请参见以下书籍:
《Open Boot PROM Toolkit User's Guide》
以下书籍也可能有用:
SPARC International,《The SPARC Architecture Manual, Version 9》,Prentice Hall,1993,ISBN 978-0130992277
Oracle 客户可以通过 My Oracle Support 获取电子支持。有关信息,请访问 http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info,或访问 http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs(如果您听力受损)。
下表介绍了本书中的印刷约定。
表 P-1 印刷约定
|
下表显示了 Oracle Solaris OS 中包含的缺省 UNIX shell 系统提示符和超级用户提示符。请注意,在命令示例中显示的缺省系统提示符可能会有所不同,具体取决于 Oracle Solaris 发行版。
表 P-2 shell 提示符
|