Как отличить устройство 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?

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-хранилище" в случае, если это LUN с запоминающего устройства USB. С точки зрения дизайна, это можно считать своего рода "взломом" для выполнения задачи таким способом, но без надлежащих API это самый простой способ.

Другие вопросы по тегам