Guía de Administración de Redes con Linux | ||
---|---|---|
Anterior | Capítulo 4. Configuración del Hardware Serie | Siguiente |
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] |
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ámetro | Descripció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.
Ejemplo 4-1. Ejemplo de órdenes setserial en rc.serial
# /etc/rc.serial - script de configuración de líneas serie. # # Configurar dispositivos serie. /sbin/setserial /dev/ttyS0 auto_irq skip_test autoconfig /sbin/setserial /dev/ttyS1 auto_irq skip_test autoconfig /sbin/setserial /dev/ttyS2 auto_irq skip_test autoconfig /sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig # # Mostrar la configuración de dispositivos serie. /sbin/setserial -bg /dev/ttyS* |
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.
Ejemplo 4-2. Salida de la orden setserial -bg /dev/ttyS*
/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A /dev/ttyS1 at 0x02f8 (irq = 3) is a 16550A |
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.
Ejemplo 4-3. Órdenes stty de Ejemplo en rc.serial
# stty crtscts < /dev/ttyS0 stty crtscts < /dev/ttyS1 stty crtscts < /dev/ttyS2 stty crtscts < /dev/ttyS3 # |
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.
Ejemplo 4-4. Órdenes stty de Ejemplo en rc.serial Empleando Sintaxis Moderna
# stty crtscts -F /dev/ttyS0 stty crtscts -F /dev/ttyS1 stty crtscts -F /dev/ttyS2 stty crtscts -F /dev/ttyS3 # |
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.
Ejemplo 4-5. Salida de una Orden stty -a
speed 19200 baud; rows 0; columns 0; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke |
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 |
Tabla 4-2. Banderas de stty Más Relevantes Para Configurar Dispositivos Serie
Bandera | Descripción |
---|---|
N | Ajustar la velocidad de línea a N bits por segundo. |
crtsdts | Habilitar/Deshabilitar negociación por hardware. |
ixon | Habilitar/Deshabilitar control de flujo mediante XON/XOFF. |
clocal | Habilitar/Deshabilitar señales de control del módem como DTR/DTS y DCD. Esto es necesario si se usa cable serie de “tres hilos” ya que no proporciona estas señales. |
cs5 cs6 cs7 cs8 | Ajustar el número de bits de datos a 5, 6, 7 u 8, respectivamente. |
parodd | Habilitar paridad impar. Desactivar esta bandera activa la paridad par. |
parenb | Habilitar comprobación de paridad. Si esta bandera se niega, no se utiliza paridad. |
cstopb | Ajustar los bits de parada a dos por carácter. Al negar esta bandera, se usará sólo un bit de parada por carácter. |
echo | Habilitar/Deshabilitar el eco de caracteres recibidos al que los envía. |
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 |