如何区分内核scsi_device结构中的USB和(S)ATA设备?

时间:2011-10-14 12:57:17

标签: linux kernel drivers scsi

根据SCSI驱动程序使用的内核结构struct scsi_device(内核2.6.23):

http://lxr.linux.no/linux+v2.6.23/include/scsi/scsi_device.h#L49

是否有可靠的方法来区分设备是USB设备还是ATA设备?

1 个答案:

答案 0 :(得分:1)

对于每个scsi_device,您可以获得与其对应的scsi_host,并从那里获取scsi_host_template,这是SCSI LLD的vtable。从那里,您可以查看名称字段。 drivers / scsi / storage / usb.c告诉我们字符串应该是“usb-storage”。

所以,我认为将'sdev'作为scsi_device指针,sdev->shost->hostt->name应解析为“usb-storage”,以防它是来自USB大容量存储设备的LUN。从设计的角度来看,它可能被认为是以这种方式完成任务的“黑客”,但没有适当的API,这是最简单的方法。