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 内核和设备树

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.  块设备驱动程序

块驱动程序结构概述

文件 I/O

块设备自动配置

控制设备访问

open() 入口点(块驱动程序)

close() 入口点(块驱动程序)

strategy() 入口点

buf 结构

bp_mapin 结构

同步数据传输(块驱动程序)

异步数据传输(块驱动程序)

检查是否有无效的 buf 请求

对请求进行排队

开始第一个传输

处理中断的设备

dump()print() 入口点

dump() 入口点(块驱动程序)

print() 入口点(块驱动程序)

磁盘设备驱动程序

磁盘 ioctl

磁盘性能

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
感谢您的反馈!

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

磁盘设备驱动程序

磁盘设备是一类重要的块设备驱动程序。

磁盘 ioctl

Oracle Solaris 磁盘驱动程序至少需要支持一组特定于 Oracle Solaris 磁盘驱动程序的 ioctl 命令。在 dkio(7I) 手册页中指定了这些 I/O 控制。磁盘 I/O 控制用于将磁盘信息传入/传出设备驱动程序。磁盘实用程序命令(如 format(1M)newfs(1M))支持 Oracle Solaris 磁盘设备。强制性的 Sun 磁盘 I/O 控制如下:

DKIOCINFO

返回描述磁盘控制器的信息

DKIOCGAPART

返回磁盘的分区映射

DKIOCSAPART

设置磁盘的分区映射

DKIOCGGEOM

返回磁盘的几何参数

DKIOCSGEOM

设置磁盘的几何参数

DKIOCGVTOC

返回磁盘的卷目录

DKIOCSVTOC

设置磁盘的卷目录

磁盘性能

Oracle Solaris DDI/DKI 提供了优化 I/O 传输以提高文件系统性能的工具。它是一种管理 I/O 请求列表以便优化文件系统磁盘访问的机制。有关对 I/O 请求进行排队的说明,请参见异步数据传输(块驱动程序)

diskhd 结构用于管理 I/O 请求链接表。

struct diskhd {
    long     b_flags;         /* not used, needed for consistency*/
    struct   buf *b_forw,     *b_back;     /* queue of unit queues */
    struct   buf *av_forw,    *av_back;    /* queue of bufs for this unit */
    long     b_bcount;        /* active flag */
};

diskhd 数据结构具有驱动程序可处理的两个 buf 指针。av_forw 指针指向第一个活动 I/O 请求。第二个指针 av_back 指向列表中的上一个活动请求。

一个指向此结构的指针以及一个指向要处理的当前 buf 结构的指针作为参数传递给 disksort(9F)disksort() 例程对 buf 请求排序以优化磁盘查找。然后此例程将 buf 指针插入 diskhd 列表。disksort() 程序将 buf 结构的 b_resid 中的值用作排序关键字。驱动程序负责设置此值。大多数 Sun 磁盘驱动程序使用柱面组作为排序关键字。此方法优化了文件系统读前访问。

将数据添加到 diskhd 列表后,设备需要传输这些数据。如果设备未忙于处理请求,则 xxstart() 例程会将第一个 buf 结构拉出 diskhd 列表并开始传输。

如果设备正忙,则驱动程序会从 xxstrategy() 入口点返回。当硬件执行完数据传输时,便会产生中断。随后会调用驱动程序的中断例程为设备提供服务。在提供中断服务后,驱动程序可以调用 start() 例程来处理 diskhd 列表中的下一个 buf 结构。