%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
%                       Legal Notice                            %
%                                                               %
% This document is copyright (C) Olaf Kirch, okir@monad.swb.de  %
%                                                               %
% For copying conditions, please refer to the file COPYING.	%
%                                                               %
% The author is not liable for any damages, direct or indirect, %
% resulting from the use of information provided in this        %
% document.                                                     %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% When viewing this document with vi on an 80-columns screen,   %
% do a ':se nonumber' first.                                    %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
% Revisado en 16-Febrero-1999 por:                              %
%   Juan Jose Amor <jjamor@ls.fi.upm.es>                        %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
%               S T A R T   O F   C H A P T E R                 %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\chapter{Configuraci\'on del Software Serie}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{serial}
\index{hardware!serie|(}
\index{dispositivo, 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\'onicas p\'ublicas.



\index{Hankins, Greg}
\index{HOWTO!Serial}
Este cap\'{\i}tulo pretende ayudar a todas aquellas personas que
dependen del m\'odem para mantener sus comunicaciones. Sin embargo, hay muchos
detalles que no podemos abordar, como por ejemplo c\'omo configurar
el m\'odem para marcar. Todos esos temas est\'an contemplados en el ``Serial
HOWTO''\footnote{N. del T.: Disponible en castellano como SERIE-COMO, en
http://lucas.ctv.es/} de Greg Hankins\footnote{disponible en \email
{gregh@cc.gatech.edu}.}, que es enviado a \ngrp{comp.os.linux.announce}
regularmente.



\section{Software de Comunicaciones con M\'odem}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{serial.software}
\index{terminal programas}
\index{BBS}
\index{bulletin board}

Existen varios paquetes de comunicaciones disponibles para \linux.
Muchos de ellos son \emph{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 \prog{kermit}. Sin embargo resulta algo duro de usar. Hay 
programas disponibles m\'as c\'omodos que soportan agenda telef\'onica
y guiones para llamar y entrar en ordenadores remotos. Uno de estos
es el \prog{minicom}, muy parecido a los primitivos programas emuladores
de terminal a los que tan acostumbrados est\'an los usuarios de DOS. 
Hoy tambi\'en existen paquetes de comunicaciones bajo X-11 como por ejemplo
\prog{seyon}.


Adem\'as, existe un buen n\'umero de programas para instalar BBS bajo
\linux{} disponibles para aquellos que quieran ofrecer dicho servicio.
Varios de esos paquetes se encuentran en \host{sunsite.unc.edu}, en el
directorio \file{/pub/Linux/system/Network}.


\index{UUCP}
\index{FidoNet}
Aparte de los programas de terminal, hay tambi\'en software que usa la
l\'{\i}nea serie de forma no interactiva para el transporte de datos hasta 
su ordenador. Normalmente se invierte bastante m\'as tiempo en visitar
un BBS leyendo toda su informaci\'on en la que podemos incluir las noticias y
los mensajes, que el que se necesita empleando este tipo de software.
La \'unica desventaja es que se requiere m\'as espacio de disco debido
a la transferencia de cierta cantidad de informaci\'on que al usuario le resulta
in\'util, y que de forma interactiva no se tranmitir\'{\i}a.

El compendio de esta clase de software de comunicaciones es UUCP. \'Este es
un conjunto de programas que copian ficheros de una m\'aquina 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\'a descrito en el
cap\'{\i}tulo~\ref{uucp} de este libro. Otro tipo de software de comunicaciones
no interactivo es el utilizado en Fidonet, para el que tambi\'en podemos
encontrar algunos paquetes de software, como \prog{ifmail}.


\index{SLIP}
SLIP, el protocolo de Internet para l\'{\i}nea serie, est\'a de alg\'un
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\'un otro tipo
de servidor p\'ublico y poder ejecutar sesiones FTP, etc. Sin embargo,
SLIP tambi\'en puede ser usado en conexiones permanentes o semipermanentes
para uniones de LAN a LAN, aunque esto \'ultimo s\'olo resulta interesante 
utilizando RDSI u otros enlaces de ancho de banda mayor.



\section{Introducci\'on a los Dispositivos Serie}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{serial.ttys}
\index{tty|(}

Los dispositivos proporcionados por un n\'ucleo \unix{} para el acceso a
dispositivos serie son llamados normalmente \emph{ttys}. \'Esta es una
abreviatura de \emph{Teletype}\TM, quienes eran unos de los
mayores productores de terminales en los primeros d\'{\i}as de Unix.
El t\'ermino se usa actualmente para cualquier terminal de texto. En
este cap\'{\i}tulo, lo usaremos exclusivamente para referirnos
a los dispositivos del n\'ucleo.


\linux{} distingue tres clases de ttys: consolas (virtuales), pseudo
terminales (similares a las tuber\'{\i}as de doble v\'{\i}a, usadas por
aplicaciones tales como X11), y dispositivos serie. Estos \'ultimos son
considerados tambi\'en como ttys, porque permiten sesiones interactivas
sobre conexiones serie, ya sea \'este un terminal conectado por cable o
un ordenador remoto a trav\'es de la l\'{\i}nea telef\'onica.


Los ttys tienen cierto n\'umero de par\'ametros configurables mediante la
llamada al sistema \func{ioctl(2)}. Muchos de estos par\'ametros sirven
\'unicamente con dispositivos serie, ya que son \'estos los que necesitan
una mayor flexibilidad para poder manejar la gran variedad de tipos de
conexi\'on que son capaces de controlar.


\index{l\'{\i}nea dedicada}
\index{tty!l\'{\i}nea dedicada}
Entre los par\'ametros m\'as destacados para la l\'{\i}nea se encuentran la
velocidad y la paridad. Pero hay tambi\'en elementos para la conversi\'on
de caracteres entre may\'uscula y min\'uscula, de retorno de carro, de
avance de l\'{\i}nea, etc. El controlador de tty puede tambi\'en soportar varias
\emph{l\'{\i}neas dedicadas}, las cuales hacen que el controlador de dispositivo
se comporte de forma diferente. Por ejemplo, el controlador de SLIP para
\linux{} est\'a implementado como si fuera una l\'{\i}nea dedicada.


\index{serie serie!velocidad}
\index{m\'odem, velocidad}
\index{Baudios}
\index{Bits por segundo}
Existe algo de ambig\"uedad sobre c\'omo medir la velocidad de la
l\'{\i}nea. El t\'ermino correcto es \emph{bit rate}, el cual est\'a
relacionado con la velocidad de transferencia de la l\'{\i}nea medida
en bits por segundo (bps para abreviar). Algunas veces se oye a la
gente referirse a ella como velocidad en {\it baudios}, lo cual no es muy correcto, ya
que estos dos t\'erminos no son sin\'onimos. La \emph{velocidad en baudios}
se refiere a una caracter\'{\i}stica f\'{\i}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\'on serie existente entre dos puntos, a saber, el n\'umero medio
de bits transferidos por segundo. Es importante saber que estos dos
valores suelen ser diferentes, ya que la mayor\'{\i}a de los dispositivos
codifican m\'as de un bit por cada impulso el\'ectrico.


\section{Acceso a los Dispositivos Serie}
\label{serial.devices}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Como ocurre con todos los dispositivos de un sistema \unix{}, se accede a los puertos
serie a trav\'es de ficheros especiales de dispositivo, localizados en el
directorio \file{/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 comportar\'a
de forma diferente.



\index{dev/cua*@\file{/dev/cua*}|(}
\index{dev/ttyS*@\file{/dev/ttyS*}|(}
\index{serie l\'{\i}nea!dispositivo fichero}
\index{dialout fichero}
\index{dialin device}
El primer tipo se utiliza para las llamadas entrantes y tiene un {\it n\'umero
principal de dispositivo}\footnote{N. del T.: Del ingl\'es {\it major
number}} igual a 4. Sus ficheros son nombrados
\file{ttyS0}, \file{ttyS1}, etc. El segundo tipo se utiliza para
llamadas de salida a trav\'es de un puerto. Sus ficheros son llamados
\file{cua0}, etc y tienen un n\'umero principal de dispositivo igual a
5.


\index{COM puerto}
\index{puerto!COM}
Los {\it n\'umeros secundarios}\footnote{N. del T.: Del ingl\'es {\it minor
number}} son los mismos para los dos tipos. Si tiene su m\'odem
en uno cualquiera de los puertos \file{COM1} a \file{COM4}, su n\'umero
secundario ser\'a el n\'umero de puerto \file{COM} m\'as 63. Si su configuraci\'on
es diferente a \'esta, como sucede, por ejemplo, en placas que soportan
m\'ultiples l\'{\i}neas serie, debe en tal caso buscar en el documento
COMO-SERIE o SERIAL-HOWTO.


Asumamos que su modem est\'a en el \file{COM2}. En este caso su n\'umero
secundario ser\'a 65, y su n\'umero principal ser\'a 5 para realizar llamadas. 
Deber\'{\i}a existir por ello, un dispositivo \file{cua1} que tuviera
dichos n\'umeros de dispositivo. A continuaci\'on vemos una lista de ttys serie del directorio
\file{/dev}. Las columnas 5 y 6 muestran los n\'umeros principal y secundario
respectivamente.


\begin{tscreen}
\begin{verbatim}
$ 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
\end{verbatim}
\end{tscreen}



Si no existiesen tales dispositivos, entonces tendr\'{\i}a que crearlos. Para
ello, convi\'ertase en superusuario y teclee comandos como el siguiente:



\begin{tscreen}
\begin{verbatim}
# mknod -m 666 /dev/cua1 c 5 65
# chown root.root /dev/cua1
\end{verbatim}
\end{tscreen}


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



\index{dev/cua*@\file{/dev/cua*}|)}
\index{dev/ttyS*@\file{/dev/ttyS*}|)}


\section{Hardware Serie}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Intro to serial hardware, lightly touching RS 232 :-)
% Mebbe I should mention null modem cables?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{serial.hardware}
\index{RS-232}

\linux{} soporta, hoy por hoy, una amplia variedad de placas serie que
utilizan el est\'andar RS-232. RS-232 es, en la actualidad, el est\'andar
m\'as com\'un para comunicaciones serie en el mundo del PC. \'Este usa un
conjunto de circuitos tanto para transmitir simples bits as\'{\i} como para
establecer sincronizaci\'on. Pueden utilizarse cables adicionales para
se\~nalar la presencia de una \emph{portadora} y para el \emph{control de flujo}.


\index{serie l\'{\i}nea!control de flujo por handshake}
\index{control de flujo, hardware}
\index{hardware!control de flujo}
\index{RTS/CTS}
Aunque el \emph{control de flujo} por hardware es opcional, resulta muy
\'util ya que permite a cada una de las dos estaciones se\~nalar cu\'ando
est\'a lista para recibir m\'as datos, o si la otra estaci\'on debe parar
hasta que el receptor procese los datos de entrada. Las l\'{\i}neas usadas
para esto son las llamadas \emph{Clear to Send}, despejado para env\'ios, (CTS)
y \emph{Ready to Send}, listo para enviar (RTS), respectivamente.


\index{16450 UART}
\index{16550 UART}
\index{UART}
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\'on de \'este: el NSC~16550A\footnote{Hab\'{\i}a tambi\'en un
NSC~16550, pero este chip FIFO nunca funcion\'o realmente.}. Algunas marcas
(principalmente los modems internos equipados con un chip Rockwell)
tambi\'en usan chips completamente diferentes que han sido programados
para comportarse como si fueran un 16550.



\index{8250 UART}
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 v\'alido para velocidades m\'aximas de 9600 baudios,
mientras que para velocidades superiores se requiere un chip compatible con
el 16550. Adem\'as de estos chips, \linux{} tambi\'en soporta el chip 8250,
que era el chip UART original de los PC de IBM.


En la configuraci\'on por defecto, el n\'ucleo comprueba los cuatro puertos
serie est\'andar, es decir, del \file{COM1} hasta el \file{COM4}, a los que
les asignar\'a los numeros secundarios desde el 64 hasta el 67, tal y como se ha
descrito anteriormente.



\index{configuraci\'on!serie puerto|(}
\index{setserial@\prog{setserial}}
\index{T'so, Theodore}
Si desea configurar su puerto serie adecuadamente, tendr\'{\i}a que incluir
la orden \prog{setserial} de Ted Tso en el fichero de comandos
\file{rc.serial}, el cual es invocado durante el arranque del sistema
desde el fichero de comandos de inicializaci\'on \file{/etc/rc}.
Este primer fichero, usa \prog{setserial} para configurar los
dispositivos serie del n\'ucleo. Un t\'{\i}pico fichero de comandos
\file{rc.serial} tendr\'a el siguiente aspecto:



\begin{tscreen}
\begin{verbatim}
# /etc/rc.serial - guion de configuracion de la linea 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 configuracion de dispositivos serie
/sbin/setserial -bg /dev/cua*
\end{verbatim}
\end{tscreen}


\noindent
Si desea conocer m\'as sobre los par\'ametros de \prog{setserial}, por
favor, consulte la documentaci\'on que acompa\~na al programa.


Si su tarjeta serie no es detectada, o la orden \prog{setserial -bg}
muestra una configuraci\'on incorrecta, tendr\'a que forzar la
configuraci\'on suministrando expl\'{\i}citamente los valores correctos.
Est\'a comprobado que los modems internos equipados con los chips de
Rockwell experimentan este tipo de problemas. As\'{\i}, por ejemplo, si
se obtiene que el chip de una UART es el NSC~16450, siendo en cambio
del tipo NSC~16550, se tendr\'a que cambiar la configuraci\'on del
puerto implicado de la forma siguiente:


\begin{tscreen}
/sbin/setserial /dev/cua1 auto\_irq skip\_test autoconfig uart 16550
\end{tscreen}


Existen opciones similares para forzar los puertos \file{COM}, direcciones
base, y configuraci\'on de petici\'on de interrupci\'on (IRQ). Por favor
consulte la p\'agina del manual de \prog{setserial(8)} para m\'as
informaci\'on.



\index{serie l\'{\i}nea!control de flujo por hardware}
\index{control de flujo, por hardware}
\index{hardware!control de flujo}
Si su m\'odem soporta \emph{control de flujo} mediante hardware,
aseg\'urese de activarlo. Sorprendentemente, la mayor\'{\i}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 \file{rc.serial} usando la orden \prog{stty}:



\begin{tscreen}
\$ stty crtscts < /dev/cua1
\end{tscreen}


Para comprobar si el \emph{control de flujo} por hardware est\'a activo use:


\begin{tscreen}
\$ stty -a < /dev/cua1
\end{tscreen}



Este comando le devolver\'a el estado de todos los par\'ametros de dicho
dispositivo. Un par\'ametro precedido con un signo menos como en
\option{-crtscts} significa que ha sido desactivado.



\index{configuraci\'on!serie puerto|)}


\index{tty|)}
\index{dispositivo, serie|)}
\index{hardware!serie|)}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
%                E N D   O F   C H A P T E R                    %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
