编写适用于 Oracle® Solaris 11.2 的设备驱动程序

退出打印视图

更新时间: 2014 年 9 月
 
 

测试特定类型驱动程序

本节提供了一些有关如何测试某些类型的标准设备的建议。

测试磁带机

磁带机应通过执行多次归档和恢复操作来测试。cpio(1)tar(1) 命令可用于此目的。使用 dd(1M) 命令可将整个磁盘分区写入磁带。接下来,读回数据,并将数据写入另一个相同大小的分区。然后比较这两个副本。mt(1) 命令可以执行特定于磁带机的大多数 I/O 控制。请参见 mtio(7I) 手册页。尝试使用所有选项。以下三种方法可以测试磁带机的错误处理能力:

  • 移除磁带并尝试各种操作

  • 对磁带进行写保护并尝试写入

  • 在不同操作的执行过程中关闭电源

磁带机通常实现以独占方式访问的 open(9E) 调用。可以通过打开设备,然后让另一个进程尝试打开同一设备,来测试这些 open() 调用。

测试磁盘驱动程序

磁盘驱动程序应在原始设备模式和块设备模式下进行测试。对于块设备测试,请在设备上创建一个新的文件系统。然后,尝试挂载该新文件系统,并尝试执行多种文件操作。


注 - 文件系统使用页缓存,因此重复读取相同文件实际上并不会执行驱动程序。通过使用 mmap(2) 对文件进行内存映射,可以强制页缓存从设备中检索数据。然后使用 msync(3C) 使内存中的副本无效。

将另一个相同大小的(未挂载)分区复制到原始设备。然后使用 fsck(1M) 之类的命令检验副本的正确性。新分区也可以挂载,然后以后与旧分区进行逐文件比较。

异步通信驱动程序

通过为串行端口设置一个 login 连接线,可对异步驱动程序进行基本级别的测试。是否为一种较好的测试方法要看用户是否可以通过此连接线登录。但是,要充分测试异步驱动程序,必须使用多个高速中断来测试所有 I/O 控制函数。涉及回送串行电缆和较高数据传输速率的测试有助于确定驱动程序的可靠性。您可以在该连接线上运行 uucp(1C),以提供某些实践。但是,由于 uucp 执行其自己的错误处理,因此请确认驱动程序不会向 uucp 进程报告过多的错误。

这些类型的设备通常是基于 STREAMS 的。有关更多信息,请参见STREAMS Programming Guide

测试网络驱动程序

可以使用标准网络实用程序对网络驱动程序进行测试。由于可在网络的每个端点上比较文件,因此 ftp(1)rcp(1) 命令非常有用。该驱动程序应在网络负载较重的情况下测试,以便多个进程可以运行各种命令。

    网络负载较重包括以下情况:

  • 测试计算机的通信流量较大。

  • 网络上所有计算机之间的通信流量较大。

执行测试时,应拔下网络电缆,以确保驱动程序可从产生的错误情况中正常恢复。另一项重要测试是让驱动程序快速连续接收多个包,即背对背包。在这种情况下,负载较轻的网络上相对较快的主机应向测试计算机快速连续发送多个包。请检验接收驱动程序不会丢弃第二个以及后续的包。

这些类型的设备通常是基于 STREAMS 的。有关更多信息,请参见STREAMS Programming Guide

测试 SR-IOV 驱动程序

支持 SR-IOV 的驱动程序需要进行额外测试。还需要进行标准裸机测试,可以使用用于裸机测试的实用程序,如用于网络设备的 ftp 和 rcp。

有关 SR-IOV 驱动程序的信息,请参见Chapter 21, SR-IOV Drivers

使用以下命令来测试虚拟功能 (Virtual Function, VF) 的状态:

  • 已启用 VF-hotplug install

  • 已禁用 VF-hotplug uninstall

  • 已指定 VF-hotplug list

在 SPARC 系统上测试 VF 的状态时,除 hotplug 命令之外,还请使用 ldm (1M) 命令。

在各种虚拟化配置中测试 SR-IOV 设备也很重要。在 SPARC 和 x86 平台上测试 SR-IOV 驱动程序时,请尝试以下选项:

  • 请勿配置任何虚拟功能 (Virtual Function, VF)

  • 仅配置一个 VF

  • 以 2 的幂次方增加配置的 VF,直到达到 VF 的最大数目

在 SPARC 平台上,使用不同数目的 IO 域并在这些域中使用不同的 VF 分布来测试功能。尝试以下配置:

  • 将单个 VF 指定给单个 IO 域

  • 将 2 的幂次方个 VF(可至最大值)指定给单个 IO 域

  • 创建 2、4 或 8 个 IO 域并将不同数目的 VF 指定给每个域

  • 将一些 VF 指定给根域并将一些 VF 指定给 IO 域

如果设备或平台支持以下功能,请对其进行测试:

  • 从 VF 引导 IO 域

  • 以物理形式热插入或拔出 SR-IOV 卡

  • 在 SR-IOV 卡上执行动态重新配置操作

如果 Oracle Solaris 的多个版本都支持您的设备,对于某些测试,可通过在根域和 IO 域间混用 OS 版本来执行最终测试。