Configurar puertos seriales virtuales (emulador de módem nulo de Linux) usando tty0tty

9

Quiero configurar el emulador de puerto serie virtual en Linux. Quiero que los puertos sean permanentes, para poder usarlos cada vez que reinicie. Intenté usar socat para ese propósito, de esta manera,

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

Pero a menudo tengo problemas de puertos ocupados durante el uso de estos VSP (puertos serie virtuales) en mis programas de prueba. Además, me resulta difícil crear VSP permanentes / persistentes. Ahora quiero probar tty0tty para mis propósitos. Pero, rara vez hay documentación y cómo usar la guía para eso. ¿Alguien puede iluminarme sobre esto? Comente, si hay alguna solución para socat también.

Yuva
fuente

Respuestas:

13

Instalación

  1. Descargue el paquete tty0tty de una de estas fuentes:

  2. Extraelo

    • tar xf tty0tty-1.2.tgz
  3. Construya el módulo del núcleo a partir de la fuente proporcionada
    • cd tty0tty-1.2/module
    • make
  4. Copie el nuevo módulo del núcleo en el directorio de módulos del núcleo
    • sudo cp tty0tty.ko /lib/modules/$(uname -r)/kernel/drivers/misc/
  5. Cargar el módulo
    • sudo depmod
    • sudo modprobe tty0tty
    • Debería ver nuevos puertos seriales en / dev / ( ls /dev/tnt*)
  6. Otorgue los permisos apropiados a los nuevos puertos seriales.
    • sudo chmod 666 /dev/tnt*

Ahora puede acceder a los puertos seriales como /dev/tnt0(1,2,3,4, etc.) Tenga en cuenta que los puertos consecutivos están interconectados. Por ejemplo, / dev / tnt0 y / dev / tnt1 están conectados como si usaran un cable directo.

Persistiendo a través del arranque

edite el archivo / etc / modules (Debian) o /etc/modules.conf

nano /etc/modules

y agregue la siguiente línea:

tty0tty

Advertencia

Tenga en cuenta que este método no hará que el módulo persista durante las actualizaciones del núcleo, por lo que si alguna vez actualiza su núcleo, asegúrese de construir tty0tty nuevamente y repita el proceso.

Si no mueve el módulo en cada actualización del núcleo systemctl --failed, devolverá el servicio systemd-modules-load.servicefinalizado " failed". También en journalctl -xe | grep "Failed to find".

Ruraj
fuente
1
Gracias amigo, eso funcionó bastante bien. No podía encontrar esto en ningún otro lado.
Yuva
1
:) me alegro de poder ayudar!
Ruraj
¿ tty0ttyTambién es compatible con Mac OS?
Foad
Es posible que pueda construirlo y cargar el módulo del kernel usando kextutil, ¡pero nunca lo he probado!
Ruraj
Hermosa explicación. Cada punto es agradable y ordenado. Siempre me alegro de ver esas respuestas
master_clown