根据struct scsi_device
SCSI 驱动程序使用的内核结构(内核 2.6.23):
http://lxr.linux.no/linux+v2.6.23/include/scsi/scsi_device.h#L49
是否有可靠的方法来区分设备是 USB 设备还是 ATA 设备?
根据struct scsi_device
SCSI 驱动程序使用的内核结构(内核 2.6.23):
http://lxr.linux.no/linux+v2.6.23/include/scsi/scsi_device.h#L49
是否有可靠的方法来区分设备是 USB 设备还是 ATA 设备?
对于每个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 大容量存储设备的 LUN,则应该解析为“usb-storage”。从设计的角度来看,以这种方式完成任务可能被认为是一种“黑客”,但没有适当的 API,这是最简单的方法。