Configure UART/COM en Linux usando la máquina virtual Hyper-V Generación 2

Configure UART/COM en Linux usando la máquina virtual Hyper-V Generación 2

Configuré Linux Mint x64 en Hyper-V como una máquina virtual de generación 2 en mi escritorio de Windows 10. Me gustaría conectar un convertidor USB->Serial (FT232RL) a la VM, para poder programar y depurar el hardware integrado. En Windows, el FT232RL aparece como "Puerto serie USB (COMx)" y funciona bien. Cuando uso VirtualBox, puedo conectar o desconectar el puerto COM de la VM y todo funciona bien.

Las máquinas virtuales de generación 2 en Hyper-V no muestran los puertos COM/canalizaciones con nombre en su configuración, a diferencia de las máquinas virtuales de generación 1, por lo que no estoy seguro de cómo acceder a la configuración adecuada. hay un articuloaquí(más detalles) que muestra lo que quiero lograr, excepto que estoy usando Linux en lugar de Windows como sistema operativo invitado.

Entonces, ¿cómo haría para configurar esto? Ya eché un vistazo a setserial en Linux, pero hasta ahora no he llegado a una solución.

Respuesta1

Entonces, parece que hay al menos tres maneras de hacer que esto funcione, lo cual he descubierto con el tiempo.

El primero es bastante sencillo: utilizar Escritorio remoto para acceder a la máquina virtual en lugar del iniciador Hyper-V. Por supuesto, esto requiere que el sistema operativo invitado tenga un servidor de escritorio remoto y que el firewall se abra y tenga la dirección IP dentro del rango del host. Usando RDP, puede ir a Mostrar opciones -> Recursos locales/Dispositivos y recursos locales -> Más -> Seleccionar 'Puertos'. Luego conéctese normalmente.

Esta solución solo es válida para máquinas virtuales de generación 1, ya que no crea una canalización con nombre en el sistema operativo host. Las máquinas virtuales Gen 1 permiten al usuario crear una canalización con nombre a través del menú de configuración de las máquinas virtuales. La segunda solución es utilizar.tubo. Esto implica el uso de la configuración de Hyper-V para configurar una canalización con nombre en uno de los puertos COM, por ejemplo, MySerialPort en COM1 (crea una ruta de canalización con nombre: \.\pipe\MySerialPort). Luego, en el sistema operativo host, ejecute un administrador PS y emita un comando como: COMpipe.exe -b 115200 -c \\.\COM5 -p \\.\pipe\MySerialPortdonde COM5 es el puerto COM en el sistema operativo host que está intentando utilizar. Si todo funciona, debería poder usar COM1 en el sistema operativo invitado y asignarlo directamente a COM5 en el host. Por experiencia, un error de GLE=5 significa que la canalización con nombre no se crea en el sistema operativo invitado.

La tercera solución es mucho más compleja y se describeaquí(enlace de respaldo). Esto implica construir hub4com y ejecutar com0com (también como administrador) y algunos otros scripts con el proyecto hub4com tanto en el sistema operativo invitado como en el host.

Además, puede asignar un puerto COM a una tubería con nombre (debe ser creada por alguna aplicación) usandoEstablecer-VMComPorty ver las asignaciones conObtener-VMComPort. Esto es necesario para máquinas virtuales Hyper-V Gen 2, ya que los puertos COM sonno visible(consulte la nota sobre las preguntas frecuentes de Generación 2) en la configuración al configurar máquinas virtuales de Generación 2.

información relacionada