如何在Linux&C上获取SCSI设备的供应商名称?

有帮助吗?

解决方案

您可以使用 libudev 要查找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);
}

其他提示

如果您知道设备 /总线ID,也可以查看阅读 /系统文件 LSSCSI.

  -> cat /sys/bus/scsi/devices/target13:0:0/13:0:0:0/vendor 
Marvell

(1)打开SCSI设备。 (2)ioctl发送SCSI命令“查询”。然后,您可以从返回的数据中获取供应商名称。

SG3_UTILS软件包包含将SCSI命令发送到设备的实用程序。

安装了SG3_UTIL后,请在您感兴趣的设备上运行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-about-our-our.html

您可以使用SG3_UTILS等工具使用SCSI查询,也可以在SYS/BUS/SCSI/设备/XXXXX下找到它

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top