Identifique, desconecte e reconecte o dispositivo USB via terminal

2

Eu uso um dispositivo USB Huawei ME906s-158 como descrito aqui . Se o módulo perder a conexão, parece haver problemas para se reconectar à rede. Então minha idéia é escrever algum script, rodando em background verificando se a conexão LTE está ativa, e se não liberar o dispositivo USB e reconectá-lo, usando comandos do terminal. Eu encontrei informações úteis aqui e , mas o código não está em execução no meu Ubuntu 16.04, que pode ser o problema.

Por esta linha, por exemplo:

modprobe -r -f uhci_hcd

resulta no erro modprobe: FATAL: Module uhci_hcd is builtin. . O mesmo é verdadeiro se eu usar xhci_hcd, que é usado para o meu dispositivo. Então, minha pergunta é como alterar os comandos do modprobe para remover / conectar meu dispositivo?

Usando dmesg , o dispositivo está conectado como

usb 3-13.1: new high-speed USB device number 117 using xhci_hcd
usb 3-13.1: New USB device found, idVendor=12d1, idProduct=15c1
usb 3-13.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-13.1: Product: HUAWEI Mobile
usb 3-13.1: Manufacturer: Huawei Technologies Co., Ltd.
usb 3-13.1: SerialNumber: 0123456789ABCDEF
cdc_ether 3-13.1:2.0 usb0: register 'cdc_ether' at usb-0000:00:14.0-13.1, CDC Ethernet Device, 02:1e:10:1f:00:00

onde o número do dispositivo varia e a porta usb depende da porta de hardware usada. Eu acho que simplesmente não entendo como o dispositivo é nomeado ou montado para ser endereçado com o modprobe. As informações relevantes de lsusb são Bus 003 Device 028: ID 12d1:15c1 Huawei Technologies Co., Ltd. e lsusb -t entrega

/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/15p, 480M
    |__ Port 12: Dev 11, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 3: Dev 14, If 1, Class=Human Interface Device, Driver=, 1.5M
        |__ Port 3: Dev 14, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 1: Dev 64, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 2: Dev 13, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 2: Dev 13, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 13: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
    |__ Port 14: Dev 29, If 0, Class=Communications, Driver=cdc_ether, 480M
    |__ Port 14: Dev 29, If 1, Class=CDC Data, Driver=cdc_ether, 480M
    |__ Port 14: Dev 29, If 2, Class=Vendor Specific Class, Driver=option, 480M
    |__ Port 14: Dev 29, If 3, Class=Vendor Specific Class, Driver=option, 480M
    |__ Port 14: Dev 29, If 4, Class=Vendor Specific Class, Driver=option, 480M
    |__ Port 14: Dev 29, If 5, Class=Vendor Specific Class, Driver=option, 480M
    |__ Port 14: Dev 29, If 6, Class=Vendor Specific Class, Driver=option, 480M

Muito obrigado pela sua ajuda.

Editar 1: aqui está a saída dmesg completa:

[748010.825136] usb 3-13.1: new high-speed USB device number 79 using xhci_hcd
[748010.926143] usb 3-13.1: New USB device found, idVendor=12d1, idProduct=15c1
[748010.926146] usb 3-13.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[748010.926147] usb 3-13.1: Product: HUAWEI Mobile
[748010.926148] usb 3-13.1: Manufacturer: Huawei Technologies Co., Ltd.
[748010.926149] usb 3-13.1: SerialNumber: 0123456789ABCDEF
[748010.929581] cdc_ether 3-13.1:2.0 usb0: register 'cdc_ether' at usb-0000:00:14.0-13.1, CDC Ethernet Device, 02:1e:10:1f:00:00
[748010.930008] option 3-13.1:2.2: GSM modem (1-port) converter detected
[748010.930178] usb 3-13.1: GSM modem (1-port) converter now attached to ttyUSB0
[748010.930451] option 3-13.1:2.3: GSM modem (1-port) converter detected
[748010.930588] usb 3-13.1: GSM modem (1-port) converter now attached to ttyUSB1
[748010.930829] option 3-13.1:2.4: GSM modem (1-port) converter detected
[748010.930929] usb 3-13.1: GSM modem (1-port) converter now attached to ttyUSB2
[748010.931153] option 3-13.1:2.5: GSM modem (1-port) converter detected
[748010.931254] usb 3-13.1: GSM modem (1-port) converter now attached to ttyUSB3
[748010.931474] option 3-13.1:2.6: GSM modem (1-port) converter detected
[748010.931580] usb 3-13.1: GSM modem (1-port) converter now attached to ttyUSB4
[748010.959172] cdc_ether 3-13.1:2.0 enp0s20u13u1c2: renamed from usb0
[748010.986087] IPv6: ADDRCONF(NETDEV_UP): enp0s20u13u1c2: link is not ready
[748010.986238] cdc_ether 3-13.1:2.0 enp0s20u13u1c2: kevent 12 may have been dropped
[748010.990538] IPv6: ADDRCONF(NETDEV_UP): enp0s20u13u1c2: link is not ready

A saída total de tree /sys/devices/pci0000:00/0000:00:14.0/usb3/3-13/ | grep driver é:

│   │   ├── driver -> ../../../../../../../bus/usb/drivers/cdc_ether
│   │   ├── driver -> ../../../../../../../bus/usb/drivers/cdc_ether
│   │   ├── driver -> ../../../../../../../bus/usb/drivers/option
│   │   │   ├── driver -> ../../../../../../../../bus/usb-serial/drivers/option1
│   │   ├── driver -> ../../../../../../../bus/usb/drivers/option
│   │   │   ├── driver -> ../../../../../../../../bus/usb-serial/drivers/option1
│   │   ├── driver -> ../../../../../../../bus/usb/drivers/option
│   │   │   ├── driver -> ../../../../../../../../bus/usb-serial/drivers/option1
│   │   ├── driver -> ../../../../../../../bus/usb/drivers/option
│   │   │   ├── driver -> ../../../../../../../../bus/usb-serial/drivers/option1
│   │   ├── driver -> ../../../../../../../bus/usb/drivers/option
│   │   │   ├── driver -> ../../../../../../../../bus/usb-serial/drivers/option1
│   ├── driver -> ../../../../../../bus/usb/drivers/usb
│   ├── driver -> ../../../../../../bus/usb/drivers/hub
├── driver -> ../../../../../bus/usb/drivers/usb
    
por Martin Herrmann 10.01.2018 / 11:49

1 resposta

3

Gostaria de comentar, mas ainda não tenho pontos de reputação suficientes para fazer isso.

Até onde eu sei, modprobe é usado para adicionar / remover módulos / drivers. Com o comando modprobe -r -f uhci_hcd você está tentando remover um módulo construído no kernel link .

Se você deseja desativar seu dispositivo USB e reativá-lo, dê uma olhada em sua postagem aqui: link .

Uma maneira muito mais fácil aqui: link .

EDIT: eu

Eu não tenho uma máquina Linux atm, então infelizmente não consigo reproduzir, mas parece que bind e unbind também podem funcionar. Dê uma olhada neste link . Verifique os dois Textblocks a seguir: um com USB Port Power Control e o outro abaixo, começando com User Interface for Port Power Control . Certifique-se, quando você unbind desvincular o módulo / driver do seu dispositivo usb e não o módulo que está relacionado ao seu hub usb.

EDIT II:

Ok, agora estou de volta em casa e pude testá-lo na minha máquina. Estou executando o Lubuntu 16.04. Meu dispositivo USB para teste era um pendrive de 8 GB.

Primeiro, abra um terminal e digite dmesg -w . Em seguida, conecte seu dispositivo USB.

[ 1897.772736] usb 2-2: new high-speed USB device number 7 using ehci-pci
[ 1897.907178] usb 2-2: New USB device found, idVendor=13fe, idProduct=5500
[ 1897.907185] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1897.907189] usb 2-2: Product: Silicon-Power8G
[ 1897.907193] usb 2-2: Manufacturer: UFD 3.0
[ 1897.907196] usb 2-2: SerialNumber: P1602059070C691668B63659
[ 1897.907802] usb-storage 2-2:1.0: USB Mass Storage device detected
[ 1897.909153] scsi host22: usb-storage 2-2:1.0
[ 1898.910257] scsi 22:0:0:0: Direct-Access     UFD 3.0  Silicon-Power8G  PMAP PQ: 0 ANSI: 6
[ 1898.910896] sd 22:0:0:0: Attached scsi generic sg4 type 0
[ 1898.911521] sd 22:0:0:0: [sdd] 15126528 512-byte logical blocks: (7.74 GB/7.21 GiB)
[ 1898.912261] sd 22:0:0:0: [sdd] Write Protect is off
[ 1898.912266] sd 22:0:0:0: [sdd] Mode Sense: 45 00 00 00
[ 1898.912982] sd 22:0:0:0: [sdd] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 1898.950371]  sdd:
[ 1898.953487] sd 22:0:0:0: [sdd] Attached SCSI removable disk
[ 1899.243793] FAT-fs (sdd): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

Aqui, podemos ver que um novo dispositivo ehci-pci em usb 2-2 foi reconhecido. Após algumas linhas, usb 2-2 muda para usb-storage 2-2:1.0 para scsi 22:0:0:0 e finalmente para sd 22:0:0:0 O que esses números significam exatamente está além do meu conhecimento. Tem algo a ver com a porta USB, mas isso não é tudo. Pelo menos é um identificador.

De qualquer forma, agora vamos para a pasta /sys/ . Somwhere dentro de /sys/ vamos encontrar o driver, que é responsável pelo nosso dispositivo usb. Queremos unbind do nosso dispositivo desse driver. Por isso, precisamos descobrir o caminho para o driver e seu comando unbind . Nós vamos usar o comando tree . Nós digitamos tree /sys/ | grep 22:0:0:0

alex@ga-P55A-UD5:~$ tree /sys/ | grep 22:0:0:0
│   ├── sdd -> ../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd
│   │   │   ├── 22:0:0:0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0
│   │   │   │   ├── 22:0:0:0 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0
│   │   ├── sdd -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd
│   │   ├── 22:0:0:0 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/bsg/22:0:0:0
│   │   ├── 22:0:0:0 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_device/22:0:0:0
│   │   ├── 22:0:0:0 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_disk/22:0:0:0
│   │   └── sg4 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_generic/sg4
│   │   ├── 8:48 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd
│       ├── 21:4 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_generic/sg4
│       ├── 249:4 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/bsg/22:0:0:0
│   │   │   │   │   │   │   │   ├── 22:0:0:0
│   │   │   │   │   │   │   │   │   │       ├── device -> ../../../22:0:0:0
│   │   │   │   │   │   │   │   │   │   └── 22:0:0:0
│   │   │   │   │   │   │   │   │   │       ├── device -> ../../../22:0:0:0
│   │   │   │   │   │   │   │   │   │   └── 22:0:0:0
│   │   │   │   │   │   │   │   │   │       ├── device -> ../../../22:0:0:0
│   │   │   │   │   │   │   │   │   │   └── 22:0:0:0
│   │   │   │   │   │   │   │   │   │       ├── device -> ../../../22:0:0:0
│   │   │   │   │   │   │   │   │   │       ├── device -> ../../../22:0:0:0

A primeira linha já está nos dizendo para onde ir: ../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd

Lembre-se, ainda estamos procurando o comando unbind em algum lugar na pasta do driver, que está de alguma forma anexado ao nosso dispositivo. Nosso dispositivo, referente a dmesg , também foi chamado de 2-2:1.0 , então usamos isso como pasta pai para tree :

tree /sys/devices/pci0000\:00/0000\:00\:1d.7/usb2/2-2/2-2\:1.0/ | grep driver

alex@ga-P55A-UD5:~$ tree /sys/devices/pci0000\:00/0000\:00\:1d.7/usb2/2-2/2-2\:1.0/ | grep driver
├── driver -> ../../../../../../bus/usb/drivers/usb-storage
│   │   │   ├── driver -> ../../../../../../../../../bus/scsi/drivers/sd

Agora encontramos o caminho para o driver que está conectado ao dispositivo usb.

Então, vamos ls /sys/bus/usb/drivers/usb-storage/

alex@ga-P55A-UD5:~$ ls /sys/bus/usb/drivers/usb-storage/
2-2:1.0  bind  module  new_id  remove_id  uevent  unbind

Agora temos todas as informações de que precisamos, por isso, digitamos o seguinte como root (com sudo parece não funcionar):

echo -n "2-2:1.0" > /sys/bus/usb/drivers/usb-storage/unbind

e logo depois disso, porque você queria o efeito de reconexão:

echo -n "2-2:1.0" > /sys/bus/usb/drivers/usb-storage/bind

Saída de dmesg -w :

[ 3516.792135] usb-storage 2-2:1.0: USB Mass Storage device detected
[ 3516.792406] scsi host23: usb-storage 2-2:1.0
[ 3517.792201] scsi 23:0:0:0: Direct-Access     UFD 3.0  Silicon-Power8G  PMAP PQ: 0 ANSI: 6
[ 3517.792879] sd 23:0:0:0: Attached scsi generic sg4 type 0
[ 3517.793592] sd 23:0:0:0: [sdd] 15126528 512-byte logical blocks: (7.74 GB/7.21 GiB)
[ 3517.794340] sd 23:0:0:0: [sdd] Write Protect is off
[ 3517.794346] sd 23:0:0:0: [sdd] Mode Sense: 45 00 00 00
[ 3517.796083] sd 23:0:0:0: [sdd] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 3517.801135]  sdd:
[ 3517.803788] sd 23:0:0:0: [sdd] Attached SCSI removable disk
[ 3518.096593] FAT-fs (sdd): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

Espero que isso ajude você a encontrar uma solução.

Se você quiser ler mais sobre o tópico: link

    
por AlexOnLinux 10.01.2018 / 12:16