第 10 章。底层驱动程序

本文档无法详细介绍过多的 SCSI 底层驱动程序。作为对在此处给出任何肤浅概述的替代方案,本文为读者提供了查找更多信息的建议。

Linux 内核中 SCSI 子系统的源代码目录是一个很好的起点/usr/src/linux/drivers/scsi。一些驱动程序在 "readme" 文件中包含信息。README.<driver_name>。其他驱动程序在其 ".c" 文件的顶部包含大量信息。这些信息通常包括版本号、更改日志以及内核启动时间和模块加载时间选项。后者信息通常可以在各种 Linux 发行版的安装指南中找到。有时,驱动程序维护者会有一个包含最新错误修复信息的网站。官方维护者列在/usr/src/linux/MAINTAINERS文件中。如果那里没有任何信息,请查看 SCSI 子系统目录中相关的 ".c" 文件。一些旧驱动程序没有活跃的维护者。在这种情况下,发布到 linux-scsi 新闻组可能会有所帮助 [参见 N1 ]。

要了解内核源代码树提供的驱动程序的概述,请使用内核配置程序之一(例如 cd /usr/src/linux; make menuconfig)。与每个选项关联的帮助信息可以在一个(大型)平面文件中找到,位置在/usr/src/linux/Documentation/Configure.help。驱动程序可以从其他地方获得。为 lk 2.2 系列(或更早版本)制作的 SCSI 驱动程序不太可能在 lk 2.4 系列中成功构建或运行。[从编程的角度来看,没有太多需要更改的东西。] 驱动程序甚至可能仅以二进制形式提供,在这种情况下,请确保您信任提供商并密切遵循他们的说明。

底层驱动程序可以支持 2 种错误处理策略中的任何一种。较旧的一种被认为是过时的,而较新的一种通常称为 "new_eh"。"new_eh" 的优势在于它为每个主机使用单独的内核线程(命名为 "scsi_eh_<n>",其中 <n> 是主机号)以方便错误恢复。这两种错误处理策略在 lk 2.2 系列中也可用,但很少有适配器驱动程序使用 "new_eh"。在 lk 2.4 系列中,更多驱动程序正在使用它,并且即将推出的 lk 2.5 开发系列的计划是放弃对较旧的、过时的错误策略的中间层支持。

Drew Eckhardt 的 SCSI-HOWTO 文档 [参见参考文献 W7 ] 比本文档更详细地介绍了底层(适配器)驱动程序。由于该 SCSI-HOWTO 已有 5 年历史,许多事情发生了变化,并且添加了更多驱动程序。

有一个名为 scsi_debug 的底层驱动程序,它使用计算机的内存模拟一个或多个“直接访问”设备(即磁盘)。从 lk 2.4.17 开始,它充当“内存盘”。虽然 Linux 中有许多可用的内存盘实现(例如 ramfs),但 scsi_debug 可能有助于在有问题的安装中隔离有缺陷的 scsi 驱动程序。请参阅scsi_debug.c以获取更多信息。