Reenvío de puertos USB desde Windows 10 para trabajo remoto

Cuando una persona ha estado cavando un búnker durante muchos años y almacenando comida allí, debe experimentar una profunda satisfacción moral si es necesario. Le complacerá decir: "¡Y yo digo y lo hago!" Lo mismo se aplica a aquellos que almacenaron alimentos en la despensa, cuando todos fueron comprados en las tiendas solo por hoy. Pero con nuestro complejo de trabajo remoto Redd, no tengo ganas de regodearme. Fue diseñado para la lejanía en tiempos de paz. Y se usó mucho antes de las primeras noticias de China.

Durante mucho tiempo no escribí nada sobre él. Otros proyectos distraen, y el interés, a juzgar por la calificación del último de los artículos publicados, ya ha disminuido. Se necesita mucho esfuerzo para preparar un artículo, y tiene sentido hacerlo solo si necesita tener suficientes lectores.

Pero como todos están en la boca ahora, había un deseo de compartir una cosa que podría ayudar a alguien. Este no es nuestro desarrollo, realicé una investigación como parte del trabajo en el trabajo remoto con placas de depuración de todo el hardware. Aquí describiré sus resultados ahora. El proyecto USB / IP es conocido por muchos. Pero los autores lo han restringido durante mucho tiempo. Los últimos controladores estaban bajo WIN7. Hoy describiré dónde descargar la opción para WIN10 y mostraré cómo lo probé. Además, los desarrolladores del análogo moderno aseguran que hicieron no solo un cliente de Windows, sino también un servidor de Windows (aunque en este modo no realicé pruebas: la tarea no requería eso). Pero para alguien esto también puede ser útil.




Introducción


Primero, una breve historia sobre qué es USB / IP. Este es un conjunto de programas que le permiten reenviar un dispositivo USB a través de la red. El dispositivo en sí está conectado al servidor. El cliente está ubicado en otra máquina. Al mismo tiempo, hay una aplicación en la máquina cliente que no está completamente diseñada para funcionar con la red. Quiere un dispositivo USB real. Y recibe información de que este dispositivo está conectado. Se instala un controlador estándar en este dispositivo. En general, el cliente cree que funciona con un dispositivo USB local.

Alguien está lanzando llaves de seguridad. Verificamos la posibilidad de acceso remoto al adaptador JTAG.

El proyecto USB / IP se desarrolló activamente hasta 2013. Entonces la rama de Windows se detuvo. En general, incluso un binario firmado fue lanzadoconductor. Pero estaba bajo Windows 7. La rama de Linux continuó su desarrollo, y este servicio se incorporó al sistema operativo. Como mínimo, definitivamente está integrado en la compilación de Debian. Además, para Linux hay un cliente y un servidor, y para Windows, solo el cliente se creó originalmente. El servidor bajo Windows no se hizo.

Hay un muy buen artículo sobre Habré , que puede usarse como referencia para trabajar con este servicio y como un consejo sobre cómo trabajar con él.

Opción para la versión actual de Windows


Pero no importa cuán bueno sea Windows 7, ya está muerto. Como parte del trabajo en All-Hardware, consideramos varias opciones para resolver uno de los problemas, y solo tuvimos que verificar una serie de alternativas sobre la base de "ajuste - no ajuste". Era imposible pasar muchas horas hombre revisando. Y la alteración del controlador en Windows 10 podría arrastrarse en sí misma. Por lo tanto, se realizó una búsqueda en la red, que trajo usbip-win al proyecto . En el momento de su descubrimiento, la versión nueva tenía fecha del 23 de febrero de 2020, es decir, el proyecto está en vivo. Se puede construir bajo WIN7 y WIN10. Además, a diferencia del proyecto original, no solo se puede construir un cliente de Windows, sino también un servidor de Windows.

Verifiqué, el proyecto está perfectamente ensamblado e instalado, por lo que se trabajó más con él. En archivo readme Hay un enlace a código binario listo para usar para aquellos que no quieren construir por su cuenta.

La parte triste de la comprobación: el lado del servidor


Primero, le diré cómo se realizó la verificación como parte de nuestro proyecto. No terminó muy bien allí. Verificamos el adaptador ST-LINK instalado en el caso del complejo Redd, ya que noté que el complejo usa el sistema operativo Linux del ensamblaje Debian, y este ensamblaje contiene el servicio USB / IP incorporado.

Según el artículo, instale el servicio:

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

El resto del artículo detalla cómo automatizar el proceso de carga de un servicio. Según entiendo Linux, ya he escrito muchas veces. Mal versado. No tengo la costumbre de citar los textos de otras personas con una cara inteligente, sin comprender la esencia. Por lo tanto, una vez más recordaré un enlace a un artículo maravilloso , donde se cuenta todo, y me mostraré lo que hice en cada inicio del sistema operativo (ya que todo era necesario solo para la verificación):

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

El propósito de los dos primeros hechizos anteriores es desconocido para mí, pero sin ellos algunos directorios no se crean, y sin estos directorios no habrá exportación de un puerto USB. Los directorios se crean solo hasta que se reinicia el sistema. Por lo tanto, debe crearlos cada vez. La tercera línea: todo está más claro, comienza el servicio.

Ahora miramos el nombre del 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)
<...>

Resulta que necesitamos un dispositivo y busid igual a 1-5.4.1.3.

Le damos el comando:

sudo usbip bind --busid=1-5.4.1.3

Todo, el servidor está listo para funcionar.

La parte triste del cheque: la parte del cliente


Instalamos el controlador en Windows (hacemos esto solo una vez, luego siempre se instalará). Para hacer esto, ejecute el archivo usbip.exe con el argumento install :

usbip.exe install como administrador.

Ahora veamos si el dispositivo está disponible para nosotros:

usbip.exe list --remote=192.168.10.123

Nos aseguramos de que esté en la lista. Bueno, y conéctalo:

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

Aparece un nuevo dispositivo USB en el administrador de dispositivos, Keil lo ve perfectamente ...

Pero aquí es donde termina lo agradable. Se vierte un pequeño programa en una unidad flash durante aproximadamente un minuto. Los intentos de atravesar las líneas van de 5 a 20 segundos por línea. Esto es inaceptable. Durante una pausa, el tráfico de aproximadamente 50 kilobits por segundo va en ambas direcciones. Va largo y pensativo.

Honestamente, el límite de tiempo me ha llevado a adivinar por qué todo fue tan malo. Sospecho que hay tráfico JTAG corriendo por la red. Y corre en pequeños paquetes en ambas direcciones, de ahí los problemas. Entonces el estudio se completó con el resultado: "No apto para el proyecto".

La parte divertida: preparación


Incluso entonces, se me ocurrió que por el rabillo del ojo vi que en el adaptador CMSIS DAP JTAG, el USB no usa tráfico JTAG puro, sino comandos. El tráfico JTAG ya está formado dentro del adaptador. Hace tiempo que quería comprobarlo, pero no me alcanzaron todas las manos. La transferencia masiva a un sitio remoto lo obligó a hacerlo (surgió un problema). ¿Qué es CMSIS DAP? Este es un adaptador JTAG recomendado por ARM para los controladores Cortex-M. Los códigos fuente para diferentes controladores se publican en GitHub, puede soldar el adaptador en función de cualquiera de ellos. Ahora daré un enlace a un clon del proyecto adaptado para la placa de pruebas de Blue Pill: https://github.com/x893/CMSIS-DAP , pero los motores de búsqueda también pueden mostrar la cuenta oficial de ARM.

Para no gastar una PC completa en el servidor, para la verificación, hice una especie de complejo Yelloww (puramente por el color del plástico del que está hecho el caso):



Raspberry Pi desempeña el papel del servidor con el sistema operativo Raspbian instalado (este es el mismo Debian, lo que significa que existe el servidor requerido ) Una de las píldoras azules actúa como un adaptador CMSIS DAP, la segunda como un dispositivo depurado.

Establecemos y configuramos el servicio de la misma manera. A menos que aquí la lista de dispositivos permitidos para la exportación sea mucho más 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)

Está claro que aquí exportamos e importamos el dispositivo busid = 1-1.4.

Y aquí es específicamente con CMSIS DAP que periódicamente tengo un pequeño problema. En el administrador de dispositivos, veo una molestia:



permítanme recordarles que el artículo está escrito sobre el principio "Mejor no está mal, pero hoy es ideal, pero mañana". Los problemas de trabajo remoto están surgiendo en este momento. Espero que en el futuro previsible ya no sean relevantes. Mientras tanto, son relevantes: muestro cómo omito este problema manualmente. Primero apago el dispositivo:



luego lo enciendo inmediatamente:



y comienza a funcionar sin problemas. En Keil cambiamos el depurador a CMSIS DAP:



Y aquí está:



Cuando se trabaja en una red local, todo vuela. Pero está claro que nadie está interesado en la red local. Traté de reenviar el puerto del dispositivo en casa, y luego iniciar sesión de forma remota en la máquina en el trabajo y enrutar el "firmware" desde allí. La conexión con el proveedor de mi hogar es muy, muy lenta, especialmente, de mí afuera. El controlador parpadea aproximadamente tres veces más lento que cuando está conectado directamente a USB. Rastreo ... Bueno, aproximadamente un segundo por línea, exactamente no más. En general, soportable. Con buenos proveedores, espero que sea mejor.

Conclusión


El proyecto usbip-win es un reemplazo moderno para el proyecto USB / IP. Él vive y se desarrolla. Al mismo tiempo, proporciona no solo la función del cliente para Windows, sino también la función del servidor. Se guarda la compatibilidad con la versión de Linux.

La estabilidad del dispositivo USB remoto fue inesperadamente sorprendente. Estaba seguro de que ocurrirían tiempos de espera. Quizás surjan en algún lugar, pero para los adaptadores JTAG, no hubo una sola falla. Desafortunadamente, no todos los dispositivos USB pueden reenviarse a través de la red debido a la baja velocidad del sistema resultante. Pero en el caso de los adaptadores JTAG, puede considerar cosas alternativas. En particular, CMSIS-DAP en lugar de ST-LINK.

Ambos proyectos revisados ​​(usbip-win y CMSIS-DAP) se pueden descargar desde GitHub en forma de códigos fuente.

Si esto ayuda a alguien a organizar el acceso remoto al equipo, me alegraré. El uso de Raspberry Pi le permitirá colocar equipos en lugares arbitrarios.

All Articles