web-dev-qa-db-ja.com

USBデバイスのバスIDを取得する方法

USBデバイス(ワイヤレスアダプター)をバインド/バインド解除したい。

_echo -n "1-1:1.0" > /sys/bus/usb/drivers/ub/unbind
_

それを行うには、バスIDが必要です。 lsusbは以下を出力します:

_Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 004: ID 148f:2573 Ralink Technology, Corp. RT2501/RT2573 Wireless Adapter
_

そして_lsusb -t_:

_/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/3p, 480M
        |__ Port 1: Dev 3, If 0, Class=vend., Driver=smsc95xx, 480M
        |__ Port 2: Dev 4, If 0, Class=vend., Driver=rt73usb, 480
_

では、このバスIDはどこにありますか?ありがとう!
pdate:ワイヤレスデバイスに関する詳細情報は次のとおりです:(lsusb -v | grep -E '\<(Bus|iProduct|bDeviceClass|bDeviceProtocol)' 2>/dev/null

_Bus 001 Device 004: ID 148f:2573 Ralink Technology, Corp. RT2501/RT2573 Wireless Adapter
  bDeviceClass            0 (Defined at Interface level)
  bDeviceProtocol         0 
  iProduct                2
_
8
laplasz

lsusb -tで取得したデバイスツリーからシーケンスを読み取ることができます。ハイフンの前の数字はバス、ハイフンの後の数字はポートシーケンスです。デバイスはバス01にあり、このバスのルートハブのポート1は別のハブであり、このハブのポート3はデバイスです。つまり、1-1.3

lsusbからベンダーID(Ralinkの場合は148fのように)がわかっている場合は、grepを使用して

grep 148f /sys/bus/usb/devices/*/idVendor

そしてあなたはのようなものを得るでしょう

/sys/bus/usb/devices/1-1.3/idVendor:148f

答えとして。同じベンダーのデバイスが複数ある場合は、idProductで絞り込むことができます。

4
dirkt

最後に、USBデバイスの正しいバスIDを見つけました。すべてのIDをリストしたファイルがあります-/sys/bus/usb/devices/と内容は次のとおりです。

root@raspberrypi:/home/pi# ls /sys/bus/usb/devices
1-0:1.0  1-1  1-1.1  1-1:1.0  1-1.1:1.0  1-1.3  1-1.3:1.0  usb1

そして対応するlsusb:

root@raspberrypi:/home/pi# lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/3p, 480M
        |__ Port 1: Dev 3, If 0, Class=vend., Driver=smsc95xx, 480M
        |__ Port 3: Dev 17, If 0, Class=vend., Driver=rt73usb, 480M

root@raspberrypi:/home/pi# lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 017: ID 148f:2573 Ralink Technology, Corp. RT2501/RT2573 Wireless Adapter

iDとして1-1.3を試してみたが、うまくいった。しかし、1-3はしませんでした。

root@raspberrypi:/home/pi# echo -n "1-3" > /sys/bus/usb/drivers/usb/unbind
bash: echo: write error: No such device
2
laplasz

USB-EthernetデバイスのUbuntu 16.04で同じことを実行しようとした例を次に示します。

anurag@anurag-ThinkPad-E470:~$ lsusb
Bus 002 Device 003: ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet
Bus 002 Device 002: ID 0424:5744 Standard Microsystems Corp.
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 007: ID 138a:0011 Validity Sensors, Inc. VFS5011 Fingerprint Reader

最初のデバイスをアンバインドします。 sysfsで作成されたドライバーインスタンスと、ドライバー内にイーサネットドングルのUSBバスアドレスのインスタンスが表示されます。

anurag@anurag-ThinkPad-E470:/sys/bus/usb/drivers$ ls
ax88179_178a  btusb  hub  r8188eu  usb  usbfs  usbhid  uvcvideo
anurag@anurag-ThinkPad-E470:/sys/bus/usb/drivers/ax88179_178a$ ls
2-2.2:1.0  bind  module  new_id  remove_id  uevent  unbind

同じタイプの別のドングルを差し込むと、2つのデバイスが表示されます。

anurag@anurag-ThinkPad-E470:/sys/bus/usb/drivers/ax88179_178a$ ls
2-2.1:1.0  2-2.2:1.0  bind  module  new_id  remove_id  uevent  unbind

この時点で、2つのネットデバイスが表示されます。

anurag@anurag-ThinkPad-E470:~$ ip link show
....
6: enx000ec6cd8d75: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:0e:c6:cd:8d:75 brd ff:ff:ff:ff:ff:ff
7: enx000ec6cd8d90: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:0e:c6:cd:8d:90 brd ff:ff:ff:ff:ff:ff

次のようにアンバインドできます:

anurag@anurag-ThinkPad-E470:/sys/bus/usb/drivers/ax88179_178a$ Sudo sh -c "echo 2-2.2:1.0 > unbind"
[Sudo] password for anurag:
anurag@anurag-ThinkPad-E470:/sys/bus/usb/drivers/ax88179_178a$ ls
2-2.1:1.0  bind  module  new_id  remove_id  uevent  unbind

そして、デバイスはインターフェイスリストに表示されなくなります。

anurag@anurag-ThinkPad-E470:~$ ip link show
....
6: enx000ec6cd8d75: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:0e:c6:cd:8d:75 brd ff:ff:ff:ff:ff:ff

Sudo echo 2-2.2:1.0 > unbindは、echoコマンドの権限を昇格させるだけで、リダイレクトの権限は昇格しないため、機能しません。したがって、一時的に昇格したシェルを使用します。バインド解除は、rootユーザーのみが書き込み可能です。

0
lithiumhead