como obter o id do barramento de um dispositivo usb

5

Gostaria de ligar / desligar o meu dispositivo USB - um adaptador sem fios.

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

Então, para poder fazer isso, eu preciso do ID do barramento. lsusb imprime o seguinte:

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

e 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

Então, onde posso encontrar esse ID de ônibus? Obrigado!
Atualização: aqui está a informação detalhada sobre o devide sem fio: ( 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
    
por laplasz 12.11.2015 / 12:23

3 respostas

2

Você pode ler a sequência da árvore de dispositivos obtida com lsusb -t . O número antes do hífen é o barramento, os números após o hífen são a seqüência de portas. Seu dispositivo está no barramento 01 , na porta 1 do hub raiz desse barramento é outro hub e na porta 3 deste hub é o seu dispositivo: Então você recebe 1-1.3 .

Se você conhece o ID do fornecedor de lsusb (como 148f para Ralink), você também pode grep com

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

e você terá algo como

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

como resposta. Se houver vários dispositivos do mesmo fornecedor, você poderá reduzi-lo com idProduct .

    
por 12.06.2017 / 10:26
0

finalmente encontrei o ID de barramento correto do dispositivo usb. Existe um arquivo com todos os IDs - /sys/bus/usb/devices/ e o conteúdo é o seguinte:

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

e o correspondente 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

então eu tentei o 1-1.3 como um ID e funcionou. Mas 1-3 não.

root@raspberrypi:/home/pi# echo -n "1-3" > /sys/bus/usb/drivers/usb/unbind
bash: echo: write error: No such device
    
por 25.02.2016 / 14:24
0

Aqui está um exemplo em que eu estava tentando fazer a mesma coisa no Ubuntu 16.04 para o dispositivo USB-Ethernet:

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

Queremos desvincular o primeiro dispositivo. Você pode ver a instância do driver criada no sysfs e dentro do driver, uma instância do endereço do barramento USB do Dongle Ethernet:

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

Se você conectar outro dongle do mesmo tipo, poderá ver dois dispositivos:

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

Neste ponto, você pode ver dois dispositivos de rede:

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

Você pode desvincular assim:

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

E o dispositivo não será mais exibido na lista de interfaces:

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

Tenha em atenção que apenas a emissão de sudo echo 2-2.2:1.0 > unbind não funciona porque apenas eleva a permissão para o comando echo e não para o redirecionamento. Por isso, usamos conchas temporariamente elevadas. A desvinculação é gravável apenas pelo usuário root.

    
por 05.07.2017 / 13:23

Tags