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.  驱动程序自动配置

驱动程序的装入和卸载

驱动程序必需的数据结构

modlinkage 结构

modldrv 结构

dev_ops 结构

cb_ops 结构

可装入驱动程序接口

_init() 示例

_fini() 示例

_info() 示例

设备配置概念

设备实例和实例编号

次要节点和次要设备号

probe() 入口点

attach() 入口点

驱动程序软状态管理

锁变量和条件变量的初始化

创建从设备节点

延迟连接

detach() 入口点

getinfo() 入口点

使用设备 ID

注册设备 ID

注册设备提供的 ID

注册虚构 ID

注销设备 ID

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

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

驱动程序的装入和卸载

系统从用于自动配置的内核模块目录的 drv 子目录装入驱动程序二进制模块。请参见将驱动程序复制到模块目录

将模块读入内存且解析了所有符号之后,系统将调用此模块的 _init(9E) 入口点。_init() 函数将调用 mod_install(9F),实际上就是装入此模块。


注 - 调用 mod_install() 期间,一旦调用了 mod_install(),其他线程便可以调用 attach(9E)。从编程角度来看,在调用 mod_install() 之前必须执行所有 _init() 初始化。如果 mod_install() 失败(即返回非零值),则必须取消初始化。


一旦 _init() 成功完成,便会在系统中正确注册驱动程序。实际上,此时驱动程序并不管理任何设备。设备管理是在设备配置过程中进行的。

为了节省系统内存或根据用户的明确请求,系统会卸载驱动程序二进制模块。从内存中删除驱动程序代码和数据之前,将调用该驱动程序的 _fini(9E) 入口点。当且仅当 _fini() 返回成功信息时,才会卸载驱动程序。

下图概述了设备驱动程序的结构。阴影区域突出显示驱动程序的数据结构和入口点。阴影区域的上半部分包括支持驱动程序装入和卸载的数据结构和入口点。下半部分与驱动程序配置相关。

图 6-1 模块装入和自动配置入口点

image:图中显示了用于自动配置和模块装入的结构和入口点。