JavaScript is required to for searching.
跳过导航链接
退出打印视图
编写设备驱动程序     Oracle Solaris 11.1 Information Library (简体中文)
为本文档评分
search filter icon
search icon

文档信息

前言

第 1 部分针对 Oracle Solaris 平台设计设备驱动程序

1.  Oracle Solaris 设备驱动程序概述

设备驱动程序基础知识

什么是设备驱动程序?

什么是设备驱动程序入口点?

设备驱动程序入口点

通用于所有驱动程序的入口点

设备访问入口点

可装入模块入口点

自动配置入口点

内核统计信息入口点

电源管理入口点

系统停止入口点

通用入口点汇总

用于块设备驱动程序的入口点

用于字符设备驱动程序的入口点

用于 STREAMS 设备驱动程序的入口点

用于内存映射设备的入口点

网络设备驱动程序入口点

用于 SCSI HBA 驱动程序的入口点

用于 PC 卡驱动程序的入口点

设备驱动程序设计注意事项

DDI/DKI 功能

设备 ID

设备属性

中断处理

回调函数

软件状态管理

程控 I/O 设备访问

直接内存访问 (Direct Memory Access, DMA)

分层驱动程序接口

驱动程序上下文

返回错误

动态内存分配

热插拔

2.  Oracle Solaris 内核和设备树

3.  多线程

4.  属性

5.  管理事件和排队任务

6.  驱动程序自动配置

7.  设备访问:程控 I/O

8.  中断处理程序

9.  直接内存访问 (Direct Memory Access, DMA)

10.  映射设备和内核内存

11.  设备上下文管理

12.  电源管理

13.  强化 Oracle Solaris 驱动程序

14.  分层驱动程序接口 (Layered Driver Interface, LDI)

第 2 部分设计特定种类的设备驱动程序

15.  字符设备驱动程序

16.  块设备驱动程序

17.  SCSI 目标驱动程序

18.  SCSI 主机总线适配器驱动程序

19.  网络设备驱动程序

20.  USB 驱动程序

21.  SR-IOV 驱动程序

第 3 部分生成设备驱动程序

22.  编译、装入、打包和测试驱动程序

23.  调试、测试和调优设备驱动程序

24.  推荐的编码方法

第 4 部分附录

A.  硬件概述

B.  Oracle Solaris DDI/DKI 服务汇总

C.  使设备驱动程序支持 64 位

D.  控制台帧缓存器驱动程序

E.  pci.conf 文件

索引

请告诉我们如何提高我们的文档:
过于简略
不易阅读或难以理解
重要信息缺失
错误的内容
需要翻译的版本
其他
Your rating has been updated
感谢您的反馈!

您的反馈将非常有助于我们提供更好的文档。 您是否愿意参与我们的内容改进并提供进一步的意见?

设备驱动程序基础知识

本节介绍 Oracle Solaris 平台上的设备驱动程序及其入口点。

什么是设备驱动程序?

设备驱动程序是一种内核模块,负责管理硬件设备的底层 I/O 操作。设备驱动程序是使用标准接口编写的,内核可通过调用该标准接口与设备进行交互。设备驱动程序也可以是仅针对软件的,即模拟仅存在于软件中的设备,如 RAM 磁盘、总线以及伪终端。

设备驱动程序包含与设备进行通信时所需的所有特定于设备的代码。此代码包括一组用于系统其余部分的标准接口。就像系统调用接口可使应用程序不受平台特定信息影响一样,此接口可保护内核不受设备特定信息的影响。应用程序和内核其余部分需要非常少的特定于设备的代码(如果有)对此设备进行寻址。这样,设备驱动程序使得系统的可移植性更强,并更易于维护。

初始化 Oracle Solaris 操作系统 (Oracle Solaris operating system, Oracle Solaris OS) 后,设备会进行自标识并组织为设备树,即设备分层结构。实际上,设备树是内核的硬件模型。单个设备驱动程序表示为树中的一个节点,并且不包含任何子节点。此类型的节点称为叶驱动程序。为其他驱动程序提供服务的驱动程序称为总线结点驱动程序,并显示为包含子节点的节点。在引导过程中,物理设备会映射到树中的驱动程序,以便可以在需要时找到这些驱动程序。有关 Oracle Solaris OS 如何使用设备的更多信息,请参见第 2 章

设备驱动程序按其处理 I/O 的方式进行分类。设备驱动程序分为以下三大类:

什么是设备驱动程序入口点?

入口点是设备驱动程序内的一个函数,外部实体可调用此函数以访问某种驱动程序功能或运行某个设备。 每个设备驱动程序都提供一组标准函数作为入口点。有关所有驱动程序类型入口点的完整列表,请参见 Intro(9E) 手册页。Oracle Solaris 内核使用入口点执行以下常见任务区域:

根据设备执行的操作类型,不同类型设备的驱动程序具有不同的入口点集。例如,对于内存映射的面向字符的设备,其驱动程序支持 devmap(9E) 入口点,而块驱动程序不支持此入口点。

使用基于驱动程序名称的前缀可为驱动程序函数指定唯一的名称。通常,此前缀是驱动程序的名称,例如 xx_open() 代表驱动程序 xxopen(9E) 例程。有关更多信息,请参见使用唯一前缀来避免内核符号冲突。在本书后面的示例中,xx 用作驱动程序前缀。