Според структурата на ядрото 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
, което е vtable на SCSI LLD. Оттам можете да погледнете полето за име. drivers/scsi/storage/usb.c ни казва, че низът трябва да бъде "usb-storage".
Така че, мисля, че като се има предвид 'sdev' като указател на scsi_device, sdev->shost->hostt->name
трябва да се разреши на "usb-storage", в случай че е LUN от USB устройство за масово съхранение. От гледна точка на дизайна може да се счита за нещо като „хак“ за изпълнение на задачата по този начин, но без подходящи API това е най-лесният начин.