# disable external wake-up; do this only once
echo disabled > /sys/bus/usb/devices/usb1/power/wakeup
echo on > /sys/bus/usb/devices/usb1/power/level # turn on
echo suspend > /sys/bus/usb/devices/usb1/power/level # turn off
(您可能需要将usb1更改为usb n)
资料来源:Documentation / usb / power-management.txt.gz
9 回答
USB 5v电源始终打开(即使计算机关闭,在某些计算机和某些端口上也是如此 . )您可能需要使用某种开关对Arduino进行编程,并通过USB插入到串行库中来控制它 . 电脑 .
换句话说,通过串口libary与通过USB插入的Arduino进行通信的this开关教程和this教程的组合 .
连接我的Android手机时遇到问题,我无法为手机充电,因为电源开启然后关闭... PowerTop让我找到这个设置并且有助于解决问题(自动值导致问题):
Note. 此答案中的信息与较旧的内核相关(最高2.6.32) . 有关较新内核的信息,请参见tlwhitec's answer .
(您可能需要将usb1更改为usb n)
资料来源:Documentation / usb / power-management.txt.gz
根据 docs ,内核 2.6.32 对USB电源管理进行了一些更改,这些更改似乎在 2.6.38 中解决 . 现在,您需要等待设备变为 idle ,该设备由特定设备驱动程序控制 . 驱动程序需要支持它,否则设备将永远不会达到此状态 . 不幸的是,现在用户没有机会强行执行此操作 . 但是,如果你很幸运,你的设备可能会闲置,那么要关闭它,你需要:
或者,对于2.6.38及以上的内核:
这实际上意味着,在设备闲置时,请转到 suspend .
因此,除非你的粉丝是“智能”的东西,可以看作是一个设备并由驱动程序控制,你可能在当前的内核上没有太多运气 .
我发现这些解决方案至少适用于正确配置的Terminus FE 1.1 USB集线器芯片:
1.要关闭集线器所有USB端口的电源,您可以使用以下命令从内核解除集线器的绑定:
重新打开电源 - 你可以用它绑回来
2.单独切换每个端口的电源比较棘手:我能够使用hubpower来控制每个端口 - 但它有一个缺点:hubpower首先断开usbdevfs,导致所有USB设备断开与系统的连接,至少在ubuntu上:
有了这个
ioctl
禁用,我能够关闭单独的端口电源而不会分离所有设备 - 但电源立即恢复(可能是由于内核看到一个未初始化的设备)导致USB设备只是做了"cold restart"这是我通常想要的去做 . 我补丁的中心力量是here来自英特尔的 PowerTOP 允许您实时切换USB外围设备等设备 . 这些被称为'tunables' .
切换到'tunables' .
向下滚动到您的设备 .
按Enter进入切换省电模式( Good / Bad )
请注意 Bad 表示设备始终打开 . 切换到 Good 将在预设的非活动保存时间(默认为2000毫秒)后关闭设备 .
有关如何永久更改这些更改的详细信息,请参阅 PowerTOP 文档 .
它为您生成配置脚本(几乎与此线程上的其他海报一样) .
注意:这些脚本不会影响USB引脚电源(始终打开) .
这些仅发送驱动程序协议以激活和停用设备 .
如果您想控制引脚电源,可以使用支持的智能USB集线器,或者更好的是microcontroller .
您可以使用uhubctl - 命令行实用程序来控制兼容USB集线器的每个端口的USB电源 .
披露 - 我是uhubctl的作者 .
我想这样做,用我的USB硬件我做不到 . 我写了一个hacky方式如何在这里做:http://pintant.cat/2012/05/12/power-off-usb-device/ . 简而言之:我使用USB继电器打开/关闭另一根USB线的Vc ......
适用于ubuntu