Dediquemos algo de tiempo a examinar las dos utilidades más comunes:
setserial y
stty.
El núcleo hará su mayor esfuerzo en determinar cómo está configurado su hardware serie, pero las diversas variantes en la configuración de dispositivos serie hace difícil obtener una determinación fiable al 100%. Un buen ejemplo de este problema son los módems internos que discutimos anteriormente. La UART que usan tiene un búfer FIFO de 16 bytes, pero parece una UART 16450 para el núcleo: a no ser que específicamente informemos al manejador que el puerto es realmente un dispositivo 16550, el núcleo no hará uso del búfer extendido. Otro ejemplo es el de las tarjetas de cuatro puertos sin procesamiento que permiten compartir una misma IRQ entre un número de dispositivos serie. Probablemente tengamos que especificarle al núcleo qué IRQ se supone que usará el puerto, y que las IRQ pueden estar compartidas.
setserial fue creado para configurar el manejador serie en tiempo de ejecución. La orden
setserial se ejecuta por lo común al arrancar, desde un script llamado
0setserial en unas distribuciones, y
rc.serial en otras. Este script está al cargo de iniciar adecuadamente el manejador de puerto serie para dar cabida a cualquier hardware no estándar o inusual que haya en la máquina.
La sintaxis general para la orden
setserial es:
|| setserial
dispositivo [
parámetos] ||
donde el dispositivo es uno de los dispositivos serie, como
ttyS0.
La orden
setserial tiene un gran número de parámetros. Los más comunes vienen descritos en
Tabla 4-1∞. Para más información sobre el resto de los parámetros, consulte la página de manual de
setserial.
Un fichero
rc típico y sencillo para configurar sus puertos serie al arrancar puede parecerse a lo mostrado en
Ejemplo 4-1∞. Una mayoría de distribuciones de GNU/Linux incluirán algo más sofisticado que este ejemplo.
El argumento
-bg /dev/ttyS* en la última orden mostrará un pulcro sumario de la configuración hardware de todos los dispositivos serie activos. Esta salida se parecerá a la mostrada en
Ejemplo 4-2∞.
El nombre
stty probablemente signifique “set tty,” pero la orden
stty también puede ser empleada para mostrar la configuración de un terminal. Quizás aún más que
setserial, la orden
stty proporciona un desconcertante número de características configurables. Cubriremos las más importantes en breve. Puede usted encontrar descrito el resto en la página de manual de
stty.
La orden
stty se utiliza principalmente para configurar parámetros del terminal, tales como qué caracteres serán mostrados, o qué tecla deberá generar una señal de parada. Explicamos anteriormente que los dispositivos serie son dispositivos tty, y por tanto la orden
stty es igualmente aplicable a ellos.
Uno de los usos más importantes de
stty para dispositivos serie es habilitar la negociación por hardware en ellos. Anteriormente describimos someramente la negociación por hardware. La configuración por defecto en dispositivos serie es que esta negociación hardware esté deshabilitada. Esta disposición permite que los cables serie de “tres hilos” funcionen; estos cables no aceptan las señales necesarias para la negociación por hardware, y si estuviera activada por defecto, serían incapaces de transmitir ningún carácter para desactivarla.
Sorprendentemente, algunos programas de comunicación serie no habilitan la negociación por hardware, así que si su módem la permite, deberá configurar el módem para emplearla (diríjase al manual de su módem para averiguar qué orden usar), y también deberá configurar el dispositivo serie para utilizar negociación por hardware. La orden
stty tiene una bandera
crtscts que habilita la negociación por hardware en un dispositivo; tendrá que utilizar esto. El lugar más apropiado para ejecutar esta orden probablemente sea el fichero
rc.serial (o equivalente) al arrancar, utilizando sentencias como las mostradas en
Ejemplo 4-3∞.
La orden
stty trabaja en el terminal en uso de forma predefinida, pero mediante la redirección de entrada (“<”) facilitada por el intérprete de órdenes, podemos hacer que
stty maneje cualquier dispositivo tty. Es un error común olvidar si se ha de emplear “<” o “>”; las versiones más modernas de
stty tienen una sintaxis más clara de especificarlo. Con esta nueva sintaxis, nuestro ejemplo quedaría como en
Ejemplo 4-4∞.
Antes mencionamos que la orden
stty puede ser usada para mostrar los parámetros de configuración de un dispositivo tty. Para mostrar todos los parámetros activos de un dispositivo tty se hace:
|| $
stty -a -F /dev/ttyS1 ||
La salida de esta orden, mostrada en
Ejemplo 4-5∞, le muestra el estado de todas las banderas para ese dispositivo; una bandera precedida por un signo menos, como en
–crtscts, significa que la bandera ha sido desactivada.
Una descripción de las banderas más importantes se da en
Tabla 4-2∞. Cada una de ellas se habilita suministrándola a
stty, y se deshabilita de la misma forma, pero precedida por un carácter – delante. Así, para deshabilitar la negociación hardware, se haría:
|| $
stty -crtscts -F /dev/ttyS0 ||
El siguiente ejemplo combina algunas de estas banderas y configura el dispositivo
ttyS0 a 19.200 bps, 8 bits de datos, sin paridad, con negociación por hardware y eco deshabilitado:
|| $
stty 19200 cs8 -parenb crtscts -echo -F /dev/ttyS0 ||