有多种方法可以调试 sg 驱动程序正在发生的事情。在/proc/scsi/sg目录中提供的信息可能很有用,尤其是debug伪文件。它在被调用时输出 sg 驱动程序的状态。在正确的时间调用它可能是一个挑战。一种方法(在 SANE 中使用)是像这样在应用程序中使用 sg 驱动程序的适当时间调用 system() 系统调用
system("cat /proc/scsi/sg/debug");
另一种调试技术是使用 strace 命令(参见其“man”页)跟踪程序发出的所有系统调用。此命令也可用于获取定时信息(使用“-r”和“t”选项)。
要调试 sg 驱动程序本身,则需要构建内核并选择 CONFIG_SCSI_LOGGING。然后,每当 sg 驱动程序被调用时,都会向日志(通常是/var/log/messages)和/或控制台发送大量输出。此调试输出通过以下方式打开
$ echo "scsi log timeout 7" > /proc/scsi/scsi
$ echo "scsi log timeout 0" > /proc/scsi/scsi
如果您希望系统记录 sg 检测到的 SCSI(CHECK_CONDITION 相关)错误,而不是在使用 sg 的应用程序中处理它们,请将 ioctl(SG_SET_DEBUG) 设置为大于零的值。我的偏好是在使用 sg 的应用程序中处理 SCSI 错误。