编写设备驱动程序

前言

编写设备驱动程序》提供有关为面向字符的设备、面向块的设备、网络设备、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 位地址空间中运行。除非特别说明,否则本文档中的信息适用于所有的平台和地址空间。


本书的结构

本书分为以下各章:

相关书籍和文章

有关设备驱动程序接口的详细参考信息,请参见手册页第 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 的以下书籍:

以下其他参考书籍也可能会对您有所帮助:

文档、支持和培训

有关其他资源,请参见以下 Web 站点:

Oracle 欢迎您提出意见

Oracle 欢迎您针对其文档质量和实用性提出意见和建议。如果您发现任何错误,或有其他任何改进建议,请转至 http://docs.sun.com,然后单击 Feedback(反馈)。请提供文档的标题和文件号码,以及章节和页码(如果有)。如果您需要回复,请告知。

Oracle Technology Network(Oracle 技术网络)提供了与 Oracle 软件相关的各种资源:

印刷约定

下表介绍了本书中的印刷约定。

表 P–1 印刷约定

字体或符号 

含义 

示例 

AaBbCc123

命令、文件和目录的名称;计算机屏幕输出 

编辑 .login 文件。

使用 ls -a 列出所有文件。

machine_name% you have mail.

AaBbCc123

用户键入的内容,与计算机屏幕输出的显示不同 

machine_name% su

Password:

aabbcc123

要使用实名或值替换的命令行占位符 

删除文件的命令为 rm filename

AaBbCc123

保留未译的新词或术语以及要强调的词 

这些称为 Class 选项。

注意:有些强调的项目在联机时以粗体显示。

新词术语强调

新词或术语以及要强调的词 

高速缓存是存储在本地的副本。

保存文件。

《书名》 

书名 

阅读《用户指南》的第 6 章。

命令中的 shell 提示符示例

下表显示了 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#