Capítulo 4


Configuración del Software Serie

Casi todo el mundo dispone de un PC, pero no siempre hay dinero para gastarlo en un enlace Internet T1. Para conseguir su dosis diaria de noticias y mensajes, mucha gente depende de enlaces SLIP, redes UUCP y BBS, que usan las redes telefónicas publicas.

Este capítulo pretende ayudar a todas aquellas personas que dependen del módem para mantener sus comunicaciones. Sin embargo, hay muchos detalles que no podemos abordar, como por ejemplo como configurar el módem para marcar. Todos esos temas están contemplados en el "Serial HOWTO"1 de Greg Hankins2, que es enviado a comp.os.linux.announce regularmente.

4.1 Software de Comunicaciones con Módem
4.2 Introducción a los Dispositivos Serie
4.3 Acceso a los Dispositivos Serie
4.4 Hardware Serie

4.1 Software de Comunicaciones con Módem

Existen varios paquetes de comunicaciones disponibles para Linux. Muchos de ellos son emuladores de terminal, que permiten a un usuario conectarse a otro ordenador como si estuviera frente a uno de sus terminales. El emulador de terminal tradicional en sistemas UNIX es kermit. Sin embargo resulta algo duro de usar. Hay programas disponibles más cómodos que soportan agenda telefónica y guiones para llamar y entrar en ordenadores remotos. Uno de estos es el minicom, muy parecido a los primitivos programas emuladores de terminal a los que tan acostumbrados están los usuarios de DOS. Hoy también existen paquetes de comunicaciones bajo X-11 como por ejemplo seyon.

Además, existe un buen número de programas para instalar BBS bajo Linux disponibles para aquellos que quieran ofrecer dicho servicio. Varios de esos paquetes se encuentran en sunsite.unc.edu, en el directorio /pub/Linux/system/Network.

_____________________________________________
1 N. del T.: Disponible en castellano como SERIE-COMO, en http://lucas.ctv.es/
2 Disponible en gregh@cc.gatech.edu.

 

Aparte de los programas de terminal, hay también software que usa la línea serie de forma no interactiva para el transporte de datos hasta su ordenador. Normalmente se invierte bastante más tiempo en visitar un BBS leyendo toda su información en la que podemos incluir las noticias y los mensajes, que el que se necesita empleando este tipo de software. La única desventaja es que se requiere mas espacio de disco debido a la transferencia de cierta cantidad de información que al usuario le resulta inútil, y que de forma interactiva no se transmitiría.

El compendio de esta clase de software de comunicaciones es UUCP. Este es un conjunto de programas que copian ficheros de una máquina a otra, ejecutan programas en un ordenador remoto, etc. Se utiliza frecuentemente para transferir mensajes y noticias (news) entre redes privadas. El paquete UUCP de Ian Taylor, que funciona bajo Linux, será descrito en el capítulo 12 de este libro. Otro tipo de software de comunicaciones no interactivo es el utilizado en Fidonet, para el que también podemos encontrar algunos paquetes de software, como ifmail.

SLIP, el protocolo de Internet para línea serie, esta de algún modo a medio camino: permite tanto el uso interactivo como el no interactivo. Mucha gente usa SLIP para telefonear a la red de su campus o algún otro tipo de servidor publico y poder ejecutar sesiones FTP, etc. Sin embargo, SLIP también puede ser usado en conexiones permanentes o semipermanentes para uniones de LAN a LAN, aunque esto último solo resulta interesante utilizando RDSI u otros enlaces de ancho de banda mayor.

 

4.2 Introducción a los Dispositivos Serie

Los dispositivos proporcionados por un núcleo UNIX para el acceso a dispositivos serie son llamados normalmente ttys. Esta es una abreviatura de TeletypeTM, quienes eran unos de los mayores productores de terminales en los primeros días de Unix. El término se usa actualmente para cualquier terminal de texto. En este capítulo, lo usaremos exclusivamente para referirnos a los dispositivos del núcleo.

Linux distingue tres clases de ttys: consolas (virtuales), pseudo terminales (similares a las tuberías de doble vía, usadas por aplicaciones tales como X11), y dispositivos serie. Estos últimos son considerados también como ttys, porque permiten sesiones interactivas sobre conexiones serie, ya sea éste un terminal conectado por cable o un ordenador remoto a través de la línea telefónica.

Los ttys tienen cierto número de parámetros configurables mediante la llamada al sistema ioctl(2). Muchos de estos parámetros sirven únicamente con dispositivos serie, ya que son estos los que necesitan una mayor flexibilidad para poder manejar la gran variedad de tipos de conexión que son capaces de controlar.

Entre los parámetros mas destacados para la línea se encuentran la velocidad y la paridad. Pero hay también elementos para la conversión de caracteres entre mayúscula y minúscula, de retorno de carro, de avance de línea, etc. El controlador de tty puede también soportar varias líneas dedicadas, las cuales hacen que el controlador de dispositivo se comporte de forma diferente. Por ejemplo, el controlador de SLIP para Linux esta implementado como si fuera una línea dedicada.

Existe algo de ambigüedad sobre como medir la velocidad de la línea. El termino correcto es bit rate, el cual esta relacionado con la velocidad de transferencia de la línea medida en bits por segundo (bps para abreviar). Algunas veces se oye a la gente referirse a ella como velocidad en baudios, lo cual no es muy correcto, ya que estos dos términos no son sinónimos.

La velocidad en baudios se refiere a una característica física de algunos dispositivos serie. En concreto, a la velocidad de reloj a la que se transmiten los impulsos. En cambio, el "bit rate", indica el estado actual de una conexión serie existente entre dos puntos, a saber, el número medio de bits transferidos por segundo. Es importante saber que estos dos valores suelen ser diferentes, ya que la mayoría de los dispositivos codifican mas de un bit por cada impulso eléctrico.

 

4.3 Acceso a los Dispositivos Serie

Como ocurre con todos los dispositivos de un sistema UNIX, se accede a los puertos serie a través de ficheros especiales de dispositivo, localizados en el directorio /dev. Cada puerto tiene su fichero de dispositivo. Hay dos tipos de ficheros de dispositivos relacionados con los controladores serie. Dependiendo del fichero por el que se acceda el dispositivo se comportara de forma diferente.

El primer tipo se utiliza para las llamadas entrantes y tiene un número principal de dispositivo3 igual a 4. Sus ficheros son nombrados ttyS0, ttyS1, etc. El segundo tipo se utiliza para llamadas de salida a través de un puerto. Sus ficheros son llamados cua0, etc y tienen un número principal de dispositivo igual a 5.

Los números secundarios4 son los mismos para los dos tipos. Si tiene su módem en uno cualquiera de los puertos COM1 a COM4, su número secundario será el número de puerto COM mas 63. Si su configuración es diferente a ésta, como sucede, por ejemplo, en placas que soportan múltiples líneas serie, debe en tal caso buscar en el documento COMO-SERIE o SERIAL-HOWTO.

Asumamos que su módem esta en el COM2. En este caso su número secundario será 65, y su número principal será 5 para realizar llamadas. Debería existir por ello, un dispositivo cua1 que tuviera dichos números de dispositivo. A continuación vemos una lista de ttys serie del directorio /dev. Las columnas 5 y 6 muestran los números principal y secundario respectivamente.

$ ls -l /dev/cua*
crw-rw-rw- 1 root root 5, 64 Nov 30 19:31 /dev/cua0
crw-rw-rw- 1 root root 5, 65 Nov 30 22:08 /dev/cua1
crw-rw-rw- 1 root root 5, 66 Oct 28 11:56 /dev/cua2
crw-rw-rw- 1 root root 5, 67 Mar 19 1992 /dev/cua3

_____________________________________________
3 N. del T.: Del inglés major number
4 N. del T.: Del inglés minor number

 

Si no existiesen tales dispositivos, entonces tendría que crearlos. Para ello, conviértase en superusuario y teclee comandos como el siguiente:

# mknod -m 666 /dev/cua1 c 5 65
# chown root.root /dev/cua1

Hay quien propone la creación de un enlace simbólico del puerto serie en donde tenga su módem, a un fichero /dev/modem. De esta forma no es necesario recordar el poco intuitivo cua1. Sin embargo, podemos encontrarnos con problemas si empleamos el nombre real del dispositivo en unos programas y el simbólico en otros. La explicación es que las aplicaciones en Unix usan un convenio de ficheros cerrojo para indicar que cierto dispositivo esta siendo utilizado por un proceso y evitar así que pueda ser utilizado por otro al mismo tiempo. Por convenio, el nombre del fichero de bloqueo para cua1, es LCK..cua1. El uso de distintos ficheros de dispositivo para el mismo puerto implica que se puede producir ausencia de exclusión mutua en el acceso al puerto si un programa usa un nombre de dispositivo y otro programa usa el otro nombre (el simbólico). Esto puede provocar un acceso simultáneo de ambos procesos al mismo puerto y que, por tanto, ninguna de ellas funcione correctamente.

 

4.4 Hardware Serie

Linux soporta, hoy por hoy, una amplia variedad de placas serie que utilizan el estándar RS-232. RS-232 es, en la actualidad, el estándar mas comun para comunicaciones serie en el mundo del PC. Este usa un conjunto de circuitos tanto para transmitir simples bits así como para establecer sincronización. Pueden utilizarse cables adicionales para señalar la presencia de una portadora y para el control de flujo.

Aunque el control de flujo por hardware es opcional, resulta muy útil ya que permite a cada una de las dos estaciones señalar cuando esta lista para recibir mas datos, o si la otra estación debe parar hasta que el receptor procese los datos de entrada. Las líneas usadas para esto son las llamadas Clear to Send, despejado para envíos, (CTS) y Ready to Send, listo para enviar (RTS), respectivamente.

En ordenadores PC, el interfaz RS-232 es controlado generalmente por un chip UART descendiente del chip 16450 de National Semiconductor, o bien de una nueva versión de este: el NSC 16550A5. Algunas marcas (principalmente los módems internos equipados con un chip Rockwell) también usan chips completamente diferentes que han sido programados para comportarse como si fueran un 16550.

La principal diferencia entre los 16450 y los 16550 estriba en que el primero tiene un buffer de 1 byte mientras que el segundo lo tiene de 16 bytes. Esto hace al 16450 valido para velocidades máximas de 9600 baudios, mientras que para velocidades superiores se requiere un chip compatible con el 16550. Además de estos chips, Linux también soporta el chip 8250, que era el chip UART original de los PC de IBM.

En la configuración por defecto, el núcleo comprueba los cuatro puertos serie estándar, es decir, del COM1 hasta el COM4, a los que les asignara los números secundarios desde el 64 hasta el 67, tal y como se ha descrito anteriormente.

Si desea configurar su puerto serie adecuadamente, tendría que incluir la orden setserial de Ted Tso en el fichero de comandos rc.serial, el cual es invocado durante el arranque del sistema desde el fichero de comandos de inicialización /etc/rc. Este primer fichero, usa setserial para configurar los dispositivos serie del núcleo. Un típico fichero de comandos rc.serial tendrá el siguiente aspecto:

# /etc/rc.serial - guion de configuración de la línea serie
#
# Deteccion de interrupciones libres
/sbin/setserial -W /dev/cua*

# Configurar dispositivos serie
/sbin/setserial /dev/cua0 auto_irq skip_test autoconfig
/sbin/setserial /dev/cua1 auto_irq skip_test autoconfig
/sbin/setserial /dev/cua2 auto_irq skip_test autoconfig
/sbin/setserial /dev/cua3 auto_irq skip_test autoconfig

# Muestra la configuración de dispositivos serie
/sbin/setserial -bg /dev/cua*

Si desea conocer mas sobre los parámetros de setserial, por favor, consulte la documentación que acompaña al programa.

_____________________________________________
5 Había también un NSC 16550, pero este chip FIFO nunca funcionó realmente.

 

Si su tarjeta serie no es detectada, o la orden setserial -bg muestra una configuración incorrecta, tendrá que forzar la configuración suministrando explícitamente los valores correctos. Está comprobado que los módems internos equipados con los chips de Rockwell experimentan este tipo de problemas. Así, por ejemplo, si se obtiene que el chip de una UART es el NSC 16450, siendo en cambio del tipo NSC 16550, se tendrá que cambiar la configuración del puerto implicado de la forma siguiente:

/sbin/setserial /dev/cua1 auto_irq skip_test autoconfig uart 16550

Existen opciones similares para forzar los puertos COM, direcciones base, y configuración de petición de interrupción (IRQ). Por favor consulte la pagina del manual de setserial(8) para mas información.

Si su módem soporta control de flujo mediante hardware, asegúrese de activarlo. Sorprendentemente, la mayoría de los programas de comunicaciones no intentan activarlo por defecto. Por ello, lo mejor es realizarlo manualmente, y la mejor forma de lograrlo es incluirlo en el fichero de comandos rc.serial usando la orden stty:

$ stty crtscts < /dev/cua1

Para comprobar si el control de flujo por hardware esta activo use:

$ stty -a < /dev/cua1

Este comando le devolverá el estado de todos los parámetros de dicho dispositivo. Un parámetro precedido con un signo menos como en -crtscts significa que ha sido desactivado.