第 1 部分针对 Oracle Solaris 平台设计设备驱动程序
9. 直接内存访问 (Direct Memory Access, DMA)
14. 分层驱动程序接口 (Layered Driver Interface, LDI)
《编写设备驱动程序》提供有关为面向字符的设备、面向块的设备、网络设备、SCSI 目标和 HBA 设备以及 USB 设备开发 Oracle Solaris 操作系统 (Oracle Solaris Operating System, Oracle Solaris OS) 驱动程序的信息。本书讨论了如何为符合 Oracle 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 章对 Oracle Solaris 内核进行了概述,并介绍了设备如何表示为设备树中的节点。
第 3 章针对设备驱动程序开发者介绍了 Oracle 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 设备驱动程序。
第 21 章介绍了编写 SR-IOV 设备驱动程序的要求。
第 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 属性和数据结构。
有关硬件以及其他与驱动程序相关问题的信息,请参见以下书籍:
以下书籍也可能有用:
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 提示符
|