Hacer que una computadora actúe como un dispositivo USB virtual para otros equipos

18

Algunas aplicaciones simulan una unidad USB o CD Rom virtual como si una unidad USB estuviera conectada a la computadora.

¿Existe alguna configuración o aplicación que proporcione una unidad USB virtual, no para el sistema operativo en sí, sino para otros equipos que aceptan la unidad USB, a través de un puerto USB?

Así que tendré un disco duro virtual (por ejemplo, un *.vdiarchivo) en la computadora, que está conectado, a través de una toma USB, como unidad USB a algún otro equipo (por ejemplo, un teléfono celular o una computadora portátil).

usuario62511
fuente

Respuestas:

12

Debería agregar un dispositivo USB / controlador periférico a la computadora, en lugar del controlador host USB con el que suelen venir.

Algo así: https://www.maximintegrated.com/en/products/interface/controllers-expanders/MAX3420E.html

Desafortunadamente, tendrías que encontrar una manera de conectarlo a tu placa base. Técnicamente, se puede hacer. Prácticamente, tendría que rediseñar la placa base para incluirla. Es posible que tenga la suerte de encontrar un bus SPI o I2C expuesto en algún lugar de su placa base para permitirle agregarlo, pero generalmente están conectados directamente a lo que sea que estén utilizando, a menos que esté usando una placa de desarrollo o computadora de a bordo con GPIO expuesto y otros puertos como Raspberry Pi.

La otra opción sería un controlador USB On-the-Go. Las placas base diseñadas para dispositivos integrados y portátiles tienden a tener un controlador USB OTG (On-the-go), que puede funcionar como un host o controlador de dispositivo. Por ejemplo, el Raspberry Pi mencionado anteriormente tiene un Controlador On-the-Go, pero en todos los modelos, excepto el Pi Zero, que se vuelve a conectar a un puerto host o un concentrador USB a bordo que niega el uso de la funcionalidad del dispositivo USB. El BeagleBone Black tiene un puerto OTG.

Sin embargo, eso no es todo: una vez que tenga el hardware, también necesitará el software. Linux tiene algunos controladores útiles de dispositivos USB del núcleo ("dispositivo USB" es otro término para periférico / dispositivo USB) como g_serial. y g_ethernet que le permiten conectar su dispositivo a otra computadora y ser visible como un dispositivo serial o ethernet sobre USB (existen otros para exponer un dispositivo como almacenamiento masivo, que le permiten usar un archivo como dispositivo de bloque y exponer la computadora como un dispositivo de almacenamiento masivo). El BeagleBone Black tiende a venir con esto habilitado de forma predeterminada, por lo que simplemente puede conectarlo a su PC a través de USB y verlo como un dispositivo en red, y creo que también aparece como un dispositivo de almacenamiento masivo mediante el uso de un controlador compuesto (que permite aparecerá como múltiples tipos de dispositivos USB en una sola conexión. El Pi Zero puede usarlos , pero no lo hace de manera predeterminada. Para Windows u otros sistemas operativos, probablemente tenga que escribir ese controlador de dispositivo usted mismo.

Entonces, teóricamente, puedes hacerlo. Puede derribar su PC de escritorio, tratar de encontrar un bus compatible no utilizado en la placa base en algún lugar (probablemente algunos pines no utilizados en un controlador IC), o una forma de extender un bus interno I2C o SPI, o algo que pueda arrancar y reemplace y suelde un chip USB OTG o controlador de dispositivo en él. Luego puede instalar Linux y usar un controlador de gadget, o escribir el suyo propio para otro sistema operativo. Prácticamente, a menos que sea un ingeniero electrónico de primer nivel, no podrá hacerlo. Al menos, no hasta que alguien salga con ese elusivo adaptador con un dispositivo o puerto OTG que se conecta a un puerto USB (en teoría, eso podría hacerse con un microcontrolador como Arduino conectado a un par de circuitos integrados de controlador de dispositivo USB), y escribe los controladores para ejecutarlo.

Matt Thomason
fuente
2
gran explicación, ¿podría actualizar la respuesta si (con su conocimiento) ve algo nuevo con respecto a su oración "hasta que alguien salga con un adaptador exclusivo ...". Hay computadoras portátiles con usb-c en 2018, ¿podrían ser una solución?
Asain Kujovic
8

El USB es asimétrico: un lado es un host, el otro lado es un dispositivo periférico. No puede hacer que un dispositivo periférico actúe como host o viceversa. Es posible que un puerto USB pueda actuar como cualquier lado; Esto se llama USB on-the-go y está presente en algunos teléfonos móviles y tabletas. Los puertos son puertos de tipo dispositivo físico, no puertos de tipo host. Nunca he visto una PC con un puerto de dispositivo. Esto requiere electrónica en el controlador, no es suficiente hacer un cable que se ajuste a ambos extremos.

Entonces, no, no podrá convertir una PC en un dispositivo USB.

Si desea usar una computadora como dispositivo de almacenamiento USB, puede usar un teléfono móvil o tableta con una conexión USB en lugar de usar una PC.

Gilles 'SO- deja de ser malvado'
fuente
¿Puede explicar un poco más, cómo usar un teléfono móvil podría ayudarme a convertir mi PC en un dispositivo / host de almacenamiento USB, que podría conectar a otra computadora, televisor o dispositivo? Creo que me estoy perdiendo este punto, aunque creo que tengo un conocimiento justo sobre USB OTG.
trejder
@trejder Como escribí, nunca he visto una PC con un puerto de dispositivo ("PC", excepto las tabletas x86).
Gilles 'SO- deja de ser malvado'
Sí, pero me refiero a su última oración: " Si desea convertir una computadora en un dispositivo de almacenamiento USB, puede usar un teléfono móvil o tableta con una conexión USB ". Tal vez me falta algo, pero lo entiendo como "Puedes usar un teléfono móvil o una tableta para convertir la computadora en un dispositivo de almacenamiento USB". Si es así, entonces la pregunta es: ¿cómo?
trejder
1
@trejder Ah, "computadora" en esa oración no es "PC", es "computadora". Un teléfono / tableta es un tipo diferente de computadora que una PC. ¿Eso es lo que te preocupa?
Gilles 'SO- deja de ser malvado'
1
@trejder No. Por lo general, su mejor opción es establecer una conexión de red de una forma u otra. Puede usar Firewire como conexión de red entre dos PC con un puerto Firewire, pero muchas PC no tienen una. La mayoría de las PC tienen un puerto Ethernet, puede conectar dos PC con un cable Ethernet (las PC muy antiguas requieren un cable cruzado, pero las modernas pueden usar un cable común). Para hacer que una PC sirva como dispositivo de almacenamiento para un dispositivo móvil, normalmente necesita conectar la PC a wifi de alguna manera.
Gilles 'SO- deja de ser malvado'
2

Puede considerar usar uno de los "cables puente USB-USB" especiales, a veces llamados "cables de red USB". Como uno mencionado en estos artículos:

Le permiten transferir archivos entre dos PC. He estado usando este tipo de cables hace más de diez años (en tiempos de Windows XP) y en esos tiempos todos los cables disponibles en el mercado requerían un controlador y software especiales. Le permiten transferir archivos solo a través de un controlador de archivos especial, que se envía junto con los controladores de cable en un disco de instalación y, por lo tanto, no permite que una PC actúe ante otra como un dispositivo externo USB puro.

No estoy seguro, si algo ha cambiado desde entonces y si las nuevas soluciones le permiten solo transferir archivos usando un software especial y, si puede obligar a una PC a actuar como un dispositivo externo a otra PC.

trejder
fuente
2

Como explica Matt Thomson en la respuesta , no es posible hacer que un puerto USB físico de una computadora PC actúe como un dispositivo esclavo USB, ya que falta el controlador esclavo USB.

Eso significa que si tenemos una placa adaptadora que puede proporcionar USB en modo esclavo (como Raspberry Pi Zero), tenemos que conectarlo a su PC host por un canal diferente, como Ethernet por cable. Tengo dos propuestas diferentes sobre qué protocolo podría ejecutar a través de esa conexión Ethernet:

(1) Exponga el puerto USB sobre la red IP.

Use el software para exponer el puerto USB en modo esclavo de Raspberry Pi Zero como un dispositivo USB virtual a su PC. El proyecto USB / IP proporciona esto, mediante un controlador que puede transportar USB a través de redes IP. Aquí hay un ejemplo del uso de USB / IP para proporcionar un dispositivo USB simulado a una computadora, que sería su PC aquí.

Lo que no sé en esta solución propuesta es si el software USB / IP ya puede exponer un puerto esclavo USB a través de una red IP, o solo un puerto host USB de forma normal.

Pero incluso si eso funciona, aún tiene que configurar o adaptar los controladores de dispositivo en su PC de tal manera que (1) acepten la conexión USB / IP entrante como una conexión USB, (2) proporcionen el modo esclavo USB en lugar de Modo host USB, (3) simula un dispositivo de almacenamiento masivo USB al servir los datos desde la ubicación asignada (su .vdiarchivo).

En general, esa es una forma compleja de hacerlo.

(2) Exponga el archivo a través de la red IP.

Esta es una forma mucho más simple de cómo utilizar la conexión Ethernet al Raspberry Pi Zero: en el Raspberry Pi Zero, monte los datos almacenados en su PC a través de un sistema de archivos de red. Estos archivos aparecen lógicamente como parte del sistema de archivos de Pi Zero, y puede servirlos con el controlador de dispositivo USB de Linux para que Raspberry Pi parezca un dispositivo de almacenamiento masivo USB para dispositivos conectados.

Tanius
fuente