USB sobre IP em casa

Às vezes você deseja trabalhar com um dispositivo conectado via USB sem mantê-lo na mesa ao lado do laptop. Meu aparelho é um gravador chinês com laser de 500 mW, o que é bastante desagradável quando em contato próximo. Além do perigo imediato para os olhos, produtos tóxicos da combustão são liberados durante a operação do laser, portanto o dispositivo deve estar localizado em uma área bem ventilada e de preferência isolada de pessoas. Como você pode controlar tal dispositivo? Eu acidentalmente encontrei a resposta para esta pergunta enquanto navegava no repositório OpenWRT na esperança de encontrar um uso digno para o antigo roteador D-Link DIR-320 A2. Para conectar, decidi usar o descrito anteriormente no Habré. Túnel USB sobre IP, no entanto, todas as instruções para instalação perderam relevância, então estou escrevendo as minhas próprias.

OpenWRT é um sistema operacional que dispensa apresentações, por isso não descreverei sua instalação. Para o meu roteador, peguei a versão estável mais recente do OpenWrt 19.07.3 e conectei-o ao ponto de acesso Wi-Fi principal como cliente, selecionando o modo lan, para não atormentar o firewall.

parte do servidor

Agimos de acordo com instruções oficiais. Após conectar via ssh, instale os pacotes necessários.

root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install kmod-usb-ohci usbip-server usbip-client

Em seguida, conectamos nosso dispositivo à porta USB do roteador (no meu caso, dispositivos: um hub USB, um pen drive no qual está montado o sistema de arquivos do roteador (por falta de espaço no armazenamento interno) e, diretamente, o gravador).

Vamos tentar exibir uma lista de dispositivos conectados:

root@OpenWrt:~# usbip list -l

Está vazio.

Ao pesquisar no Google o culpado foi encontrado, descobriu-se que era uma biblioteca libudev-fbsd.
Retiramos manualmente a versão funcional mais recente do repositório libudev_3.2-1 da versão OpenWRT 17.01.7 para sua arquitetura, no meu caso é libudev_3.2-1_mipsel_mips32.ipk. Usando wget/scp, baixe-o na memória do roteador e reinstale-o

root@OpenWrt:~# opkg remove --force-depends libudev-fbsd
root@OpenWrt:~# opkg install libudev_3.2-1_mipsel_mips32.ipk

Verificamos:

root@OpenWrt:~# usbip list -l
 - busid 1-1.1 (090c:1000)
   Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) : Flash Drive (090c:1000)

 - busid 1-1.4 (1a86:7523)
   QinHeng Electronics : HL-340 USB-Serial adapter (1a86:7523)

Um chinês conectado a um hub USB recebeu um bsuid 1-1.4. Lembrar.

Agora vamos iniciar o daemon:

root@OpenWrt:~# usbipd -D

e bindim os chineses

root@OpenWrt:~# usbip bind -b 1-1.4
usbip: info: bind device on busid 1-1.4: complete

Vamos verificar se tudo está funcionando:

root@OpenWrt:/home# netstat -alpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               LISTEN      1884/usbipd

Para vincular ainda mais o dispositivo automaticamente, vamos editar /etc/rc.localadicionando antes sair 0 O seguinte:

usbipd -D &
sleep 1
usbip bind -b 1-1.4

Lado do cliente

Vamos tentar conectar o dispositivo ao Windows 10 usando as instruções acima em openwrt.org. Direi desde já: a ideia está fadada ao fracasso. Primeiramente, apenas o Windows 7 x64 é considerado. Em segundo lugar, é fornecido um link para um tópico no sourceforge.net, que sugere o download de um driver corrigido em 2014 do Dropbox. Quando tentamos executá-lo no Windows 10 e conectar-nos ao nosso dispositivo, obtemos o seguinte erro:

c:Utilsusbip>usbip -a 192.168.31.203 1-1.4
usbip for windows ($Id$)

*** ERROR: cannot find device

Isso se deve ao fato do cliente não funcionar com um servidor construído para um kernel anterior à versão 3.14.
O servidor usbip para OpenWRT 19.07.3 é construído no kernel 4.14.180.

Continuando minha pesquisa, me deparo com o desenvolvimento atual de um cliente Windows para github. Ok, o suporte para Windows 10 x64 é declarado, mas o cliente é apenas um cliente de teste, portanto, há uma série de limitações.

Então, primeiro eles pedem para instalar o certificado e duas vezes. Ok, vamos colocá-lo na Autoridade de Certificação Raiz Confiável e nos Editores Confiáveis.

Em seguida, você precisa colocar o sistema operacional em modo de teste. Isso é feito por uma equipe

bcdedit.exe /set TESTSIGNING ON

Não consegui da primeira vez, atrapalhei inicialização segura. Para desativá-lo, você precisa reinicializar em UEFI e definir a inicialização segura como desativada. Alguns modelos de laptop podem exigir a configuração de uma senha de supervisor.

Depois disso, inicialize no Windows e faça bcdedit.exe /set TESTSIGNING ON
Vinda diz que está tudo bem. Reinicializamos novamente e vemos no canto inferior direito as palavras Modo de teste, versão e número de compilação do sistema operacional.

Para que servem todas essas manipulações? Para instalar um driver não assinado USB/IP VHCI. Sugere-se fazer isso baixando os arquivos usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat e executando com direitos de administrador

usbip.exe install

ou o segundo método, instalando o hardware legado manualmente. Escolhi a segunda opção, recebi um aviso sobre a instalação de um driver não assinado e concordei com isso.

A seguir, verificamos se podemos nos conectar a um dispositivo USB remoto executando o comando:

usbip.exe list -r <ip вашего роутера>

obtemos uma lista de dispositivos:

c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: error: failed to open usb id database
Exportable USB devices
======================
 - 192.168.31.203
      1-1.4: unknown vendor : unknown product (1a86:7523)
           : /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
           : unknown class / unknown subclass / unknown protocol (ff/00/00)

por um erro usbip: erro: falha ao abrir o banco de dados de ID USB Não prestamos atenção, isso não prejudica o trabalho.

Agora ligamos o dispositivo:

c:Utilsusbip>usbip.exe attach -r 192.168.31.203 -b 1-1.4

É isso, o Windows detectou um novo dispositivo, agora você pode trabalhar com ele como se estivesse conectado fisicamente ao laptop.

Tive que sofrer um pouco com o gravador chinês, pois quando tentei instalar seu driver CH341SER através do instalador que acompanha o gravador (sim, um gravador Arduino), o USB/IP VHCI derrubou o Windows em BSOD. No entanto, a instalação do driver CH341SER para conectar o dispositivo via usbip.exe resolveu o problema.

Resumindo: o gravador faz barulho e fuma na cozinha com a janela aberta e a porta fechada, observo o processo de queima de outro cômodo através do meu próprio software, que não detecta nenhum problema.

Fontes utilizadas:

https://openwrt.org/docs/guide-user/services/usb.iptunnel
https://github.com/cezanne/usbip-win

Fonte: habr.com

Adicionar um comentário