gpt4 book ai didi

c - 在 Linux 中使用 libudev 以编程方式枚举 USB 闪存驱动器

转载 作者:太空狗 更新时间:2023-10-29 11:09:24 31 4
gpt4 key购买 nike

如何在 Linux 下使用 libudev 以编程方式枚举所有 USB 闪存驱动器?我想获取诸如 '/dev/sdb4' 之类的字符串,以便我可以使用 'mount()' 来挂载它们。

我正在关注 http://www.signal11.us/oss/udev/ 的 libudev 示例.示例代码适用于“hidraw”;然后我尝试了“usb”、“scsi_disk”、“scsi_generic”等,但没有用——它没有列出“设备路径”如“/dev/sdb4”,表示“设备节点路径:(null)”。

最佳答案

而不是 scsi_generic搜索 block子节点。在那里你应该找到 block 设备。

scsi_generic是一个不同的界面。

我将添加一些解释,但请注意,我不是该主题的专家,只是一个观察者...

SCSI 设备非常复杂,并且有多个不同的接口(interface)来访问不同的功能集。

scsi_generic device 是一个字符 设备(通常命名为 /dev/sg<n> ),可以访问 SCSI 功能。例如,CD/DVD 刻录机(曾经?)通常通过此设备进行管理。但是通过标准 block 设备访问数据 block ,因此每个看起来像磁盘的 SCSI 设备(请记住,还有 SCSI 打印机......)也会创建一个 block 子节点。

但是U盘并不是真正的SCSI设备,它只是使用了相同的协议(protocol),相当简单。因此,为了避免为 USB 重写相同的协议(protocol),内核创建了一个虚拟 SCSI 设备并将其连接到 USB 设备。

这种虚拟 SCSI 设备的特点是它们具有将自己呈现为 block 设备所需的最低限度。因此缺少许多 SCSI 特定功能,尤其是 scsi_generic界面。这就是为什么你得到 (null)那里。并不是说它对你有用,因为你不能挂载 scsi_generic设备,因为它根本不是 block 设备!

关于c - 在 Linux 中使用 libudev 以编程方式枚举 USB 闪存驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20562263/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com