4.5. Uso de las Utilidades de Configuración

Dediquemos algo de tiempo a examinar las dos utilidades más comunes: setserial y stty.

4.5.1. La orden setserial

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.

Tabla 4-1. Parámetros de Línea de Órdenes de setserial

ParámetroDescripción
port número_puerto

Especifica la dirección de E/S del dispositivo serie. Los números de puerto deben ser especificados en notación hexadecimal, p.ej. 0x2f8.

irq núm

Especifica la línea de petición de interrupción que emplea el dispositivo serie.

uart tipo_uart

Especifica el tipo de UART del dispositivo serie. Los valores más comunes son 16450, 16550, etc. Ajustar este valor a none desactivará el dispositivo serie.

fourport

El uso de este parámetro informará al manejador de puertos serie del núcleo de que este puerto forma parte de una tarjeta AST Fourport.

spd_hi

Programar la UART para emplear una velocidad de 57,6 kbps cuando un proceso solicita 38,4 kbps.

spd_vhi

Programar la UART para emplear una velocidad de 115 kbps cuando un proceso solicita 38,4 kbps.

spd_normal

Programar la UART para emplear la velocidad predefinida de 38,4 kbps cuando se le solicite. Este parámetro sirve para deshacer el efecto de un spd_hi o spd_vhi aplicado en el dispositivo serie especificado.

auto_irq

Este parámetro provocará que el núcleo trate de determinar automáticamente la IRQ del dispositivo especificado. Este intento puede no ser fiable completamente, así que quizá sea mejor entenderlo como una solicitud al núcleo para que adivine la IRQ. Si conoce usted la IRQ del dispositivo, debe especificar que se use el parámetro irq en su lugar.

autoconfig

Este parámetro debe ser especificado simultáneamente con el parámetro port. Cuando se suministra este parámetro, setserial ordena al núcleo que intente determinar automáticamente el tipo de UART localizada en la dirección de puerto proporcionada. Si el parámetro auto_irq también es suministrado, el núcleo tratará también de determinar la IRQ automáticamente.

skip_test

Con este parámetro se solicita que el núcleo no se ocupe de determinar el tipo de UART en la auto-configuración. Esto es necesario cuando la UART es detectada de forma incorrecta por el núcleo.

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.

4.5.2. La Orden stty

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