我正在开发自定义的Bash脚本,用于USB闪存的大量复制和质量测试(使用f3
)。
我想知道是否有可能确定Pendrive插入了哪个USB端口。
我有带有编号端口的USB集线器。如果可以识别一些静态地址,并且知道是否插入了某些静态地址,那是什么(本质上:哪个/ dev / sd *文件对应于该USB端口),我可以为用户提供很多便利知道发生了什么,并允许他们在此过程中尽早删除故障驱动器,而不必等到整个批次都处理完毕后再尝试从故障驱动器中挑选出故障驱动器(这就是我现在的做法)。
我尝试四处搜寻,但没有发现与我想要达成的目标相融合的东西,因此我决定直接在这种情况下寻求帮助。
现在,Rigth通过/ dev / sd *节点名称标识驱动器,而用户不知道那是什么。如果我可以将它们映射到集线器中的USB端口,则可以基于USB端口显示信息,并且用户可以知道端口5插入了错误的驱动器,并且他们可以在不干扰其余过程的情况下将其移除。 。
然后,我什至可以停止批量执行此操作,并使所有端口同时循环工作,用户可以一直插入和拔出驱动器,并通过HUB端口号跟踪什么是什么,这可以极大地丰富工作流程。
因此,基本问题是:如何识别这些端口中的USB端口和USB闪存?
您可以udevadm
用来获取某些设备的设备路径。这是通过检查中的符号链接来完成的/sys/
,因此您也可以手动执行此操作(但使用起来更容易udevadm
)。
例如,插入我系统上的外部USB集线器的USB记忆棒会产生
$ udevadm info -q path -n /dev/sdh
/devices/pci0000:00/0000:00:1d.0/usb3/3-1/3-1.1/3-1.1.3/3-1.1.3.2/3-1.1.3.2:1.0/host7/target7:0:0/7:0:0:0/block/sdh
通过与USB树进行比较可以看出,
$ lsusb -t
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
|__ Port 1: Dev 26, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 29, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 31, If 0, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 4: Dev 30, If 0, Class=Mass Storage, Driver=usb-storage, 480M
...
3-1.1.3.2
路径的一部分说,在总线3上,它经过端口1(在南桥上),再经过端口1(在主板上),端口3(仍在主板上),然后经过外部USB集线器的端口2。集线器的端口4用于SD卡读取器。
因此,根据USB集线器的连接方式,您需要执行类似的操作,并提取您感兴趣的最后一个端口。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句