Configure UART/COM no Linux usando VM Hyper-V Geração 2

Configure UART/COM no Linux usando VM Hyper-V Geração 2

Configurei o Linux Mint x64 no Hyper-V como uma máquina virtual de geração 2 em minha área de trabalho do Windows 10. Gostaria de conectar um conversor USB-> Serial (FT232RL) à VM, para poder programar e depurar hardware incorporado. No Windows o FT232RL aparece como uma "Porta serial USB (COMx)" e está funcionando bem. Quando estou usando o VirtualBox, posso simplesmente conectar ou desconectar a porta COM da VM e tudo funciona bem.

As VMs da geração 2 no Hyper-V não têm as portas COM/pipes nomeados exibidos em suas configurações, ao contrário das VMs da geração 1, portanto, não tenho certeza de como acessar as configurações apropriadas. Existe um artigoaqui(mais detalhes) que mostra o que desejo alcançar, exceto que estou usando o Linux em vez do Windows como meu sistema operacional convidado.

Então, como eu faria para configurar isso? Já dei uma olhada no setserial no Linux, mas até agora não cheguei a uma solução.

Responder1

Então, parece que existem pelo menos três maneiras de fazer isso funcionar, que descobri com o tempo.

A primeira é bastante simples, usando a Área de Trabalho Remota para acessar a máquina virtual em vez do inicializador do Hyper-V. Obviamente, isso exige que o sistema operacional convidado tenha um servidor de área de trabalho remota e que o firewall seja aberto e tenha o endereço IP ao alcance do host. Usando RDP, você pode ir Mostrar Opções -> Recursos Locais/Dispositivos e recursos locais -> Mais -> Selecionar 'Portas'. Em seguida, conecte normalmente.

Esta solução só é boa para VMs da Geração 1, pois não cria um canal nomeado no sistema operacional host. As VMs da geração 1 permitem que o usuário crie um pipe nomeado por meio do menu de configurações das VMs. A segunda solução é usarCOMpipe. Isso envolve o uso das configurações do Hyper-V para configurar um pipe nomeado em uma das portas COM, por exemplo, MySerialPort em COM1 (cria o caminho do pipe nomeado: \.\pipe\MySerialPort). Em seguida, no sistema operacional host, execute um PS administrativo e emita um comando como: COMpipe.exe -b 115200 -c \\.\COM5 -p \\.\pipe\MySerialPortonde COM5 é a porta COM no sistema operacional host que você está tentando usar. Se tudo funcionar, você poderá usar COM1 no sistema operacional convidado e mapeá-lo diretamente para COM5 no host. Por experiência própria, um erro GLE=5 significa que o pipe nomeado não foi criado no sistema operacional convidado.

A terceira solução é muito mais complexa e é descritaaqui(link de backup). Isso envolve construir hub4com e executar com0com (também como administrador) e alguns outros scripts com o projeto hub4com no sistema operacional convidado e host.

Além disso, você pode mapear uma porta COM para um canal nomeado (precisa ser criado por algum aplicativo) usandoDefinir-VMComPorte visualizar os mapeamentos comObter-VMComPort. Isso é necessário para VMs Hyper-V Gen 2, pois as portas COM sãonão visível(consulte a nota nas Perguntas frequentes da Geração 2) nas configurações ao configurar VMs da Geração 2.

informação relacionada