Linux USB:打开和关闭电源?

如何以编程方式启用和禁用Linux上特定USB端口的电源? 这样的事情甚至可能吗? (不 - 见下文) Mac的答案也很赞赏!

我正在努力争取一个中国银行(不要假装你也没有试图获得一个!),并最终获得了其中的一个,并希望通过将它连接到我们的服务器监视器来获得一些用途。

更新:这似乎不可能。 所有暂停电源的API基本上都会告知连接的设备关闭,但引脚1仍然有电源供应,因此这些灯的简单设备不能直接通过编程方式进行控制。 也许提到的集线器解决方案将工作。


挖掘书签

http://blog.andrew.net.au/2009/01/01#usb_power_control

好像你需要将它连接到集线器并控制集线器的电源。 我所见过的根中心似乎都不能支持功率控制。


在Linux中有一个sys入口。 From Documentation / usb / power-management.txt:

能量等级

This file contains one of three words: "on", "auto",
or "suspend".  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.

"suspend" means that the device should remain
suspended, and autoresume is not allowed.  (But remote
wakeup may still be allowed, since it is controlled
separately by the power/wakeup attribute.)

例如: echo on > /sys/bus/usb/devices/usb5/power/level

您可能还需要使用autosuspend设置。 不告诉内核停止尝试,它可能会自动暂停端口。

祝你好运!


自这个问题最初得到解答以来,usbfs交互似乎发生了多次变化。 所以,下面是我如何在Bash shell中对Ubuntu Oneiric Ocelot的集线器端口电源进行循环。

搜索巴士和设备号码:

sudo lsusb -v|less

使用总线和设备编号在总线/集线器端口层次结构中找到设备:

sudo lsusb -t|less

语法似乎是'bus-port.port.port.port.port ...'例如,我的鼠标连接到外部集线器,它连接到我的计算机集线器,集线器在内部连接到根集线器:

/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
        |__ Port 1: Dev 3, If 0, Class=hub, Driver=hub/3p, 480M
            |__ Port 1: Dev 6, If 0, Class=HID, Driver=usbhid, 1.5M

因此,在上述情况下,'2-1.1.1'。 最后,循环端口电源:

echo '2-1.1.1'|sudo tee /sys/bus/usb/drivers/usb/unbind
sleep 1
echo '2-1.1.1'|sudo tee /sys/bus/usb/drivers/usb/bind

我没有连接协议分析器来查看总线上实际发生了什么,但是我知道当我解开它时,鼠标指示灯会熄灭。 我在较低层猜测这是与EHCI主机控制器交互以实际关闭端口上的电源。 这对于嵌入式设备特别有用,例如UVC网络摄像头,它们似乎无法正常工作,否则需要重新启动系统。

另请参阅udevadm命令。

链接地址: http://www.djcxy.com/p/81287.html

上一篇: Linux USB: turning the power on and off?

下一篇: Killing power to a USB port