在Linux中,libusb库用于控制对USB设备的访问。
根据USB 2.0规范第11.15.1.2节,有2个请求可以关闭端口电源; ClearPortFeature(PORT_POWER) 和 SetConfiguration()。
如果要关闭集线器及其下的所有端口,可以通过 SetConfiguration() 请求来完成。
必须是 root 才能更改 USB 设备设置。 要使 libusb 发送 SetConfiguration() 请求,请导航到集线器的设备目录。 更改文件 bConfigurationValue 的权限。 将 0 写入该文件可关闭集线器和设备。
例如集线器 3-3:
$ cd /sys/bus/usb/devices/usb3/3-3
$ sudo chmod o+w bConfigurationValue
$ sudo echo 0 > bConfigurationValue
要重新打开集线器:
$ sudo echo 1 > bConfigurationValue
要关闭单个设备,可以将设备设置为在挂起时关闭,但如何以及何时发生取决于设备的驱动程序。
要设置要关闭的设备,请首先导航到设备的电源目录。 更改文件 pm_qos_no_power_off 的权限并向该文件写入 0:
例如设备 3-3.1:
$ cd /sys/bus/usb/devices/usb3/3-3/3-3:1.0/3-3-port1/power
$ sudo chmod o+w pm_qos_no_power_off
$ sudo echo 0 > pm_qos_no_power_off
当设备最终进入挂起状态时,libusb 将向集线器发送 ClearPortFeature(PORT_POWER) 请求。
|