根据SCSI驱动程序使用的内核结构struct scsi_device
(内核2.6.23):
http://lxr.linux.no/linux+v2.6.23/include/scsi/scsi_device.h#L49
是否有可靠的方法来区分设备是USB设备还是ATA设备?
答案 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,这是最简单的方法。