Capítulo 12. Comunicaciones serie

Esta sección responde las preguntas más frecuentes sobre las comunicaciones serie con FreeBSD. PPP y SLIP se tratan en la sección Networking.

12.1. ?Cómo se si FreeBSD ha encontrado mis puertos serie?
12.2. ?Cómo se si FreeBSD ha encontrado mi módem interno?
12.3. He actualizado a 2.0.5 y mi tty0X no existen!
12.4. ?Cómo accedo a los puertos serie en FreeBSD?
12.5. ?Cómo activo el soporte de tarjetas serie multipuerto?
12.6. ?Puede manejar FreeBSD tarjetas multipuerto compartiendo irq?
12.7. ?Puedo cambiar los parámetros serie por defecto para un puerto?
12.8. ?Cómo puedo activar logins de entrada en mi módem?
12.9. ?Cómo puedo conectar un dumb terminal a un FreeBSD?
12.10. ?Porqué no puedo ejecutar tip o cu?
12.11. Mi módem hayes no está soportado. ?Que puedo hacer?
12.12. ?Cómo puedo introducir estos comandos AT?
12.13. El símbolo @ no funciona correctamente!
12.14. ?Cómo puedo llamar desde la línea de comandos?
12.15. ?Tengo que teclear la velocidad cada vez que hago esto?
12.16. Accedo a diferentes hosts a través de un servidor de terminales.
12.17. ?Puede tip intentar más de una línea para cada lugar?
12.18. ?Porqué tengo que teclea CTRL+P dos veces para enviar CTRL+P una vez?
12.19. De repente, todo lo que tecleo es en mayúsculas
12.20. ?Cómo puedo hacer transferecia de archivos con tip?
12.21. ?Cómo puedo usar zmodem con tip?
12.22. FreeBSD parece que no puede encontrar mis puertos series aún cuando la configuración es correcta.

12.1.

?Cómo se si FreeBSD ha encontrado mis puertos serie?

Cuando el kernel de FreeBSD arranca, testeará los puertos serie del sistema que estén configurados en el kernel. Puedes estar atento a los mensajes de la consola o ejecutar el comando:

        dmesg | grep sio
        

una vez el sistema esté en funcionamiento.

Aquí tienes un ejemplo del resultado de la ejecución del comando:

        sio0 at 0x3f8-0x3ff irq 4 on isa
        sio0: type 16550A
        sio1 at 0x2f8-0x2ff irq 3 on isa
        sio1: type 16550A
        

Esto muestra dos puertos serie. El primero en la irq 4 usando la dirección 0x3f8, y tiene una UART 16550A. El segundo usa el mismo tipo de chip pero está en la irq 3 y usa la dirección 0x2f8. Los módems internos son tratados como puertos serie, exceptuando que siempre tienen un módem adjuntado al puerto.

El kernel GENERIC incluye soporte para dos puertos serie usando la misma irq y dirección que en el ejemplo anterior. Si estas opciones no son correctar para tu sistema, o si has añadido módems internos o tienes más puertos serie de los que están configurados en el kernel, solo tienes que reconfigurar el kernel. Mira en la sección about building a kernel para más detalles.

12.2.

?Cómo se si FreeBSD ha encontrado mi módem interno?

Respondido en la sección anterior.

12.3.

He actualizado a 2.0.5 y mi tty0X no existen!

No te preocupes, han sido integrados en los dispositivos ttydX. Tendrás que modificar algunos archivos antiguos de configuración.

12.4.

?Cómo accedo a los puertos serie en FreeBSD?

El tercer puerto serie, sio2 (conocido como COM3 en DOS), está en /dev/cuaa2 para dispositivos de salida (dial-out) y en /dev/ttyd2 para dispositivos de entrada (dial-in). Cuál es la diferencia entre estas dos clases de dispositivos?.

Usas los ttydX para los entrantes. Al abrir /dev/ttydX en "blocking mode", un proceso esperará para que el dispositivo cuaaX correspondiente se vuelva inactivo. Cuando abres un dispositivo cuaaX, se asegura de que el puerto serie no está en uso por un dispositivo ttydX. Si el puerto está disponible, se lo "roba" al dispositivo ttydX. Al mismo tiempo, el dispositivo cuaaXX no se preocupa de la detección de portadora. Con este esquema, y un módem en respuesta automática, puedes recibir usuarios remotos y puedes hacer conexiones externas con el mismo módem, mientras el sistema se preocupa de evitar los posible conflictos.

12.5.

?Cómo activo el soporte de tarjetas serie multipuerto?

Otra vez, en la sección de configuración del kernel tienes la información. Para una tarjeta multipuerto, pon una línea sio para cada puerto serie de la tarjeta en el archivo de configuración del kernel. Especifica la irq y vector solo en una de las líneas. Todos los puertos de la tarjeta compartirán la misma irq. Por consistencia, usa el último puerto serie para especificar la irq. De la misma manera, especifica la opción COM_MULTIPORT.

El siguiente ejemplo es para una tarjeta AST 4-port en la irq 7:

        options "COM_MULTIPORT"
        device sio4 at isa? port 0x2a0 tty flags 0x781
        device sio5 at isa? port 0x2a8 tty flags 0x781
        device sio6 at isa? port 0x2b0 tty flags 0x781
        device sio7 at isa? port 0x2b8 tty flags 0x781 irq 7 vector siointr
        

Los flags indican que el puerto master tiene un número menor de 7 (0x700), los diagnósticos están activados durante el testeo (0x080), y los puertos comparten una irq (0x001).

12.6.

?Puede manejar FreeBSD tarjetas multipuerto compartiendo irq?

Todavía no. Tendrás que usar una irq diferente para cada tarjeta.

12.7.

?Puedo cambiar los parámetros serie por defecto para un puerto?

El dispositivo ttydX (o cuaaX) es el que querrás abrir para tus aplicaciones. Cuando un proceso abre el dispositivo, tendrá una serie de configuraciones I/O por defecto. Puedes ver estas configuraciones con el comando:

        stty -a -f /dev/ttyd1
        

Cuando le cambias la configuración a este dispositivo, este cambio se mantiene hasta que el dispositivo se cierra. Cuando se reabre, vuelve a la configuración por defecto. Para hacer cambios sobre la configuración por defecto, puedes abrir y ajustar las opciones del "estado inicial" del dispositivo. Por ejemplo, para poner el dispositivo tty5 en modo CLOCAL, 8 bits, y contro del flujo XON/XOFF, haz

        stty -f /dev/ttyid5 clocal cs8 ixon ixoff
        

Un buen lugar para hacer esto es en /etc/rc.serial. Ahora, una aplicación tendrá esta configuración por defecto cuando abra el puerto ttyd5.

También puedes prevenir o limitar ciertos cambios que pretenda hacer una aplicación. Para ello, ajusta el "lock state" del dispostivo. Por ejemplo, para bloquear la velocidad del puerto ttyd5 a 57600 bps, haz:

        stty -f /dev/ttyld5 57600
        

Ahora, una aplicación que abre ttyd5 e intenta cambiar la velocidad del puerto no podrá hacerlo.

Naturalmente, deberías hacer que el estado inicial y el estado de bloqueo sean solo de escritura para el usuario root. El script MAKEDEV NO hace esto cuando crea el dispositivo.

12.8.

?Cómo puedo activar logins de entrada en mi módem?

Quieres hacerte proveedor de Internet, eh?. Primero, necesitarás uno o más módems que puedan responder automáticamente. Tu módem necesitará activar el carrier-detect sólo cuando detecte una portadora y no tenerla activada continuamente. Necesitará cortar la comunicación y resetearse él mismo cuando la línea DTR pase de on a off. Probablemente usaría RTS/CTS para el control de flujo. Finalmente, debe usar una velocidad constante entre el computador y él mismo, pero debería negociar la velocidad entre él mismo y el módem remoto.

Para muchos módems compatibles Hayes, este comando creará estas configuraciones y las grabará en la memoria no volátil:

        AT &C1 &D3 &K3 &Q6 S0=1 &W
        

Mira la sección enviar comandos AT para saber como enviar estas configuraciones al módem sin necesidad de un programa terminal de DOS.

A continuación, añade una línea en el archivo /etc/ttys para el módem. Este archivo lista todos los puertos en los que el sistema operativo esperará los logins. La línea sería como esta:

        ttyd1 "/usr/libexec/getty std.57600" dialup on insecure
        

Esta línea indica que el segundo puerto serie /dev/ttyd1 tiene un módem conectado, la velocidad es de 57600 bps y sin paridad (std.57600. El tipo de terminal para este puerto es "dialup". El puerto está "on" y es inseguro (lo que significa que los logins como root no son permitidos).

Muchos usuarios, ponen un sus archivos .profile o .login un prompt para el tipo de terminal. El ejemplo muestra el puerto como inseguro. Para ser root en ese puerto, hacer el login como un usuario normal, y ejecutar el comando su. Si en lugar de inseguro, el terminal es seguro (secure), puedes hacer login como root directamente.

Despues de modificar el archivo /etc/ttys, necesitas lanzar una señal HUP al proceso init:

        kill -HUP 1
        

Esto fuerza al proceso init a releer el archivo /etc/ttys. El proceso init arrancará los procesos getty en todos los puertos configurados como "on". Puedes ver si los logins están disponibles en los puertos tecleando:

        ps -ax | grep '[t]tyd1'
        

deberías ver algo como:

        747 ??  I      0:00.04 /usr/libexec/getty std.57600 ttyd1
        

12.9.

?Cómo puedo conectar un dumb terminal a un FreeBSD?

Si estás usando otro computador como terminal en tu sistema FreeBSD, usa un cable null módem entre los dos puertos serie. Si ya estás usando un terminal, mira en las instrucciones del mismo.

A continuación, modifica el archivo /etc/ttys Por ejemplo, si estás instalando un terminal WYSE-50 en el quinto puerto serie, usa una línea como esta:

        ttyd4 "/usr/libexec/getty std.38400" wyse50 on secure
        

Este ejemplo muestra que el puerto /dev/ttyd4 tiene un terminal Wyse50 conectado a 38400 bps sin paridad y los logins de root son permitidos.

12.10.

?Porqué no puedo ejecutar tip o cu?

En tu sistema, los programas tip y cu son probablemente ejecutables solo por uucp y el grupo dialer. Puedes usar el grupo dialer para controlar quien tiene acceso al módem o sistemas remotos. Sólo tienes que añadirte tu mismo al grupo dialer.

Alternativamente, puedes dejar que todos los usuarios de tu sistema ejecuten tip y cu tecleando:

        # chmod 4511 /usr/bin/cu
        # chmod 4511 /usr/bin/tip
        

12.11.

Mi módem hayes no está soportado. ?Que puedo hacer?

Actualmente, el man de tip está anticuado. Hay un dialer Hayes genérico. Solo usa ``at=hayes'' en tu archivo /etc/remote.

El driver Hayes no es tan desarrollado como para reconocer algunas de las características avanzadas de los módems modernos, mensajes como BUSY, NO DIALTONE o CONNECT 115200 lo pueden confundir. Deberías anular estos mensajes cuando uses tip (utilizando la cadena ATX0&W).

También, el timeout de llamada para tip está en 60 segundos. Tu módem debería usar algo menor, o tip puede pensar que hay un problema de comunicación. Intenta con ATS7=45&W.

12.12.

?Cómo puedo introducir estos comandos AT?

Haz lo que se llama una entrada directa en el archivo /etc/remote. Por ejemplo, si tu módem está conectado al primer puerto serie, /dev/cuaa0, escribe la siguiente línea:

        cuaa0:dv=/dev/cuaa0:br#19200:pa=none
        

Usa la velocidad más alta que soporte tu módem en la sección br. A continuación teclea tip cuaa0 y estarás conectado al módem.

Si no existe el dispositivo /dev/cuaa0 en tu sistema , teclea lo siguiente:

        # cd /dev
        # ./MAKEDEV cuaa0
        

O usa el comando cu como root con los siguientes parámetros:

        # cu -l``line'' -s``speed''
        

con line siendo el puerto serie (por ejemplo /dev/cuaa0>) y speed siendo la velocidad (por ejemplo 57600. Cuando termines de entrar los comandos AT, pulsa la tecla . para salir.

12.13.

El símbolo @ no funciona correctamente!

El símbolo @ en la opción de números de teléfono indica a tip que busque en el archivo phone(5) un número de teléfono determinado. Pero el símbolo es también un carácter especial en otros archivos y opciones como /etc/remote. Pon una contrabarra junto al carácter:

        pn=\@
        

12.14.

?Cómo puedo llamar desde la línea de comandos?

Pon lo que se llama una entrada genérica en el archivo /etc/remote. Por ejemplo:

        tip115200|Dial any phone number at 115200 bps:\
        :dv=/dev/cuaa0:br#115200:at=hayes:pa=none:du:
        tip57600|Dial any phone number at 57600 bps:\
        :dv=/dev/cuaa0:br#57600:at=hayes:pa=none:du:
        

Entonces puedes hacer cosas como tip -115200 5551234. Si prefieres usar cu antes que tip, usa una entrada genérica de cu:

        cu115200|Use cu to dial any number at 115200bps:\
        :dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du:
        

y teclea ``cu 5551234 -s 115200''.

12.15.

?Tengo que teclear la velocidad cada vez que hago esto?

Pon una entrada para tip1200 o cu1200, pero puedes usar la velocidad que mejor se amolde a tus necesidades. tip piensa que una buena velocidad por defecto es 1200 bps ya que busca una entrada tip1200. No tienes por que usar 1200 bps.

12.16.

Accedo a diferentes hosts a través de un servidor de terminales.

En lugar de esperar a que estés conectado y teclear CONNECT <host> cada vez, usa la opción cm de tip. Por ejemplo, estas entradas en el archivo /etc/remote:

        pain|pain.deep13.com|Forrester's machine:\
        :cm=CONNECT pain\n:tc=deep13:
        muffin|muffin.deep13.com|Frank's machine:\
        :cm=CONNECT muffin\n:tc=deep13:
        deep13:Gizmonics Institute terminal server:\
        :dv=/dev/cua02:br#38400:at=hayes:du:pa=none:pn=5551234:
        

Esto hará que puedas teclear tip pain o tip muffin para conectarte a las máquinas pain o muffin.

12.17.

?Puede tip intentar más de una línea para cada lugar?

Este es un problema habitual en universidades con diferentes líneas de módem y unos cientos de usuarios intentado usarlas...

Haz una entrada para tu universidad en el archivo /etc/remote y usa \@ para la opción pn:

        big-university:\
        :pn=\@:tc=dialout
        dialout:\
        :dv=/dev/cuaa3:br#9600:at=courier:du:pa=none:
        

Entonces, lista los números de teléfono de la universidad en el archivo /etc/phones:

        big-university 5551111
        big-university 5551112
        big-university 5551113
        big-university 5551114
        

tip intentará cada uno de estos números en el orden en el que estén listados. Si quieres que se realicen reintentos, ejecuta tip en una bucle while.

12.18.

?Porqué tengo que teclea CTRL+P dos veces para enviar CTRL+P una vez?

CTRL+P es el carácter por defecto de "forzar", usado para indicarle al programa tip que el próximo carácter es un dato literal. Puedes configurar el carácter "forzar" a cualquier otro carácter con el escape ~s, el cual significa "poner una variable".

Teclea ~sforce=<single-char> seguido de una nueva línea. <single-char> es cualquier carácter simple. Si dejas libre <single-char> entonces el carácter de forzar es el caracter nul, al cual puedes acceder tecleando CTRL+2 o CTRL+SPACE. Un valor más adecuado para <single-char> es SHIFT+CTRL+6, el cual solo es usado en algunos servidores de terminales.

Puedes tener el carácter de forzar donde quieras, especificando lo siguiente en tu archivo $HOME/.tiprc

        force=<single-char>
        

12.19.

De repente, todo lo que tecleo es en mayúsculas

Has debido pulsar CTRL+A, tip tiene este carácter especial para gente que tenga la tecla caps-lock estropeada. Usa ~s como en la sección anterior y pon la variable "raisechar" a un valor razonable. De hecho, puedes ponerla al mismo valor que que el carácter de forzar, si no esperas usar estas características.

Aqui hay un ejemplo del archivo .tiprc perfecto para usuarios de Emacs que necesiten teclear CTRL+2 y CTRL+A muchas veces:

        force=^^
        raisechar=^^
        

El simbolo ^^ es SHIFT+CTRL+6.

12.20.

?Cómo puedo hacer transferecia de archivos con tip?

Si estás conectado con otro sistema UNIX, puedes enviar y recibir archivos con ~p (put) y ~t (take). Estos comandos ejecutan cat y echo en el sistema remoto para aceptar y enviar archivos. La sintaxis es:

        ~p <local-file> [<remote-file>]
        ~t <remote-file> [<local-file>]
        

No hay chequeo de errores, por lo que es mejor usar otro protocolo como zmodem.

12.21.

?Cómo puedo usar zmodem con tip?

Primero, instala uno de los programas zmodem de la colección de ports (por ejemplo lrzsz y rzsz).

Para recibir archivos, inicia el programa de envío en la parte remota. A continuación, pulsa enter y teclea ~C rz'' (or ``~C lrz'' si instalaste lrzsz) para empezar a recibir localmente.

Para enviar archivos, inicia el programa de recepción en la parte remota. A continuación pulsa enter y teclea ~C sz <files>'' (o ~C lsz <files>) para enviarlos al sistema remoto.

12.22.

FreeBSD parece que no puede encontrar mis puertos series aún cuando la configuración es correcta.

Las placas bases y tarjetas con UARTs de Acer no son detectadas correctamente por FreeBSD durante la fase de detección serie. Obten un parche de www.lemis.com para solucionar el problema.

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.

Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.