VirtualBox – Compartilhar Porta Serial do Windows para o Linux

Opa, como dito no titulo do post é isso mesmo como usar porta serial do Windows (COM1, Com2, ComX…) no Linux usando o Virtualbox, o cenário é o seguinte:

Computador com Windows 7 Home Premium 64bits com VirtualBox instalado e uma das VM (Ubuntu 11.04) é uma cobaia de vários testes, estou implementando um monitor de temperatura com CI LM35 e Arduino já fiz a interface Delphi (Object-Pascal) e comecei a implementar a parte web também, terminando irei publicar todo o material aqui no blog, mas para não ter que levantar um web server no Windows 7 e na minha VM já tem Apache e todas lib e serviços instalados e configurados resolvi configurar a parte web na VM.

Foi ae que quase arranquei os cabelos, como usar a porta serial do Windows na VM Linux, na teoria configurei no Portas Seriais e em Porta1 e vamos ver os problemas e soluções que encontrei:

Habilitei a Porta1 e em numero da porta tem COM1, COM2, COM3 e COMXX sendo que passou da COM3 voce tem que especificar IRQ e o End. de I/O, modo da porta Desconectada até o momento não sabia o porque desta opções nem das demais e Porta/Caminho do Arquivo que fica desabilitado para edição, bom nesta guia eu sabia que COM1 é a minha serial onboard que eu não estou usando e o meu dispositivo no caso o Arduino UNO que é um USB CDC esta usando a COM3 então no meu caso marquei como COM3.

Lembrando que estas configurações são as configurações do hospedeiro para a VM, ok?
Iniciei minha VM normalmente fui ver se tinha reconhecido a serial e vale lembrar que no Linux não procuramos com COM e sim ttySX, assim:

Dispositvo Serial no Linux Dispositivo Serial no Windows
/dev/ttyS0 COM1
/dev/ttyS1 COM2
/dev/ttyS2 COM3
/dev/ttyS3 COM4

Então agora que sabemos como identificar portais seriais no Linux vamos enfrente.

Utilizo dois programas para trabalhar com porta serial no Linux configurar e até mesmo testar algo de forma rapido sem ter que configurar muita coisa, que é o setserial e o ttylog, vamos instalar os mesmos:

root@linuxVM:~# apt-get install setserial ttylog

Maravilha, agora o próximo passo a fazer e que eu segui foi achar o /dev/ttyS da Serial certo? Vamos analisar:

root@linuxVM:~# setserial /dev/ttyS0
/dev/ttyS0, UART: unknown, Port: 0x03f8, IRQ: 4
root@linuxVM:~# setserial /dev/ttyS1
/dev/ttyS1, UART: unknown, Port: 0x02f8, IRQ: 3
root@linuxVM:~# setserial /dev/ttyS2
/dev/ttyS2, UART: 16550A, Port: 0x03e8, IRQ: 4
root@linuxVM:~# setserial /dev/ttyS3
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3
root@linuxVM:~#

E como era esperado e observando na nossa tabela acima a COM3 que esta meu dispositivo deu sinal de vida no /dev/ttyS2,  usando o ttylog fui escutar esta porta no Linux para não ter que usar HyperTerminal, minicom ou escrever código o ttylog é uma mão na roda já abre a porta serial e fica esperando algo, como é um sensor de temperatura ele teria que me passar os valores em Celsius ou seja apenas números. E olhe a saída que obtive:

root@linuxVM:~# ttylog -b 9600 -d /dev/ttyS2
^C
root@linuxVM:~#

Dei Ctrl + C para parar porque algo estava errado, ttylog é simples assim pessoal passando apenas o valor de BaudRate e o dispositivo da porta serial e ele já era pra dar uns dump na tela.

Ae pensando lembrei aquele “Desconectada” la nas configurações da VM no VirtualBox e voltei la.

Então o que compreendi foi “Desconectada” ele reconhece a porta serial no outro SO mas você não faz nada, li isso no help deles, “Pipe no Hospedeiro” bem confuso no help mas pelo que entendi seria uma emulação de uma serial usando o vmwaregateway.exe da VM Ware sim exato esta no Help deles para você baixar este programa no Windows hehe enfim continuemos já que não era essa a minha idéia ae temos “Dispositivo no Hospedeiro” seria um hardware instalado no Hospedeiro e eu queira usar na VM beleza, fecho é esse e tem mais uma opção que é “Arquivo de saida” pelo que entendi é semelhante ao Pipe mas sei la a diferença não achei no Help para Linux > Windows.

Então selecionei “Dispositivo no Hospedeiro e ele me forçou a preencher o campo “Porta/ Caminho do dispositivo” e nada do help e no Google quase nada também, então vamos testar. Fui pela logica um nome “Ah, ele quer saber o nome do /dev que estara na VM” então coloquei /dev/ttyS2 ele aceitou.

Iniciando a VM a seguinte tela de erro surgiu:

Bom, mudei o nome de diversas maneiras até que sem querer pensei vou por COM3 pra ver o erro, ficando assim a configuração:

E era isso, a VM iniciou normal, ou seja o caminho se for arquivo ou Pipe e Porta para COM é a porta serial para a VM poder usar.

Esperei a VM iniciar por completo novamente rodei o setserial e novamente obtive como minha serial sendo /dev/ttyS2 e agora novamente rodei o ttylog, vamos verificar a saída:

root@linuxVM:~# ttylog -b 9600 -d /dev/ttyS2
18.08
18.08
18.08
18.08
17.60
18.08
18.57
19.53
19.01
19.55
19.06
^C
root@linuxVM:~#

Ae realizei os demais testes agora com meu web server e a comunicação funcionou perfeitamente.

OBS: No meu caso depois configurar corretamente o VirtualBox não tive problemas, lembrando que meu VirtualBox 4.1.6 r74713 e funcionou tudo a versão mais recente até o momento é 4.1.18 na empresa tivemos sérios problemas com versões anterior a 4.1 então atualize caso tenha algum problema em iniciar a VM, e sobre as portas seriais já no ambiente Linux caso tenha algum problema você pode usar o setserial para configura-las no Linux usando a seguinte sintaxe:

root@linuxVM:~# setserial /dev/ttyS2 auto_irq skip_test autoconfig
root@linuxVM:~#

Até a próxima!

Share Button

CC BY-NC-SA 4.0 VirtualBox – Compartilhar Porta Serial do Windows para o Linux by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.