Как да различим USB и (S)ATA устройство в структурата scsi_device на ядрото?

Според структурата на ядрото struct scsi_device, използвано от SCSI драйверите (ядро 2.6.23):

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

Има ли надежден метод за разграничаване дали устройството е USB или ATA устройство?


person Arnaud G    schedule 14.10.2011    source източник


Отговори (1)


За всяко 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 това е най-лесният начин.

person Dan Aloni    schedule 04.11.2011