我有一个 USB 控制的电源板,它有一个 USB 端口。
如果我的电脑打开并通过 USB 连接到电源板,电源板将为所有插座供电。我想以编程方式禁用连接到电源板的计算机上 USB 端口的电源。
这不起作用:
$ echo suspend > /sys/bus/usb/devices/usb*/power/level
-bash: echo: write error: Invalid argument
还有其他方法可以做到这一点吗?我希望能够从其他地方连接到我的服务器并关闭连接到电源插座的所有设备的电源。
答案1
除了读取连接的 USB 端口提供的 +5V 电压之外,电源板还有其他作用吗? (当你附加它时,你看到什么东西了吗?插入后dmesg
输出会改变吗?)如果没有,内核甚至可能无法识别附加的东西。lsusb
如果设备从不枚举自身,您就无法让设备挂起:它永远不会出现在 /sys/bus/usb/devices 下,并且使用 USB 您可以挂起设备,而不是端口。
另外,来自Documentation/usb/power-management.txt
:
power/control
This file contains one of two words: "on" or "auto".
You can write those words to the file to change the
device's setting.
"on" means that the device should be resumed and
autosuspend is not allowed. (Of course, system
suspends are still allowed.)
"auto" is the normal state in which the kernel is
allowed to autosuspend and autoresume the device.
(In kernels up to 2.6.32, you could also specify
"suspend", meaning that the device should remain
suspended and autoresume was not allowed. This
setting is no longer supported.)
因此,根据最后一个小声明,如果您的内核比 2.6.32 更新,听起来您无论如何都无法强制 USB 设备挂起。
抱歉,我无法给您真正想要的答案,您尝试做的事情听起来很简洁,但我希望它对您有所帮助。
答案2
# To enforce suspend immediately when device is unused:
echo -n "0" >$DEV_POWER_PATH"/power/autosuspend_delay_ms"
echo -n "auto" >$DEV_POWER_PATH"/power/control"
# Make the device was not used
rmmod drv_name # see result of lsmod
# Power on:
echo -n "2000" >$DEV_POWER_PATH"/power/autosuspend_delay_ms"
echo -n "on" >$DEV_POWER_PATH"/power/control"
# Make the device was used.
modprobe drv_name
答案3
我这边也有同样的问题。 ls -al 显示只有 root 有写访问权限
-rw-r--r-- 1 root root 4.0K May 8 10:27 level
所以我尝试用 sudo 执行相同的命令,但仍然遇到相同的错误
我发现让它工作的唯一方法是对这个文件执行 chmod,然后写入。另外。在我看来,控制和 autosuspend_delay_ms 是不够的。我必须解除绑定才能真正暂停它。
sudo chmod 777 /sys/bus/usb/devices/2-1.7/power/control
sudo chmod 777 /sys/bus/usb/devices/2-1.7/power/autosuspend_delay_ms
sudo chmod 777 /sys/bus/usb/drivers/usb/unbind
echo "auto" > "/sys/bus/usb/devices/2-1.7/power/control"
echo "0" > "/sys/bus/usb/devices/2-1.7/power/autosuspend_delay_ms"
echo -n "2-1.7" > /sys/bus/usb/drivers/usb/unbind
答案4
为什么不使用集线器并打开该集线器的电源,集线器将不会连接自己的电源块。只要它的行为类似于上述帖子中的设备,就应该可以关闭集线器。
但我会厌倦实际上(意外地)在由该条供电的任何其他端口上拥有任何 USB 设备,因为它们无法正确卸载。
有一种方法可以关闭计算机电源并关闭电源板,这可能很有用。但现在我无法想出一个好的方案。