《编写设备驱动程序》提供有关为面向字符的设备、面向块的设备、网络设备、SCSI 目标和 HBA 设备以及 USB 设备开发 Solaris 操作系统 (Solaris Operating System, Solaris OS) 驱动程序的信息。本书讨论了如何为符合 Solaris OS DDI/DKI(Device Driver Interface/Driver-Kernel Interface,设备驱动程序接口/驱动程序内核接口)的所有体系结构开发多线程可重入设备驱动程序。介绍了一种常用的驱动程序编写方法,该方法允许在编写驱动程序时忽略特定于平台的问题,如字节存储顺序 (endianness) 和数据排序等。
其他主题包括:强化 Solaris 驱动程序;电源管理;驱动程序自动配置;程控 I/O;直接内存访问 (Direct Memory Access, DMA);设备上下文管理;编译、安装和测试驱动程序;调试驱动程序以及将 Solaris 驱动程序移植到 64 位环境。
此 Solaris 发行版支持使用以下 SPARC 和 x86 系列处理器体系结构的系统:UltraSPARC、SPARC64、AMD64、Pentium 和 Xeon EM64T。若想了解本发行版支持哪些系统,请参见 http://www.sun.com/bigadmin/hcl 中的 Solaris OS: Hardware Compatibility Lists。本文档列举了在不同类型的平台上进行实现时的所有差别。
本书是为熟悉 UNIX 设备驱动程序的 UNIX 程序员编写的。虽然本书提供了概述信息,但编写本书的目的不是为了将其作为设备驱动程序的通用教程。
Solaris 操作系统 (Solaris operating system, Solaris OS) 既可在 SPARC 体系结构也可在 x86 体系结构中运行。而且,Solaris OS 既可在 64 位地址空间也可在 32 位地址空间中运行。除非特别说明,否则本文档中的信息适用于所有的平台和地址空间。
本书分为以下各章:
第 1 章介绍了 Solaris 平台上的设备驱动程序和关联的入口点。每种类型的设备驱动程序的入口点都列在表中。
第 2 章对 Solaris 内核进行了概述,并介绍了设备如何在设备树中表示为节点。
第 3 章针对设备驱动程序开发者介绍了 Solaris 多线程内核的各个方面。
第 4 章介绍了一组用于使用设备属性的接口。
第 5 章介绍了设备驱动程序如何记录事件,以及如何使用任务队列在以后执行任务。
第 6 章介绍了驱动程序必须提供的用于自动配置的支持。
第 7 章介绍了驱动程序用来读取或写入设备内存的接口和方法。
第 8 章介绍了用来处理中断的机制。这些机制包括分配、注册、维护和删除中断。
第 9 章介绍了直接内存访问 (direct memory access, DMA) 和 DMA 接口。
第 10 章介绍了用于管理设备和内核内存的接口。
第 11 章介绍了一组设备驱动程序用来管理用户对设备的访问的接口。
第 12 章介绍了用于 Power Management(这是一个用于管理能耗的框架)的接口。
第 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 驱动程序 (GLD)。GLDv3 框架是 MAC 插件和 MAC 驱动程序服务例程与结构的基于函数调用的接口。
第 20 章介绍了如何使用 USBA 2.0 框架编写客户机 USB 设备驱动程序。
第 21 章提供了有关编译、链接和安装驱动程序的信息。
第 22 章介绍了有关调试、测试和调优驱动程序的技术。
第 23 章介绍了推荐的用于编写驱动程序的编码惯例。
附录 A介绍了设备驱动程序的多平台硬件问题。
附录 B提供了设备驱动程序内核功能表。同时指出了过时的功能。
附录 C提供了更新设备驱动程序以在 64 位环境中运行的指导原则。
附录 D介绍了如何向帧缓存器驱动程序添加必要的接口,以使驱动程序能够与 Solaris 内核终端仿真器进行交互。
有关设备驱动程序接口的详细参考信息,请参见手册页第 9 节。第 9E 节 Intro(9E) 介绍 DDI/DKI(Device Driver Interface/Driver-Kernel Interface,设备驱动程序接口/驱动程序内核接口)驱动程序入口点。第 9F 节 Intro(9F) 介绍 DDI/DKI 内核函数。第 9P 节和 9S 节 Intro(9S) 介绍 DDI/DKI 属性和数据结构。
有关硬件及其他与驱动程序有关的问题的信息,请参见 Sun Microsystems 的以下书籍:
《Device Driver Tutorial 》,Sun Microsystems, Inc., 2008。
《应用程序包开发者指南》,Sun Microsystems, Inc., 2009。
《Open Boot PROM Toolkit User's Guide》,Sun Microsystems, Inc., 1996。
《STREAMS Programming Guide 》,Sun Microsystems, Inc., 2004。
《多线程编程指南》, Sun Microsystems, Inc., 2008。
《Solaris(64 位)开发者指南》,Sun Microsystems, Inc., 2004。
《Solaris 模块调试器指南》。Sun Microsystems, Inc., 2004。
《Solaris 动态跟踪指南》,Sun Microsystems, Inc., 2008。
《DTrace User Guide 》,Sun Microsystems, Inc., 2006。
以下其他参考书籍也可能会对您有所帮助:
《The SPARC Architecture Manual, Version 9》,Prentice Hall, 1998. ISBN 0-13-099227-5。
《The SPARC Architecture Manual, Version 8》,Prentice Hall,1994。ISBN 0-13-825001-4。
有关其他资源,请参见以下 Web 站点:
Oracle 欢迎您针对其文档质量和实用性提出意见和建议。如果您发现任何错误,或有其他任何改进建议,请转至 http://docs.sun.com,然后单击 Feedback(反馈)。请提供文档的标题和文件号码,以及章节和页码(如果有)。如果您需要回复,请告知。
Oracle Technology Network(Oracle 技术网络)提供了与 Oracle 软件相关的各种资源:
可在 Discussion Forums(讨论论坛)中讨论技术问题和解决方案。
从 Oracle 示例获取实际操作的逐步教程。
下载样例代码。
下表介绍了本书中的印刷约定。
表 P–1 印刷约定
字体或符号 |
含义 |
示例 |
---|---|---|
AaBbCc123 |
命令、文件和目录的名称;计算机屏幕输出 |
编辑 .login 文件。 使用 ls -a 列出所有文件。 machine_name% you have mail. |
AaBbCc123 |
用户键入的内容,与计算机屏幕输出的显示不同 |
machine_name% su Password: |
aabbcc123 |
要使用实名或值替换的命令行占位符 |
删除文件的命令为 rm filename。 |
AaBbCc123 |
保留未译的新词或术语以及要强调的词 |
这些称为 Class 选项。 注意:有些强调的项目在联机时以粗体显示。 |
新词术语强调 |
新词或术语以及要强调的词 |
高速缓存是存储在本地的副本。 请勿保存文件。 |
《书名》 |
书名 |
阅读《用户指南》的第 6 章。 |
下表显示了 Oracle Solaris OS 中包含的缺省 UNIX shell 系统提示符和超级用户提示符。请注意,在命令示例中显示的缺省系统提示符可能会有所不同,具体取决于 Oracle Solaris 发行版。
表 P–2 shell 提示符
shell |
提示符 |
---|---|
Bash shell、Korn shell 和 Bourne shell |
$ |
Bash shell、Korn shell 和 Bourne shell 超级用户 |
# |
C shell |
machine_name% |
C shell 超级用户 |
machine_name# |