Power OFF and ON USB device in linux (ubuntu)

http://loginroot.com/power-off-and-on-usb-device-in-linux-ubuntu/

There are two methods of doing this. So first method is for kernels after 2.6.32, and second for older ones.

To view kernel version, simply enter:

 
 
 
 

Shell

 
1
2
> uname -r
3.8.0-29-generic

find Your USB device, no mather what it is USB flash drive, Yubikey, USB disk drive:

 
 
 
 

Shell

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> lsusb
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 005: ID 12d1:14db Huawei Technologies Co., Ltd.
Bus 002 Device 006: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
 
> lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
        |__ Port 1: Dev 5, If 0, Class=comm., Driver=cdc_ether, 480M
        |__ Port 1: Dev 5, If 1, Class=data, Driver=cdc_ether, 480M
        |__ Port 5: Dev 6, If 0, Class=hub, Driver=hub/4p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M

Our target is:

 
 
 
 

Shell

 
1
Bus 002 Device 005: ID 12d1:14db Huawei Technologies Co., Ltd.

Which is located at 2-1.1 (tree part where device 5 is located)
First method (newer kernel)

To turn it off simply echo address:

 
 
 
 

Shell

 
1
echo '2-1.1' > /sys/bus/usb/drivers/usb/unbind

here is result from syslog:

 
 
 
 

Shell

 
1
Feb 20 12:03:27 vgsms6 kernel: [ 1734.993667] cdc_ether 2-1.1:1.0 eth2: unregister 'cdc_ether' usb-0000:00:1d.0-1.1, CDC Ethernet Device

Unfortunately this device was still visible in lsusb, so I turned off whole usb hub there (2-1), and voila, usb device gone.

To enable it, echo same address to “bind” part, for example:

 
 
 
 

Shell

 
1
echo '2-1.1' > /sys/bus/usb/drivers/usb/bind

Second method (older kernel)
You need to go to devices:

 
 
 
 

Shell

 
1
cd /sys/bus/usb/devices

Addressess will be listed similar:

 
 
 
 

Shell

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/sys/bus/usb/devices# ls -alh
total 0
drwxr-xr-x 2 root root 0 Feb 20 11:34 .
drwxr-xr-x 4 root root 0 Feb 20 11:34 ..
lrwxrwxrwx 1 root root 0 Feb 20 11:34 1-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.0/usb1/1-0:1.0
lrwxrwxrwx 1 root root 0 Feb 20 11:34 1-1 -> ../../../devices/pci0000:00/0000:00:1a.0/usb1/1-1
lrwxrwxrwx 1 root root 0 Feb 20 11:34 1-1:1.0 -> ../../../devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1:1.0
lrwxrwxrwx 1 root root 0 Feb 20 11:34 2-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.0/usb2/2-0:1.0
lrwxrwxrwx 1 root root 0 Feb 20 11:34 2-1 -> ../../../devices/pci0000:00/0000:00:1d.0/usb2/2-1
lrwxrwxrwx 1 root root 0 Feb 20 12:34 2-1.1 -> ../../../devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1
lrwxrwxrwx 1 root root 0 Feb 20 12:34 2-1:1.0 -> ../../../devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0
lrwxrwxrwx 1 root root 0 Feb 20 12:34 2-1.1:1.0 -> ../../../devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.0
lrwxrwxrwx 1 root root 0 Feb 20 12:34 2-1.1:1.1 -> ../../../devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.1
lrwxrwxrwx 1 root root 0 Feb 20 12:34 2-1.5 -> ../../../devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5
lrwxrwxrwx 1 root root 0 Feb 20 12:34 2-1.5:1.0 -> ../../../devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5/2-1.5:1.0
lrwxrwxrwx 1 root root 0 Feb 20 11:34 usb1 -> ../../../devices/pci0000:00/0000:00:1a.0/usb1
lrwxrwxrwx 1 root root 0 Feb 20 11:34 usb2 -> ../../../devices/pci0000:00/0000:00:1d.0/usb2

So go to in our example 2-1.1/power (full path /sys/bus/usb/devices2-1.1/power)

 
 
 
 

Shell

 
1
cd /sys/bus/usb/devices2-1.1/power

to turn off device:

 
 
 
 

Shell

 
1
echo suspend > level

to turn on:

 
 
 
 

Shell

 
1
echo on > level

Like this:

Comments (7)

  1. AnonymousSeptember 28, 2014 at 4:01 pm

    ~ $ sudo echo ‘1-1.2’ > /sys/bus/usb/drivers/usb/unbind
    -bash: /sys/bus/usb/drivers/usb/unbind: Permission denied

    Reply ↓
  2. NiekoNovember 4, 2014 at 11:59 am

    Thanks, finally got it working! :)

    Anonymous: your command executes “echo ‘1-1.2′” under sudo, and then tries to write that to /sys/bus/usb/drivers/usb/unbind as the normal user again. Try this: echo ‘1-1.2″ | sudo tee /sys/bus/usb/drivers/usb/unbind

    Reply ↓
  3. SantosNovember 8, 2014 at 2:25 am

    You could also use a switchable USB hub.

    Something like this https://www.yepkit.com/products/ykush

    but it’s more expensive :)

    Reply ↓
    1. nsc(Post author)November 8, 2014 at 9:47 am

      Smart way of leaving a backlink.
      I encourage doing opensource projects :)

      Usually the budget depends on what are the requirements. For a simple “faulty” usb emergency device reset I would use my way (I wouldn’t expect something to break, would I?).

      But for day to day planned switch off/on I’d consider such device.
      Thanks for sharing Your product.
      That’s pretty useful thing, it should have more reliable switching capability and it’s more powerful than a server usb port.

      You should consider making a bigger hub, as it seems to be possible to use it as a powersource for usb devices (2Amps of current).
      For example external usb 2.5 hdd would already take 2 ports, leaving only one free.
      Or make an usb controlled power source switcher with relays, it would perfectly go as a combo with this usb hub device :)

      Reply ↓
      1. SantosNovember 8, 2014 at 1:58 pm

        Fully agree with you, the best approach depends of the requirements.

        Those are cool ideas for improving the product.

        Cheers

        Reply ↓
  4. Pingback: » Linux: Turning off power to usb port. Or turn off power to entire usb subsystem

  5. Pingback: Raspberry Pi + L-02C でバッチリ安定する多機能 LTE ルータをつくったメモ – 怠惰の形而上学

Leave a Reply

Power OFF and ON USB device in linux (ubuntu)的更多相关文章

  1. 【转载】How to Reset USB Device in Linux

    USB devices are anywhere nowadays, even many embedded devices replace the traditional serial devices ...

  2. usb device address error 110

    ubuntu失灵了,怎么都起不来,报一堆错误usb device descriptor read/64, error 110......重启,换kvm的接口,usb键盘鼠标...终于在试了下面这个方法 ...

  3. Install Slax on USB device (Slax U 盘安装)

    Slax is a modern, portable, small and fast Linux operating system with a modular approach and outsta ...

  4. Assigning Host USB device to a Guest VM

    Example Assigning Host USB device to a Guest VM This example is based on qemu-kvm (0.15.0) as instal ...

  5. USB device & USB controller & USB passthrough

    目录 USB device USB controller Linux 相关命令 Python 相关库 Libvirt USB passthrough 参考资料 近期往 openstack 里倒腾 US ...

  6. STM32F4 HAL Composite USB Device Example : CDC + MSC

    STM32F4 USB Composite CDC + MSC I'm in the process of building a USB composite CDC + MSC device on t ...

  7. Open images from USB camera on linux using V4L2 with OpenCV

    I have always been using OpenCV's VideoCapture API to capture images from webcam or USB cameras. Ope ...

  8. What is a Windows USB device path and how is it formatted?

    http://community.silabs.com/t5/Interface-Knowledge-Base/Windows-USB-Device-Path/ta-p/114059 Windows ...

  9. USB Device Finder

    http://www.velleman.eu/images/tmp/usbfind.c #ifdef __cplusplus extern "C" { #endif #includ ...

随机推荐

  1. 【BZOJ1776】[Usaco2010 Hol]cowpol 奶牛政坛 树的直径

    [BZOJ1776][Usaco2010 Hol]cowpol 奶牛政坛 Description 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N. ...

  2. ES mapping映射及优化

    mapping映射 主要类型: 同一index下,不同type中如果有相同filed:es进行mapping映射的时候,按照先写进去的指定类型:比如同一index,包含的type中都有key1字段,如 ...

  3. android菜鸟学习笔记11----Intent的两点补充

    关于Intent的两点补充: 1.隐式Intent启动组件,会有一个Intent解析的过程,若找不到能够处理该Intent的组件,程序就会异常终止.一个合理的做法是,在使用Intent实例启动组件如: ...

  4. java常量池概念 (转)

    在class文件中,“常量池”是最复杂也最值得关注的内容. Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int.long等等)和对象型(如Stri ...

  5. Swift 学习笔记(扩展和泛型)

    在开始介绍Swift中的扩展之前,我们先来回忆一下OC中的扩展. 在OC中如果我们想对一个类进行功能的扩充,我们会怎么做呢. 对于面向对象编程的话,首先会想到继承,但是继承有两个问题. 第一个问题:继 ...

  6. 【题解】Coins(二进制拆分+bitset)

    [题解]Coins(二进制拆分+bitset) [vj] 俗话说得好,bitset大法吼啊 这道题要不是他多组数据卡死了我复杂度算出来等于九千多万的选手我还不会想这种好办法233 考虑转移的实质是怎样 ...

  7. 关于JavaScript中prototype机制的理解

    最近几天一直在研究JavaScript中原型的机制,从开始的似懂非懂,到今天终于有所领悟.不敢说彻底理解,但是起码算知道怎么回事了. 为什么一开始似懂非懂 开始了解一遍原型机制后,感觉知其然但不知其所 ...

  8. Spring Boot2.0之多环境配置

    本地开发环境 测试环境 实际项目中 区分不同的环境配置文件信息 首先创建三种不同场景下的配置文件: 内容分别是: ###dev http_url="dev" ###prdhttp_ ...

  9. Linux_异常_03_Failed to restart iptables.service: Unit not found.

    启动防火墙时出现: Failed to restart iptables.service: Unit not found. 解决方案: 1.https://stackoverflow.com/ques ...

  10. 无言以队Alpha阶段项目复审

    小组的名字和链接 优点 缺点,bug报告 (至少140字) 最终名次 (无并列) 甜美女孩 http://www.cnblogs.com/serendipity-zeng/p/9937832.html ...