编写设备驱动程序

测试特定类型驱动程序

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

磁带驱动程序

磁带驱动程序应通过执行多次归档和恢复操作来测试。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》