JavaScript is required to for searching.
跳过导航链接
退出打印视图
编写设备驱动程序     Oracle Solaris 10 1/13 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.  块设备驱动程序

17.  SCSI 目标驱动程序

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

19.  网络设备驱动程序

20.  USB 驱动程序

Oracle Solaris 环境中的 USB

USBA 2.0 框架

USB 客户机驱动程序

绑定客户机驱动程序

USB 设备如何显示在系统中

USB 设备和 Oracle Solaris 设备树

兼容设备名称

具有多个接口的设备

检查设备驱动程序绑定

基本设备访问

连接客户机驱动程序之前

描述符树

注册驱动程序以获取设备访问权限

设备通信

USB 端点

缺省管道

管道状态

打开管道

关闭管道

数据传输

同步传输、异步传输和回调

请求

刷新管道

设备状态管理

热插拔 USB 设备

热插拔回调

热插入

热移除

热重新插入

电源管理

设备电源管理

系统电源管理

序列化

实用程序函数

设备配置工具

获取接口编号

管理整个设备

多配置设备

修改或获取替代设置

其他实用程序函数

检索字符串描述符

管道专用数据工具

清除 USB 条件

获取设备、接口或端点状态

获取设备的总线地址

USB 设备驱动程序样例

21.  SR-IOV 驱动程序

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

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

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

24.  推荐的编码方法

第 4 部分附录

A.  硬件概述

B.  Solaris DDI/DKI 服务汇总

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

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

E.  pci.conf 文件

索引

实用程序函数

本节介绍几个常规用途的函数。

设备配置工具

本节介绍与设备配置相关的函数。

获取接口编号

如果您使用的是多接口设备,usb_mid(7D) 驱动程序只会使其接口之一可用于调用驱动程序,此时您可能需要知道调用驱动程序所绑定到的接口的编号。使用 usb_get_if_number(9F) 函数执行以下任一任务:

管理整个设备

如果驱动程序管理整个复合设备,则可通过使用包含供应商 ID、产品 ID 和修订版 ID 的兼容名称将该驱动程序绑定到整个设备。绑定到整个复合设备的驱动程序必须像结点驱动程序一样管理该设备的所有接口。通常,不应将驱动程序绑定到整个复合设备。应改为使用一般的多接口驱动程序 usb_mid(7D)

使用 usb_owns_device(9F) 函数可确定驱动程序是否拥有整个设备。设备可以是复合设备。如果驱动程序拥有整个设备,则 usb_owns_device(9F) 函数将返回 TRUE

多配置设备

在任何特定时间,主机上只能使用 USB 设备的一种配置。大多数设备仅支持一种配置。但是,少数 USB 设备支持多种配置。

对于具有多种配置的任何设备,都是采用可使用某驱动程序的第一种配置。查找匹配项时,设备配置以数字顺序处理。如果未找到任何匹配的驱动程序,则设备将被设置采用第一种配置。在这种情况下,usb_mid 驱动程序将接管该设备,并将设备拆分为多个接口节点。使用 usb_get_cfg(9F) 函数可返回设备的当前配置。

您可以使用以下两种方法中的任何一种来请求采用其他配置。使用其中任何一种方法修改设备配置,均可确保 USBA 模块保持与设备同步。


注意

注意 - 不要通过手动执行 SET_CONFIGURATION USB 请求来更改设备配置。不支持使用 SET_CONFIGURATION 请求更改配置。


修改或获取替代设置

客户机驱动程序可以调用 usb_set_alt_if(9F) 函数以更改当前选定接口的选定替代设置。请确保关闭已明确打开的所有管道。切换替代设置时,usb_set_alt_if(9F) 函数将验证是否仅打开了缺省管道。确保在调用 usb_set_alt_if(9F) 之前已正确设置了设备。

更改替代设置可能会影响对驱动程序可用的端点以及特定于类和特定于供应商的描述符。有关端点和描述符的更多信息,请参见描述符树

调用 usb_get_alt_if(9F) 函数可检索当前替代设置的编号。


注 - 请求新替代设置、新配置或新接口时,必须关闭设备的除缺省管道外的所有管道。这是因为更改替代设置、配置或接口会更改设备的运行模式。此外,更改替代设置、配置或接口还会更改设备在系统中的呈现方式。


其他实用程序函数

本节介绍在 USB 设备驱动程序中有用的其他函数。

检索字符串描述符

调用 usb_get_string_descr(9F) 函数可检索给定了索引的字符串描述符。一些配置、接口或设备描述符具有关联的字符串 ID。这样的描述符包含具有非零值的字符串索引字段。将字符串索引字段值传递给 usb_get_string_descr(9F) 可检索对应的字符串。

管道专用数据工具

每个管道都有一个空间指针,专供客户机驱动程序使用。使用 usb_pipe_set_private(9F) 函数可安装一个值。使用 usb_pipe_get_private(9F) 函数可检索该值。当管道可能需要将其自己的客户机定义状态传递到回调,以进行特定处理时,此工具在回调中很有用。

清除 USB 条件

使用 usb_clr_feature(9F) 函数可执行以下任务:

获取设备、接口或端点状态

使用 usb_get_status(9F) 函数可发出 USB GET_STATUS 请求,以检索设备、接口或端点的状态。

获取设备的总线地址

使用 usb_get_addr(9F) 函数可获取设备的 USB 总线地址以用于调试目的。此地址映射到特定的 USB 端口。