linux制御USBのバインド/バインド解除

1639 ワード

今日仕事の中で1つの問題に出会って、コードでUSBのenableとdisableを実現します.グーグルは、最終的に理想の答えを見つけて、私はここで短いportingをします.出典:壁外某博
  • まずlsusb-tを介してUSBポート情報を表示する:
  •     /:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
        |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/8p, 480M
            |__ Port 6: Dev 78, If 0, Class=vend., Driver=, 480M
            |__ Port 6: Dev 78, If 1, Class=vend., Driver=usbfs, 480M
            |__ Port 6: Dev 78, If 2, Class=comm., Driver=cdc_acm, 480M
            |__ Port 6: Dev 78, If 3, Class=data, Driver=cdc_acm, 480M
            |__ Port 6: Dev 78, If 4, Class=comm., Driver=cdc_acm, 480M
            |__ Port 6: Dev 78, If 5, Class=data, Driver=cdc_acm, 480M
            |__ Port 6: Dev 78, If 6, Class=comm., Driver=cdc_acm, 480M
            |__ Port 6: Dev 78, If 7, Class=data, Driver=cdc_acm, 480M
    /:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
        |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
            |__ Port 1: Dev 6, If 0, Class=HID, Driver=usbhid, 1.5M
            |__ Port 1: Dev 6, If 1, Class=HID, Driver=usbhid, 1.5M
            |__ Port 3: Dev 9, If 0, Class=HID, Driver=usbhid, 1.5M
    

    (注:制御するUSBを挿抜して、どのBUSのどのportなのかを確認することができます.)ここではBUS 02のport 1のport 6を操作します.
  • 以下command去unbindこのUSB:
  • を実行
    echo '2-1.6' | sudo tee /sys/bus/usb/drivers/usb/unbind
    

    実はteeを使わなくてもいいです.直接リダイレクトしてもいいです.注意すべきは、echoの文字列:"$bus_num"-"$port1_num"."$port2_num"はこのようなformatである.
  • 再bindのcommandは、上のcommandのunbindをbindに変更するだけです.echo '2-1.6' | sudo tee /sys/bus/usb/drivers/usb/bind

  • That's it.