Página siguiente Página anterior Índice general

9.3 ¿Cómo se configura el puerto serie ?

La primera pregunta sería: ¿ Debo configurar mis puertos serie ?

En general, sólo deberás configurar los puertos serie en estos casos:

Si no cumples ninguna de estas condiciones, puedes ignorar el resto de la sección.

Un puerto serie (más exactamente, la UART del puerto serie) usa un rango de direcciones de entrada-salida y una solicitud de interrupción para comunicarse con el sistema operativo. Para el correcto funcionamiento del ordenador y del sistema operativo, ningún otro dispositivo del ordenador puede usar alguno de esos valores. Nuestro objetivo será conseguir esto, y en segundo lugar, hacer que el sistema operativo atienda a ese rango de entrada-salida y esa interrupción para comunicarse con el modem.

Tradicionalmente la elección del rango de entrada-salida y la interrupción se realizaba a través de una serie de microinterruptores manuales situados en el modem. Conocida la posición de estos interruptores, se configuraba el sistema operativo para que usara esos valores. Hoy en día casi la totalidad de los modems internos son Plug'n'Play, lo cual significa que el sistema operativo puede, por software, decirle a la tarjeta qué valores debe usar.

Configuración de modems Plug'n'Play en Linux

Si tienes un modem Plug'n'Play, lo primero que habrá que hacer es decirle que rango de entrada-salida y que interrupción debe usar. Lo más cómodo en este caso es usar los mismos valores que Windows 95. Para ello arranca Windows 95, y haz Inicio->Configuración->Panel de control. Una vez en el Panel de control, elige el icono 'Sistema' y dentro de él, el 'Administrador de dispositivos'. Dentro del apartado 'Puertos COM y LPT' elige el correspondiente al puerto COM donde tienes el modem. Busca en 'Recursos' el rango de entrada-salida y la interrupción que use y apúntalos.

Con esos valores en la mano, puedes configurar tu modem Plug'n'Play en Linux. Eso se hace con el programa 'isapnp'. Entra en Linux y busca si tienes un archivo llamado /etc/isapnp.conf. Si no lo tienes haz lo siguiente:

  pnpdump > /etc/isapnp.conf
Esto generará el esqueleto de un archivo de configuración para 'isapnp'. Este programa generará un listado con todas las posibles posibilidades de configuración que permiten tus dispositivos Plug'n'Play, pero todas deshabilitadas con un '#' al principio de cada línea. Los dispositivos aparecen por secciones por lo que es fácil encontrar los correspondientes a tu modem.

Así tu misión se reducirá a encontrar en la sección correspondiente a tu modem del archivo /etc/isapnp.conf, dos líneas así:

  # (IO 0 (BASE 0x0NNN))
  # (INT 0 (IRQ MM (MODE +E)))
donde NNN sea el rango de entrada-salida que use el modem en Windows y MM la interrupción. Las líneas no tienen por qué ser consecutivas ni ir en ningún orden especial. Cuando las encuentres, quítales el '#' inicial. Luego, al final de la sección del modem encontrarás una línea parecida a esta:
  # (ACT Y)
De la misma forma, le quitas el '#' inicial. Ya está. Listo para enviar dichos valores al modem. Esto lo hace la orden isapnp /etc/isapnp.conf y deberá aparecer en los scripts de arranque de Linux para enviar los valores cada vez que enciendas el ordenador. Las distribuciones más recientes (Red-Hat 5.0 y posteriores, Debian 2.0 y posteriores) ya incluyen dicha invocación por lo que no necesitarás tocar los scripts de arranque. En caso de tener una distribución antigua, será necesario añadir dicha orden. Un buen sitio para incluirla sería el script rc.local, que suele estar situado en uno de los subdirectorios de /etc.

De todas formas será necesario ejecutar isapnp /etc/isapnp.conf si queremos activar los cambios en este momento y nos queremos ahorrar el rearrancar la máquina.

Ahora hay que decirle al sistema operativo que debe usar esos valores para comunicarse con el modem. En el caso de los modems Plug'n'Play lo que viene a continuación es imprescindible.

Configuración de los puertos serie a ojos del sistema operativo

Lo primero que hay que saber es que Linux no llama a los puertos serie de la misma forma que el DOS o Windows. Así existe la siguiente correspondencia:

  DOS-Windows                     Linux
  -----------                   ----------
     COM1                       /dev/ttyS0
     COM2                       /dev/ttyS1
     COM3                       /dev/ttyS2
     COM4                       /dev/ttyS3
Ojo a las mayúsculas y las minúsculas del nombre de Linux. Son importantes.

Para leer la configuración y configurar los puertos serie se usa la orden 'setserial'. Para leer la configuración, hay que ejecutar setserial con el puerto serie que deseamos ver como único parámetro.

Por ejemplo:

  setserial /dev/ttyS1
nos muestra la configuración de COM2 y se obtendrá algo como esto:
  /dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ 3
o sea, el puerto serie (/dev/ttyS1), el tipo de chip UART que lleva (16550A), el puerto base de entrada-salida (2f8) y la solicitud de interrupción (3). Nótese que estos son los valores que el sistema operativo CREE que debe utilizar para comunicarse con el modem/puerto serie. Es posible que ahora no coincidan con los reales, incluso que ni siquiera detecte la UART, lo cual no es raro en caso de modems Plug'n'Play.

Si no coinciden, asignaremos los valores adecuados. Por fortuna, por lo general no será necesario indicar la dirección base de entrada-salida. Salvo casos muy, muy excepcionales COM1 usa la dirección base 3f8, COM2 la 2f8, COM3 la 3e8 y COM4 la 2e8, y eso setserial lo sabe. Así, al indicar el puerto serie, setserial implícitamente sabe cual es la dirección base. En cambio, en caso de tener un puerto COM5 o superior sí será necesario indicar la dirección base.

Así para COM1-COM4 sólo indicaremos la interrupción. Por ejemplo, supongamos que tenemos un modem en COM3 que usa la interrupción 5. La orden a introducir sería.

  setserial /dev/ttyS2 irq 5 autoconfig
Y si quisiéramos indicar también la dirección base de entrada-salida (por tener el modem en COM5, por ejemplo) se haría así.
  setserial /dev/ttyS4 port 0x2e8 irq 10 autoconfig
lo cual hace que el sistema operativo use un rango de direcciones desde la 2e8, y la interrupción 10. Nótese que el '0x' antes de la dirección base es importante.

Por último sólo queda ver que los cambios han surtido efecto. Para ello bastará usar de nuevo setserial de la primera forma que se indicó.

Por desgracia esta configuración durará hasta que apaguemos el ordenador. Por tanto será necesario incluir la línea o líneas de configuración setserial /dev/ttyS2 irq 5... en uno de los scripts de arranque de Linux para que los puertos se configuren cada vez que se inicie el sistema operativo. Un buen candidato es rc.local, que estará en uno de los subdirectorios de /etc. En caso de ser necesario incluir en rc.local tanto el isapnp /etc/isapnp.conf para configurar un modem Plug'n'Play, y el setserial... de los puertos serie, deberá colocarse el isapnp... en primer lugar.

También habrá que usar setserial de la misma forma si el ordenador tuviera más de dos puertos serie, (contando los que traen los modems internos en caso de disponer de alguno). El motivo es que por alguna extraña razón de diseño del PC, COM1 y COM3 por defecto comparten la misma interrupción, y a pesar de que esa configuración no es deseable, Linux por defecto busca COM3 en la misma interrupción que COM1, por lo que habría que cambiar la de COM3. Lo mismo ocurre con COM2 y COM4 por lo que habría que cambiar COM4. Si no se hiciera esto, podrían ocurrir cosas muy raras, como ratones y modems que dejan de funcionar, modems que funcionan "a pedales" (cuando se mueve el ratón), etc...


Página siguiente Página anterior Índice general