La primera pregunta sería: ¿ Debo configurar mis puertos serie ?
En general, sólo deberás configurar los puertos serie en estos casos:
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.confEsto 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/ttyS3Ojo 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/ttyS1nos muestra la configuración de COM2 y se obtendrá algo como esto:
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ 3o 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 autoconfigY 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 autoconfiglo 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...