如何在Linux下使用libudev以编程方式枚举所有USB闪存驱动器?我想获取诸如“/dev/sdb4
”之类的字符串,以便我可以使用“mount()
”来安装它们。
我在http://www.signal11.us/oss/udev/关注了libudev示例。示例代码适用于“hidraw
”;然后,我尝试了“usb
”,“scsi_disk
”,“scsi_generic
”等,但没有效果 - 它没有列出'设备路径',如'{{1 }}',它说'/dev/sdb4
'。
答案 0 :(得分:3)
而不是scsi_generic
搜索block
子节点。你应该找到块设备。
scsi_generic
是一个不同的界面。
我会添加一些解释,但请注意,我不是这个主题的专家,只是一个观察者......
SCSI设备非常复杂,并且具有不同的接口以访问不同的功能集。
scsi_generic
设备是字符设备(通常名为/dev/sg<n>
),可以访问SCSI功能。例如,CD / DVD刻录机(通常是?)通常通过此设备进行管理。但是通过标准块设备可以访问数据块,因此每个看起来像磁盘的SCSI设备(记住,还有SCSI打印机......)也会创建一个块子节点。
但USB闪存驱动器不是真正的SCSI设备,它只是使用相同的协议,非常简化。因此,为避免重写USB的相同协议,内核会创建一个虚拟SCSI设备并将其连接到USB设备。
这个虚拟SCSI设备的用途是它们具有将自己呈现为块设备所需的最小值。因此缺少许多SCSI特定功能,尤其是scsi_generic
接口。这就是你在那里得到(null)
的原因。并不是说它对您有用,因为您无法安装scsi_generic
设备,因为它根本不是块设备!