Вопрос
Как я могу получить имя поставщика устройства SCSI на Linux & C?
Решение
Ты можешь использовать Либудев Чтобы найти устройства SCSI и прочитать атрибут поставщика (непроверенный):
struct udev *context = udev_new();
struct udev_enumerate *enumerator = udev_enumerate_new(context);
udev_enumerate_add_match_subsystem(enumerator, "scsi");
udev_enumerate_scan_devices(enumerator);
struct udev_list_entry *scsi_devices = udev_enumerate_get_list_entry(enumerator);
struct udev_list_entry *current = 0;
udev_list_entry_foreach(current, scsi_devices) {
struct udev_device *device = udev_device_new_from_syspath(
context, udev_list_entry_get_name(current));
const char *vendor = udev_device_get_sysattr_value(device, "vendor");
printf("%s\n", vendor);
}
Другие советы
Вы можете изучить файлы чтения /sys, если вы знаете идентификатор устройства /шины, также проверьте LSSCSI.
-> cat /sys/bus/scsi/devices/target13:0:0/13:0:0:0/vendor
Marvell
(1) Открыть устройство SCSI. (2) Отправить команду SCSI «Запрос» от ioctl. Затем вы можете получить имя поставщика из возвратных данных.
Пакет SG3_Utils содержит утилиты, которые отправляют команды SCSI на устройства.
Как только у нас установлен SG3_Utils, запустите команду SG_INQ на устройстве, которое вас интересует.
Например: #SG_INQ /DEV /SDA
Приведенная выше команда будет выполнять стандартный запрос SCSI на устройстве и предоставить имя поставщика и другие данные.
Ссылаясь на команды документа SCSI SPC-3 и команды SG3_Utils, я могу предложить вам следующее:
1) Команда выпуска: sg_inq -p 0x00 /dev /your_device_name
Это даст вам поддерживаемые страницы вашим устройством.
2) Если выше выше, команда отображает 0x83 в качестве одной из поддерживаемых страниц, тогда команда выпуска:
sudo sg_inq -p 0x83 /dev /your_device_name
Это будет отображать информацию поставщика.
Ps -> your_device_name, Eg Sr1, SDA1
Пожалуйста, используйте эту ссылку, чтобы получить скрипт для получения такого типа информации:
http://a-saurabh.blogspot.in/2014/06/sometimes-we-want-to-query-about-our.html
Вы можете использовать запрос SCSI с помощью таких инструментов, как SG3_Utils или просто найти его в рамках Sys/Bus/SCSI/Devices/xxxxx