Как отличить устройство 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, представляющий собой виртуальную таблицу 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