Encaminhando portas USB do Windows 10 para trabalho remoto

Quando uma pessoa está cavando um bunker há muitos anos e armazenando comida lá, ele deve experimentar profunda satisfação moral se o bunker for necessário. Ele ficará satisfeito em dizer: "E eu digo e-e-e-il!" O mesmo se aplica àqueles que estocavam alimentos na despensa, quando todos eram comprados nas lojas apenas por hoje. Mas, com o nosso complexo de trabalho remoto Redd, não tenho vontade de me gabar. Foi projetado para afastamento em tempos de paz. E foi usado muito antes das primeiras notícias da China.

Durante muito tempo não escrevi nada sobre ele. Outros projetos são perturbadores e o interesse, a julgar pela classificação do último dos artigos publicados, já caiu. É preciso muito esforço para preparar um artigo, e faz sentido fazê-lo apenas se for necessário para um número suficiente de leitores.

Mas como todo mundo está nos lábios agora, havia um desejo de compartilhar uma coisa que poderia ajudar alguém. Este não é o nosso desenvolvimento, realizei pesquisas como parte do trabalho sobre o trabalho remoto com as placas de depuração de todo o hardware. Aqui vou descrever seus resultados agora. O projeto USB / IP é conhecido por muitos. Mas há muito tempo é encurtado pelos autores. Os drivers mais recentes estavam no WIN7. Hoje vou descrever onde fazer o download da opção para o WIN10 e mostrar como a testei. Além disso, os desenvolvedores do analógico moderno garantem que eles criaram não apenas um cliente Windows, mas também um servidor Windows (embora eu não tenha realizado testes nesse modo: a tarefa não exigia isso). Mas para alguém isso também pode ser útil.




Introdução


Primeiro, uma breve história sobre o que é USB / IP. Este é um conjunto de programas que permitem encaminhar um dispositivo USB pela rede. O próprio dispositivo está conectado ao servidor. O cliente está localizado em outra máquina. Ao mesmo tempo, há um aplicativo na máquina cliente que não foi completamente projetado para funcionar com a rede. Ele quer um dispositivo USB real. E recebe informações de que este dispositivo está conectado. Um driver padrão está instalado neste dispositivo. Em geral, o cliente acredita que funciona com um dispositivo USB local.

Alguém está jogando chaves de segurança. Verificamos a possibilidade de acesso remoto ao adaptador JTAG.

O projeto USB / IP estava em desenvolvimento ativo até 2013. Então a ramificação do Windows parou. Em geral, mesmo um binário assinado foi lançadomotorista. Mas estava no Windows 7. A filial do Linux continuou seu desenvolvimento, e esse serviço foi incorporado ao próprio sistema operacional. No mínimo, ele definitivamente está embutido na compilação Debian. Além disso, para Linux, existe um cliente e um servidor e, para Windows, apenas o cliente foi originalmente criado. Servidor no Windows não foi criado.

Há um artigo muito bom sobre Habré , que pode ser usado como referência para trabalhar com este serviço e como uma dica sobre como trabalhar com ele.

Opção para a versão atual do Windows


Mas não importa quão bom seja o Windows 7, ele já está morto. Como parte do trabalho sobre todo o hardware, consideramos várias opções para solucionar um dos problemas e apenas tivemos que verificar várias alternativas com base no “ajuste - não ajuste”. Era impossível passar muitas horas de trabalho checando. E a alteração do driver no Windows 10 pode se arrastar por si só. Portanto, foi feita uma pesquisa na rede, que trouxe o usbip-win ao projeto . No momento de sua descoberta, a versão nova era de 23 de fevereiro de 2020, ou seja, o projeto estava em exibição. Ele pode ser construído em WIN7 e WIN10. Além disso, ao contrário do projeto original, não apenas um cliente Windows, mas também um servidor Windows podem ser criados.

Eu verifiquei, o projeto está perfeitamente montado e instalado, então mais trabalho foi realizado com ele. No arquivo leia-me Há um link para o código binário pronto para aqueles que não desejam construir por conta própria.

A parte triste da verificação: o lado do servidor


Primeiro, vou lhe contar como a verificação foi realizada como parte do nosso projeto. Não terminou muito bem lá. Verificamos o adaptador ST-LINK instalado no caso do complexo Redd, já que eu já notei que o complexo usa o SO Linux do conjunto Debian, e esse conjunto contém o serviço USB / IP interno.

De acordo com o artigo, instale o serviço:

sudo apt-get update 
sudo apt-get upgrade 
sudo apt-get install usbip

O restante do artigo detalha como automatizar o processo de carregamento de um serviço. Pelo que entendi, já escrevi várias vezes. Mal versado. Não tenho o hábito de citar os textos de outras pessoas com uma cara inteligente, entendendo mal a essência. Portanto, lembrarei mais uma vez um link para um artigo maravilhoso , onde tudo é contado, e mostrarei o que fiz em cada início do sistema operacional (já que tudo era necessário apenas para verificação):

sudo modprobe usbip-core
sudo modprobe usbip-host
sudo usbipd -D

O objetivo dos dois primeiros feitiços acima é desconhecido para mim, mas sem eles alguns diretórios não são criados e sem esses diretórios, não haverá exportação de uma porta USB. Os diretórios são criados apenas até o sistema ser reiniciado. Então você precisa criá-los sempre. A terceira linha - tudo fica mais claro com isso, inicia o serviço.

Agora, olhamos para o nome do dispositivo:

user@redd:~$ sudo usbip list -l
- busid 1-3 (046d:082d)
   Logitech, Inc. : HD Pro Webcam C920 (046d:082d)

 - busid 1-4 (1366:0101)
   SEGGER : J-Link PLUS (1366:0101)

 - busid 1-5.1 (067b:2303)
   Prolific Technology, Inc. : PL2303 Serial Port (067b:2303)

 - busid 1-5.4.1.1 (0483:5740)
   STMicroelectronics : STM32F407 (0483:5740)

 - busid 1-5.4.1.3 (0483:3748)
   STMicroelectronics : ST-LINK/V2 (0483:3748)
<...>

Acontece que precisamos de um dispositivo e busid igual a 1-5.4.1.3.

Nós damos o comando:

sudo usbip bind --busid=1-5.4.1.3

Tudo, o servidor está pronto para funcionar.

A parte triste da verificação: a parte do cliente


Instalamos o driver no Windows (fazemos isso apenas uma vez e, em seguida, ele sempre será instalado). Para fazer isso, execute em nome do administrador o arquivo usbip.exe com o argumento install :

usbip.exe install

Agora, verificamos se o dispositivo está disponível para nós:

usbip.exe list --remote=192.168.10.123

Garantimos que ele esteja na lista. Bem, e conecte-o:

usbip.exe attach --remote=192.168.10.123 --busid=1-5.4.1.3

Um novo dispositivo USB aparece no gerenciador de dispositivos, Keil o vê perfeitamente ...

Mas é aí que o agradável termina. Um pequeno programa é derramado em uma unidade flash por cerca de um minuto. As tentativas de percorrer as linhas variam de 5 a 20 segundos por linha. Isso é inaceitável. Durante uma pausa, o tráfego de aproximadamente 50 kilobits por segundo segue nas duas direções. Vai muito e pensativo.

Honestamente, o prazo me levou a adivinhar por que tudo estava tão ruim. Suspeito que haja tráfego JTAG em execução na rede. E ele roda em pequenos pacotes nas duas direções, daí os problemas. Portanto, o estudo foi concluído com o resultado: "Não adequado para o projeto".

A parte divertida: preparação


Mesmo assim, ocorreu-me que, pelo canto do olho, vi que no adaptador CMSIS DAP JTAG o USB era usado para enviar não apenas tráfego JTAG, mas comandos. O tráfego JTAG já está formado dentro do adaptador. Há muito que eu queria checar, mas nem todas as minhas mãos chegaram. A transferência em massa para um site remoto obrigou-o a fazer (surgiu um problema). O que é o CMSIS DAP? Este é um adaptador JTAG recomendado pelo ARM para controladores Cortex-M. Os códigos-fonte para diferentes controladores são publicados no GitHub; você pode soldar o adaptador com base em qualquer um deles. Vou agora fornecer um link para um clone do projeto adaptado para a placa de ensaio Blue Pill: https://github.com/x893/CMSIS-DAP , mas os mecanismos de pesquisa também podem exibir a conta oficial do ARM.

Para não gastar um PC inteiro no servidor, para verificação, criei um tipo de complexo Yelloww (puramente pela cor do plástico do qual a caixa é feita):



A função de servidor é desempenhada pelo Raspberry Pi com o Raspbian OS instalado (este é o mesmo Debian, o que significa que existe o servidor necessário ) Uma das pílulas azuis atua como um adaptador CMSIS DAP, a segunda como um dispositivo depurado.

Definimos e configuramos o serviço da mesma maneira. A menos que aqui a lista de dispositivos permitidos para exportação seja muito mais modesta:

pi@raspberrypi:~ $ sudo usbip list -l
 - busid 1-1.1 (0424:ec00)
   Standard Microsystems Corp. : SMSC9512/9514 Fast Ethernet Adapter (0424:ec00)

 - busid 1-1.4 (c251:f001)
   Keil Software, Inc. : unknown product (c251:f001)

É claro que aqui exportamos e importamos o dispositivo busid = 1-1.4.

E aqui é especificamente com o CMSIS DAP que periodicamente tenho um pequeno problema. No gerenciador de dispositivos, vejo um incômodo assim:



deixe-me lembrá-lo de que o artigo foi escrito com o princípio “Melhor não é ruim, mas hoje do que ideal, mas amanhã”. Problemas de trabalho remoto estão surgindo no momento. Espero que, no futuro próximo, não sejam mais relevantes. Enquanto isso, eles são relevantes - mostro como ignoro esse problema manualmente. Primeiro desligo o dispositivo:



Em seguida, ligo imediatamente:



E ele começa a funcionar sem problemas. No Keil, alteramos o depurador para CMSIS DAP:



E aqui está:



Ao trabalhar em uma rede local, tudo simplesmente voa. Mas é claro que ninguém está interessado na rede local. Tentei encaminhar a porta do dispositivo em casa e, em seguida, conectar-me remotamente à máquina no trabalho e encaminhar o “firmware” de lá. A conexão no meu provedor de casa é muito, muito lenta, principalmente - de mim do lado de fora. O controlador pisca cerca de três vezes mais lentamente do que quando conectado diretamente ao USB. Rastreando ... Bem, cerca de um segundo por linha, exatamente não mais. Em geral, suportável. Com bons fornecedores, espero que seja melhor.

Conclusão


O projeto usbip-win é um substituto moderno para o projeto USB / IP. Ele vive e se desenvolve. Ao mesmo tempo, fornece não apenas a função de cliente para Windows, mas também a função de servidor. A compatibilidade com a versão Linux é salva.

A estabilidade do dispositivo USB remoto foi inesperadamente surpreendente. Eu tinha certeza de que ocorreriam tempos limite. Talvez eles surjam em algum lugar, mas para os adaptadores JTAG, não houve uma única falha. Infelizmente, nem todos os dispositivos USB podem ser encaminhados pela rede devido à baixa velocidade do sistema resultante. Mas no caso de adaptadores JTAG, você pode considerar coisas alternativas. Em particular, CMSIS-DAP em vez de ST-LINK.

Os dois projetos revisados ​​(usbip-win e CMSIS-DAP) podem ser baixados do GitHub na forma de códigos-fonte.

Se isso ajudar alguém a organizar o acesso remoto ao equipamento, ficarei feliz. O uso do Raspberry Pi permitirá que você largue o equipamento em locais arbitrários.

All Articles