Como logicamente ejetar / desconectar e reconectar um dispositivo usb (dongle)?

6

Compramos uma aplicação comercial que apenas funciona se o usb dongle estiver conectado ao servidor. No entanto, às vezes, o aplicativo não consegue reconhecer o dongle, por isso não funciona, mas se alguém ejetar o dongle fisicamente da porta USB e conectá-lo novamente, ele reconhecerá e funcionará bem.

Existem 43 módulos carregados no servidor e anexar / ejetar o dongle não aumenta / diminui o número de módulos.

Também tenho arquivos usbmon0 , usbmon1 e usbmon2 em / dev antes / depois de ejetar / anexar o arquivo. O dongle e o número de arquivos em / dev não serão alterados antes / depois da ejeção / anexação do dongle.

Comando

journalctl -f após ejetar o dongle:

Jan 19 18:10:28 iwr kernel: usb 2-2.1: USB disconnect, device number 5
Comando

journalctl -f depois de anexar o dongle:

Jan 19 18:11:11 iwr kernel: usb 2-2.1: new full-speed USB device number 6 using uhci_hcd
Jan 19 18:11:11 iwr kernel: usb 2-2.1: New USB device found, idVendor=0403, idProduct=c580
Jan 19 18:11:11 iwr kernel: usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Jan 19 18:11:11 iwr kernel: usb 2-2.1: Product: HID UNIKEY
Jan 19 18:11:11 iwr kernel: usb 2-2.1: Manufacturer: OEM
Jan 19 18:11:11 iwr kernel: usbhid 2-2.1:1.0: couldn't find an input interrupt endpoint

Posso ejetar e anexá-lo logicamente? (emita um comando, remova um módulo, etc.)

    
por Ali Yousefi Sabzevar 19.01.2016 / 16:09

1 resposta

7

Muitas respostas encontradas na Internet (incluindo aquelas contidas no comentário do TNW) dependem do /sys/bus/usb/devices/2-2/power/level ou /sys/bus/usb/devices/2-2/power/control , ambos obsoletos desde o kernel 2.6.something. Para os kernels mais recentes, o procedimento sugerido é para desvincular e religar seu driver, o que geralmente resulta em um ciclo de energia:

# Find out which driver to unbind
tree /sys/bus/usb/devices/2-2.1 | grep driver
|-- driver -> ../../../../../../bus/usb/drivers/whatever

# Unbind the driver
echo 2-2.1 > /sys/bus/usb/drivers/whatever/unbind

# Rebind the driver
echo 2-2.1 > /sys/bus/usb/drivers/whatever/bind
    
por 19.01.2016 / 17:19