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

文档信息

前言

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

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

2.  Oracle Solaris 内核和设备树

什么是内核?

多线程执行环境

虚拟内存

作为特殊文件的设备

DDI/DKI 接口

设备树概述

设备树组件

显示设备树

libdevinfo

prtconf 命令

/devices 目录

将驱动程序绑定到设备

通用设备名称

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 内核是用于管理系统资源的程序。内核将应用程序与系统硬件隔离,并为它们提供基本系统服务,如输入/输出 (input/output, I/O) 管理、虚拟内存和调度。内核由需要时动态装入内存的对象模块组成。

Oracle Solaris 内核在逻辑上可分为两个部分:第一部分称为内核,用于管理文件系统、调度和虚拟内存。第二部分称为 I/O 子系统,用于管理物理组件。

内核提供了一组接口,供可通过系统调用访问的应用程序使用。Reference Manual Collection 的第 2 部分对系统调用进行了介绍(请参见 Intro(2))。某些系统调用用于调用设备驱动程序以执行 I/O 操作。设备驱动程序是可装入的内核模块,用于管理数据传输,同时将内核的其余部分与设备硬件隔离。为了与操作系统兼容,设备驱动程序需要能够提供多线程、虚拟内存寻址以及 32 位和 64 位操作之类的功能。

下图解释了内核的工作机制。内核模块用于处理来自应用程序的系统调用。I/O 模块用于与硬件通信。

图 2-1 Oracle Solaris 内核

image:图中显示了用户级应用程序对特定内核级模块的调用,以及驱动程序与设备其他模块之间的调用。

内核通过以下功能提供对设备驱动程序的访问:

多线程执行环境

Oracle Solaris 内核是多线程的。在多处理器计算机上,多个内核线程可以运行内核代码并且可以并发运行。内核线程也可能随时被其他内核线程抢先。

内核的多线程特征对设备驱动程序强加了某些附加限制。有关多线程注意事项的更多信息,请参见第 3 章。必须对设备驱动程序进行编码,使其在许多不同线程请求时按需运行。对于每个线程,驱动程序必须处理重叠的 I/O 请求的争用问题。

虚拟内存

Oracle Solaris 虚拟内存系统的完整概述超出本书范围,但在讨论设备驱动程序时使用了两个特别重要的虚拟内存术语:虚拟地址和地址空间。

作为特殊文件的设备

设备在文件系统中表示为特殊文件。在 Oracle Solaris OS 中, 这些文件驻留在 /devices 目录分层结构中。

特殊文件的类型可以为,也可以为字符。该类型表示了设备驱动程序的种类。驱动程序可以实现这两种类型。例如,磁盘驱动程序导出字符接口以供 fsck(1)mkfs(1) 实用程序使用,导出块接口以供文件系统使用。

每个特殊文件都与一个设备编号 (dev_t) 关联。设备编号由主设备号次要设备号组成。设备号标识与特殊文件关联的设备驱动程序。次要设备号由设备驱动程序创建,供其用来进一步标识特殊文件。通常,次要设备号是一种编码,用于标识驱动程序应访问的设备实例以及应执行的访问类型。例如,次要设备号可以标识用于备份的磁带设备,并可指定完成备份操作后需要将磁带反绕。

DDI/DKI 接口

在 System V Release 4 (SVR4) 中,设备驱动程序与 UNIX 内核其余部分之间的接口被标准化为 DDI/DKI。DDI/DKI 在 Reference Manual Collection 的第 9 部分中进行介绍。第 9E 节介绍驱动程序入口点,第 9F 节介绍驱动程序可调用的函数,而第 9S 节介绍设备驱动程序使用的内核数据结构。请参见 Intro(9E)Intro(9F)Intro(9S)

DDI/DKI 旨在对设备驱动程序与内核其余部分之间的所有接口进 行标准化并进行说明。此外,无论处理器体系结构是 SPARC 还是 x86,DDI/DKI 都允许任何运行 Oracle Solaris OS 的计算机的驱动程序的源代码和二进制代码保持兼容。仅使用 DDI/DKI 中包含的内核函数的驱动程序称为符合 DDI/DKI 标准的设备驱动程序

DDI/DKI 允许您为运行 Oracle Solaris OS 的任何计算机编写与平台无关的设备驱动程序。通过这些二进制代码兼容的驱动程序,您可以更方便地将第三方硬件和软件集成到运行 Oracle Solaris OS 的任何计算机中。DDI/DKI 与体系结构无关,从而允许同一驱动程序在一组不同的计算机体系结构中工作。

平台无关性是通过在以下方面设计 DDI 实现的: