旋转减速

旋转减速

我的 USB 设备出现了一些问题,我知道我可以通过拔下并重新插入该设备来解决该问题。

我尝试使用来自的脚本重置 USB 端口如何从命令行重置 USB 设备?但这似乎还不够。

我知道以前udisksctl power-off当我想移除 USB 闪存驱动器时我会关闭它们,但当我将它用于通用设备时它会失败。

有没有办法可以对网络摄像头等通用 USB 设备执行类似的功能?

答案1

旋转减速

首先,您需要找到设备的 sysfs 路径(例如使用 lsusb)

如果 USB 设备的 sysfs 节点的完整路径是:

/sys/devices/pci0000:00/0000:00:14.0/usb1/1-13/1-13.2/1-13.2.1/

udisksctl power-off -b /dev/sdz做的事情非常类似:

hdparm -Y /dev/sdz
echo 1 >  /sys/block/sdz/device/delete
echo 1 >  /sys/devices/pci0000:00/0000:00:14.0/usb1/1-13/1-13.2/1-13.2.1/remove

(为了改善脚本中的行为,您可以使用 /dev/disk/by-id/thingy-name01234 而不是 /dev/sdz)

然后删除:

/sys/devices/pci0000:00/0000:00:14.0/usb1/1-13/1-13.2/1-13.2.1/

目录。

父设备:

/sys/devices/pci0000:00/0000:00:14.0/usb1/1-13/1-13.2/

代表 USB 端口本身,现在处于“禁用”状态。

要重置它:

您可以告诉它更改应该使用的 USB 配置,并且为了使用该配置,它需要重置所有内容。

告诉它使用与当前相同的配置也应该重置它:

# cat /sys/devices/pci0000:00/0000:00:14.0/usb1/1-13/1-13.2/bConfigurationValue
1
# echo 1 >/sys/devices/pci0000:00/0000:00:14.0/usb1/1-13/1-13.2/bConfigurationValue

这样,端口就会重新启用,就像我再次插入设备一样(即 .../1-13.2.1 子目录重新出现,端口上的设备被探测,内核在那里发现一个 USB 存储设备,等等)。


重新扫描

然后(重新)扫描,例如查看新连接的设备(如果未自动找到)或者再次查看上述“已删除”的内容,例如:

# (for tmp in /sys/class/scsi_host/host*/scan; do echo '- - -' >> "$tmp"; done) 

重置

重置设备:

for X in /sys/bus/usb/devices/*; do 
    echo "$X"
    cat "$X/idVendor" 2>/dev/null 
    cat "$X/idProduct" 2>/dev/null
    echo
done

列出它们,然后使用

sudo sh -c "echo 0 > /sys/bus/usb/devices/1-4.6/authorized"
sudo sh -c "echo 1 > /sys/bus/usb/devices/1-4.6/authorized"

重置它

在 USB 设备上启用智能

如果你不能获得智能值,

  • 注意供应商/产品编号:
$ lsusb | grep -i seagate
Bus 003 Device 004: ID 0bd1:2027 Seagate RSS LLC Expansion HDD
  • 请执行下列操作重置总线配置(禁用端口后):

    $ echo “0x0bd1:0x2027:u” | sudo tee /sys/module/usb_storage/parameters/quirks


https://www.reddit.com/r/linuxquestions/comments/r34j7j/running_udisksctl_poweroff_b_devsdx_disables_usb/

相关内容