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
_
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
で絞り込むことができます。
最後に、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
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ユーザーのみが書き込み可能です。