Configurar portas seriais virtuais (emulador de modem nulo Linux) usando tty0tty

9

Eu quero configurar o emulador de porta serial virtual no Linux. Quero que as portas sejam permanentes, para poder usá-las sempre que reiniciar. Tentei usar o socat para esse fim, dessa maneira,

socat -d -d pty,raw,echo=0 pty,raw,echo=0

Porém, muitas vezes recebo problemas de porta ocupada durante o uso desses VSPs (portas seriais virtuais) em meus programas de teste. Além disso, acho difícil criar VSPs permanentes / persistentes. Agora, quero experimentar o tty0tty para meus propósitos. Porém, raramente há documentação e como usar o guia para isso. Alguém pode me esclarecer sobre isso? Por favor, comente, se houver alguma solução para o socat também.

yuva
fonte

Respostas:

13

Instalação

  1. Baixe o pacote tty0tty de uma destas fontes:

  2. Extraia-o

    • tar xf tty0tty-1.2.tgz
  3. Construa o módulo do kernel a partir da fonte fornecida
    • cd tty0tty-1.2/module
    • make
  4. Copie o novo módulo do kernel no diretório de módulos do kernel
    • sudo cp tty0tty.ko /lib/modules/$(uname -r)/kernel/drivers/misc/
  5. Carregue o módulo
    • sudo depmod
    • sudo modprobe tty0tty
    • Você deve ver novas portas seriais em / dev / ( ls /dev/tnt*)
  6. Conceda permissões apropriadas às novas portas seriais
    • sudo chmod 666 /dev/tnt*

Agora você pode acessar as portas seriais como /dev/tnt0(1,2,3,4 etc). Observe que as portas consecutivas estão interconectadas. Por exemplo, / dev / tnt0 e / dev / tnt1 estão conectados como se estivessem usando um cabo direto.

Persistindo na inicialização

edite o arquivo / etc / modules (Debian) ou /etc/modules.conf

nano /etc/modules

e adicione a seguinte linha:

tty0tty

Atenção

Observe que esse método não fará com que o módulo persista nas atualizações do kernel, portanto, se você atualizar seu kernel, certifique-se de criar o tty0tty novamente e repita o processo.

Se você não mover o módulo em todas as atualizações do kernel systemctl --failed, o serviço retornará systemd-modules-load.service" failed". Também em journalctl -xe | grep "Failed to find".

Ruraj
fonte
11
Obrigado companheiro, que funcionou muito bem. Não foi possível encontrar isso em nenhum outro lugar.
yuva
11
:) feliz que eu poderia ajudar!
Ruraj 23/02
Será que tty0ttytambém suportam Mac OS?
Foad 7/03/19
Você pode construí-lo e carregar o módulo do kernel usando kextutil, mas eu nunca tentei!
Ruraj 6/08/19
Explicação maravilhosa. Cada ponto é agradável e arrumado. Sempre feliz em ver essas respostas
master_clown