La mayoría de problemas relacionados con PCMCIA en algunos portátiles o con
determinadas tarjetas puede solucionarse sin demasiado esfuerzo siempre que
se proceda sistemáticamente. En primer lugar hay que averiguar si el
problema se encuentra en una tarjeta o en el sistema base PCMCIA. Por este
motivo, en primer lugar debe iniciarse el ordenador sin haber insertado
ninguna tarjeta. La tarjeta se insertará una vez que sea obvio que el
sistema base funciona correctamente. Todos los mensajes del sistema se
registran en /var/log/messages, por
lo que se recomienda observar este archivo durante las pruebas con
tail -f /var/log/messages. De este
modo el problema puede reducirse a uno de los dos casos siguientes:
Si el sistema se detiene durante el arranque con el mensaje
PCMCIA: Starting services o si se producen otras
incidencias extrañas, se debe introducir NOPCMCIA=yes en
el prompt de arranque para desactivar el servicio PCMCIA en el próximo
arranque. Para reducir aún más la causa del error, cargue los tres módulos
base del sistema PCMCIA utilizado manualmente y de forma secuencial.
Ejecute como usuario root los
comandos modprobe pcmcia_core,
modprobe yenta_socket y
modprobe ds para cargar los
módulos PCMCIA manualmente. En algunos casos excepcionales se utilizará uno
de los módulos tcic, i82365 o
i82092 en lugar de yenta_socket. Los
módulos críticos son los dos primeros.
La página man pcmcia_core(4) le
será de utilidad si el error aparece al cargar
pcmcia_core. Las opciones que se mencionan en dicha
página se pueden probar primero con el comando modprobe.
Por ejemplo, es posible comprobar las secciones E/S libres. Esta prueba
puede ocasionar problemas en algunos casos si se interfiere con otros
componentes de hardware. Esto se evita con la opción
probe_io=0:
modprobe pcmcia_core probe_io=0
Si la opción probada tiene éxito, se asigna el valor
probe_io=0 a la variable
PCMCIA_CORE_OPTS en el archivo
/etc/sysconfig/pcmcia. Cuando se utilizan múltiples
opciones, se separan con espacios:
PCMCIA_CORE_OPTS="probe_io=0 setup_delay=10"
La aparición de errores al cargar el módulo yenta_socket
es un síntoma de problemas más generales como puede ser la distribución de
recursos por parte de ACPI.
El administrador de tarjetas analiza los archivos
/etc/pcmcia/config y
/etc/pcmcia/config.opts. Una parte de las opciones de
configuración allí recogidas es relevante para el inicio de cardmgr y la otra
para la carga de módulos de controladores para las tarjetas PC. En el archivo
/etc/pcmcia/config.opts también es posible incluir o
excluir IRQs, puertos E/S y secciones de memoria. En algunos casos
excepcionales, el acceso a una sección E/S incorrecta provoca un fallo total
del sistema. Si esto ocurre, conviene realizar pruebas aislando sucesivamente
estas secciones.
Fundamentalmente, hay tres razones por las que una tarjeta PCMCIA puede no funcionar correctamente: no se reconoce la tarjeta, no se puede cargar el controlador o la interfaz ofrecida por el controlador está mal configurada. Debe tenerse en cuenta si la tarjeta es gestionada por el administrador de tarjetas o por el hotplug. Como ya hemos visto, el administrador de tarjetas se ocupa de las tarjetas PC y hotplug de las tarjetas CardBus.
Si el sistema no reacciona cuando se introduce una tarjeta y la
ejecución del comando
cardctl insert tampoco produce
ningún resultado, es un posible síntoma de que la asignación de
interrupciones a dispositivos PCI es incorrecta. A veces el problema
también reside en otros dispositivos PCI como las tarjetas de red. En
este caso puede utilizarse el parámetro de arranque
pci=noacpi u otros parámetros PCI o ACPI.
Si no se reconoce la tarjeta, el mensaje unsupported Card in
Slot x aparece en /var/log/messages.
Este mensaje sólo indica que el administrador de tarjetas no es capaz de
asignar un controlador a la tarjeta, ya que los archivos
/etc/pcmcia/config o
/etc/pcmcia/*.conf son necesarios para esta
asignación. Estos archivos son, por así decirlo, una base de datos de
controladores que se puede ampliar fácilmente usando entradas existentes
como plantilla para las nuevas. Para identificar la tarjeta, puede
emplear el comando
cardctl ident. Puede obtener
más información sobre este tema en el HOWTO de PCMCIA (sección 6) y
en la página del manual pcmcia(5). Después de
modificar /etc/pcmcia/config o
/etc/pcmcia/*.conf, debe cargar de nuevo la
asignación de controladores mediante
rcpcmcia reload.
Una de las causas es que exista una asignación incorrecta en la base de datos de controladores. Esto puede ocurrir por ejemplo si el fabricante ha insertado un chip distinto en un modelo de tarjeta que no ha cambiado externamente. A veces existen controladores opcionales que funcionan mejor (o funcionan solamente) con modelos distintos al controlador especificado. En estos casos se necesita información exacta sobre la tarjeta. También sirve de ayuda preguntar en listas de correo o a nuestro servicio de soporte avanzado.
En el caso de tarjetas CardBus es necesario añadir la entrada
HOTPLUG_DEBUG=yes al archivo
/etc/sysconfig/hotplug. De este modo el sistema
produce mensajes en el archivo de registro que indican si el controlador
ha sido cargado correctamente.
Otra causa puede ser un conflicto de recursos. Aunque para la mayoría de
las tarjetas PCMCIA no importa qué IRQ, puerto E/S o rango de memoria se
utiliza, existen algunas excepciones. Por eso siempre es necesario probar primero una
tarjeta y en ocasiones desconectar además temporalmente otros
componentes del sistema como tarjetas de sonido, IrDA, modems o
impresoras. Se puede ver la
distribución de recursos del sistema con el comando
lsdev ejecutado como usuario root. (Es normal que varios dispositivos
PCI utilicen el mismo IRQ).
Una posible solución consiste en emplear la opción adecuada para el
módulo de controladores de tarjeta. Dicha opción se puede averiguar con
modinfocontrolador.
Para la mayoría de los
módulos existe una página man. El comando rpm -ql
pcmcia | grep man muestra una lista de todas las
páginas man incluidas en el paquete pcmcia. Para probar las opciones también
es posible descargar los controladores de tarjetas manualmente.
Una vez que el problema esté resuelto, , el uso de un recurso
determinado puede permitirse o prohibirse de manera generalizada en el
archivo /etc/pcmcia/config.opts. Las opciones para
los controladores de tarjetas también pueden introducirse en este
archivo. Si, por ejemplo, el módulo pcnet_cs sólo
debe utilizarse con IRQ 5, se debe realizar la siguiente entrada:
module pcnet_cs opts irq_list=5
En este caso se recomienda comprobar concienzudamente la configuración
de la interfaz y el nombre de la configuración con
getcfg. Asimismo es necesario asignar el valor
yes a las variables DEBUG en
/etc/sysconfig/network/config y
HOTPLUG_DEBUG en
/etc/sysconfig/hotplug. Con otro tipo de tarjetas o
si esto no funciona, existe la posibilidad de incluir una línea
set -x en el script activado
por hotplug o el administrador de tarjetas (ver
/var/log/messages). De esta forma, cada uno de los
comandos del script se recogerán en el registro del sistema. Si
encuentra el pasaje problemático en un script, puede introducir y probar
los comandos correspondientes en una terminal.