sg3_utils 软件包是使用 sg 接口的程序集合。这些实用程序可以按如下方式分类
“dd” 实用程序系列将 sg 设备文件名作为输入(即 if=<sg_dev_filen_name>),也作为输出。它们也可以使用原始设备文件名[1]而不是 sg 设备文件名。与标准 dd 命令的一个重要区别是,给块大小 (bs=) 参数的值必须是该设备的精确块大小,而不是像 dd 允许的那样是整数倍。这些 “dd” 变体适用于 SCSI 直接访问设备,例如磁盘和 CDROM(但不适用于 SCSI 磁带设备)。
sg3_utils 软件包设计用于 lk 2.4 系列中发现的 sg 版本 3 驱动程序。还有一个 sg_utils 软件包,它为 lk 2.2 系列(从 lk 2.2.6 开始)中发现的 sg 版本 2 驱动程序(以及对原始 sg 驱动程序的一些支持)支持这些命令的子集。在 sg 网站 www.torque.net/sg 上有指向最新 sg3_utils(和 sg_utils)软件包的链接。有 tarball 以及源代码和二进制 rpm 软件包。在编写本文时,最新的 sg3_utils tarball 位于 www.torque.net/sg/p/sg3_utils-0.97.tgz。该 tarball 中有一个 README 文件,应检查该文件以获取最新信息。更重要的实用程序命令(例如 sg_dd)具有 “man” 页面。[2]
本文档中讨论的几乎所有 sg 设备驱动程序功能都出现在这些程序中的一个或多个的代码中。例如,最近添加的 mmap-ed IO 可以在 sgm_dd、sg_read 和 sg_rbuf 中找到。
sg3_utils 软件包还提供了一些功能,这些功能可能对使用 sg 的应用程序很有用。在以下文件中声明的函数sg_err.h并在以下文件中定义sg_err.c对在 read() 或 ioctl(SG_IO) 中返回给应用程序的 SCSI 子系统错误进行分类。对于 sense 缓冲区,它们被解码为文本消息(根据 SCSI 2 定义)。还有一个函数可以执行 64 位寻道(llseek.h).
[1] | 原始设备名称的形式为/dev/raw/raw<n>并且可以绑定到块设备(例如,IDE 磁盘分区,例如/dev/hda3)。绑定是使用 raw 命令完成的(请参阅 “man raw”)。 |
[2] | 虽然作者编写了这些程序中的大多数,最初是为了测试 sg 驱动程序中的功能,但有些程序是由其他人贡献的。有关更多信息,请参阅 www.torque.net/sg/u_index.html。 |