Página siguiente Página anterior Índice general

3. Resolución de problemas de instalación y configuración

Esta sección describe algunos de los errores más comunes del subsistema PCMCIA. Compare sus síntomas con los ejemplos. Esta sección sólo describe fallos generales que no son específicas de un controlador o tipo de tarjeta en particular.

Antes de diagnosticar un problema, debe saber dónde se almacena el registro del sistema (revise la sección Notas acerca de distribuciones de Linux específicas). Debe estar familiarizado con las herramientas básicas de diagnóstico como dmesg y lsmod. Preste especial atención al hecho de que muchos componentes de los controladores (incluyendo todos los módulos del kernel) tienen sus propias páginas individuales en el manual.

Intente definir su problema lo más ampliamente posible. Si tiene varias tarjetas, pruebe cada tarjeta de forma aislada, y en diferentes combinaciones. Intente arranques de Linux en frío y arranques en caliente de Windows. Compare el arrancar con tarjetas insertadas, o insertar las tarjetas después de iniciar. Si normalmente usa su portátil ensamblado con una dockstation, prúebelo aparte. Algunas veces, dos bahías se comportarán de forma diferente.

Es casi imposible depurar problemas de un controlador cuando se intenta instalar Linux por medio de un dispositivo PCMCIA. En lugar de eso, si puede identificar el problema basándose en los síntomas, los discos de instalación son difíciles de modificar, especialmente sin tener acceso a un sistema Linux ya funcionando. La personalización e instalación de los discos de instalación es completamente dependiente de la distribución de Linux que elija, y más allá del enfoque de este documento. En general, el mejor curso de acción es instalar Linux usando otros medios, obteniendo los controladores más recientes, y depurando el problema entonces, si es que persiste.

3.1 No se cargan los módulos básicos de PCMCIA.

Síntomas:

Los módulos del kernel contienen información de la versión, la cual se comprueba con el kernel actual cuando se carga un módulo. El tipo de chequeo depende de la opción del kernel CONFIG_MODVERSIONS. Si es falso, entonces el número de versión del kernel se compila dentro de cada módulo y el programa insmod comprueba esto para compararlo con el kernel actual. Si CONFIG_MODVERSIONS es verdadero, entonces cada símbolo exportado por el kernel tiene un «checksum». Esos códigos se comparan con los códigos correspondientes compilados dentro de un módulo.

La idea de esto fue crear módulos menos dependientes de la versión, porque los checksums sólo pueden cambiar si la interface del kernel cambia, y podría generalmente permanecer a lo largo de actualizaciones menores del kernel. En esencia, los «checksums» se han desactivado para ser mas restrictivos, porque muchas interfaces del kernel dependen de las opciones pasadas al momento de compilarse. También, los checksums han resultado ser jueces excesivamente pesimistas respecto a compatibilidad.

El enfoque práctico de esto es que los módulos del kernel están muy atados a tanto la versión del kernel, como a muchas opciones de configuración del mismo. Generalmente, un grupo de módulos compilados para un kernel 2.0.31 no cargará con otros kernels 2.0.31 a menos que se tome un cuidado especial asegurándose que los dos fueron compilados con configuraciones similares. Esto resulta ser un asunto difícil para la distribución de módulos precompilados del kernel.

Tiene Vd. varias opciones:

3.2 Algunos módulos controladores no cargan

Síntomas:

Algunos de los módulos controladores requieren servicios del kernel que pueden o no estar presentes, dependiendo de la configuración del kernel. Por ejemplo, los controladores de tarjetas SCSI requieren que el kernel sea compilado con soporte SCSI, y los controladores de red requieren un kernel de red. Si a un kernel le falta una característica necesaria, insmod puede avisar acerca de símbolos indefinidos y rechazar la carga de un módulo en particular. Note que los mensajes de error de insmod no distinguen entre errores por diferencias de versiones y errores por falta de símbolos.

Específicamente:

Hay dos formas de proceder:

El archivo /etc/pcmcia/config puede especificar qué módulos adicionales necesitan cargarse para un cliente en particular. Por ejemplo, para el controlador serial, uno puede ser:

       device "serial_cs"
         class "serial" module "misc/serial", "serial_cs"

Las rutas hacia los módulos se especifican relativas al nivel más alto del directorio de módulos para la versión actual del kernel; si no se especifica la ruta relativa, entonces la ruta por omisión será hacia el subdirectorio pcmcia.

3.3 fallos en la búsqueda de interrupciones

Síntomas:

Después de identificar el tipo de controlador, el controlador del socket sondea las interrupciones libres. Este «sondeo» o «tanteo» consiste en programar el controlador para cada interrupción aparentemente libre, generando una interrupción soft (suave), para ver si la interrupción puede ser detectada correctamente. En algunos casos, el sondear una interrupción en particular puede interferir con otro dispositivo del sistema.

La razón de este «tanteo» es identificar interrupciones que parezcan estar libres (es decir, aquellas que no están reservadas por otro controlador de dispositivo), ya sea porque no esté conectado físicamente a la controladora, o que esté conectado a otro dispositivo que no tiene un controlador.

En el registro del sistema, un sondeo realizado con éxito tiene este aspecto:

       Intel PCIC probe:
         TI 1130 CardBus at mem 0x10211000, 2 sockets
         ...
         ISA irqs (scanned) = 5,7,9,10 status change on irq 10

Hay dos formas de proceder:

En cualquier caso, las opciones de tanteo pueden especificarse en el script de inicio de PCMCIA utilizando la definición PCIC_OPTS, por ejemplo:

        PCIC_OPTS="irq_list=5,9,10"

Como podrá notar, /proc/interrupts es absolutamente inútil cuando se van a diagnosticar problemas en el sondeo de interrupciones. El tanteo es lo suficientemente sensible como para nunca intentar usar una interrupción que ya está en uso por otro controlador de Linux. Los controladores PCMCIA están ya teniendo en cuenta toda la información de /proc/interrupts. Dependiendo del diseño del sistema, un dispositivo inactivo puede todavía ocupar una interrupción y causar problemas si es probado por PCMCIA.

3.4 Fallos en la búsqueda de puertos de E/S

Síntomas:

Cuando cardmgr procesa los rangos de puertos de E/S listados en /etc/pcmcia/config.opts, el kernel tantea esos rangos para detectar los dispositivos latentes que ocupan espacio de E/S pero que no están asociados con un controlador de Linux. El tanteo es de sólo lectura, pero en algunos casos extraños, leer desde un dispositivo puede interferir con una función importante del sistema, resultando en «congelamiento».

La guía de usuario de su sistema debe traer un mapa de los dispositivos del sistema, mostrando sus rangos de E/S y de memoria. Esos pueden ser excluidos explícitamente en config.opts.

Por otra parte, si el sondeo no resulta fiable en su sistema, puede ser desactivado estableciendo CORE_OPTS a probe_io=0. En este caso, deberá ser muy cuidadoso al especificar solamente rangos de puertos genuinamente disponibles en config.opts, en lugar de usar las configuraciones por omisión.

3.5 Fallos durante la comprobación de la memoria

Síntomas:

O alternativamente:

Los módulos principales realizan un chequeo de los primeros 16 bits de memoria en el momento en que se inserta la tarjeta. Esta exploración puede interferir potencialmente con otros dispositivos de memoria mapeados. Así mismo, los paquetes de controladores pre-3.0.0 realizan una exploración más agresiva que los controladores más recientes. La ventana de memoria se define en /etc/pcmcia/config.opts. La ventana por omisión es grande, así que puede ayudar a restringir la exploración a un rango más reducido. Los rangos razonables para incluir son: 0xd0000-0xdffff, 0xc0000-0xcffff, 0xc8000-0xcffff, o 0xd8000-0xdffff.

Si tiene controladores PCMCIA DOS o Windows, puede deducir que región de memoria usan esos controladores. Tenga en cuenta que las direcciones de memoria de DOS se especifican normalmente en forma de «segmentos», los cuales dejan el último dígito hexadecimal (así una dirección absoluta de 0xd0000 puede darse como 0xd000). Asegúrese de añadir el dígito extra de cuando haga los cambios a config.opts.

En casos no muy usuales, un fallo en el sondeo de memoria puede indicar un problema de configuración en la sincronización con el controlador. Revise la sección Opciones de inicio para más información acerca de cómo combatir los problemas comunes de sincronización.

Los puentes CardBus pueden reservar ventanas de memoria fuera del «agujero de memoria» de 640KB-1MB en la arquitectura de bus ISA. Generalmente es buena idea el configurar puentes CardBus para usar ventanas de memoria alta, porque es muy difícil que existan conflictos con otros dispositivos. También, las tarjetas CardBus pueden requerir grandes ventanas de memoria, las cuales puede ser difícil o imposible que coincidan en memoria baja. Los servicios de tarjetas preferentemente localizarán las ventanas en memoria alta para puentes CardBus, si ambas ventanas de memoria (alta y baja) se definen en config.opts. El archivo config.opts por omisión ahora incluye una ventana de memoria alta de 0xa0000000-0xa0ffffff. Si tiene un puente CardBus y ha actualizado de una versión de PCMCIA anterior, añada esta ventana de memoria si no está ya definido.

En algunos casos, la ventana de memoria alta por omisión no se utiliza.

En algunos modelos IBM Thinkpad, una ventana de 0x60000000-0x60ffffff funcionará en lugar de la ventana por omisión.

3.6 Fallo al detectar cuando se inserta o se extrae la tarjeta

Síntomas:

En muchos casos, el controlador del socket (i82365 o tcic) probará automáticamente y seleccionará la interrupción apropiada para señalar cambios en el estado de la tarjeta. El tanteo automático de interrupciones no funciona con algunos controladores compatibles con Intel, incluyendo los chips Cirrus y los chips usados en IBM Thinkpads. Si un dispositivo está inactivo en el momento del sondeo, su interrupción puede parecer estar disponible. En esos casos, el controlador del socket puede usar una interrupción que es usada por otro dispositivo.

Con los controladores i82365 y tcic la opción list_irq puede usarse para limitar las interrupciones que serán tanteadas. Esta lista limita el conjunto de interrupciones que pueden ser utilizadas por las tarjetas PCMCIA así como para monitorizar los cambios en el estado de la tarjeta. La opción cs_irq puede usarse también para establecer explícitamente la interrupción que será utilizada para monitorizar dichos cambios.

Si no puede encontrar un número de interrupción que funcione, hay también un estado en modo de búsqueda: ambos, i82365 y tcic aceptarán una opción poll_interval=100, para buscar cambios en el estado de la tarjeta una vez por segundo. Esta opción puede usarse también si su sistema tiene un rango corto de interrupciones disponibles para utilizarse con tarjetas PCMCIA. Especialmente para sistemas con más de un controlador de host, hay un pequeño punto para dedicar interrupciones para monitorizar cambios de estado de la tarjeta.

Todas esas opciones deberían establecerse en la línea PCIC_OPTS= ya sea en /etc/rc.d/rc.pcmcia o en /etc/sysconfig/pcmcia, dependiendo de la configuración de su sistema.

3.7 Faltan recursos del sistema

Síntomas:

La reserva de interrupciones indica generalmente un problema con el sondeo de interrupciones, véase la sección Fallos en la búsqueda de interrupciones.

En algunos casos, el tanteo parece funcionar, pero únicamente aparecen una o dos interrupciones disponibles. Revise el registro de su sistema para ver si los resultados de la exploración son plausibles. Desactivar el tanteo y seleccionar las interrupciones manualmente puede ayudar.

Si el sondeo de interrupciones no está funcionando adecuadamente, el controlador del socket puede reservar una interrupción para monitorizar inserciones de tarjetas, incluso cuando las interrupciones sean demasiado escasas para esto, constituye una buena idea. En este caso, puede Vd. cambiar el controlador a modo de búsqueda estableciendo PCIC_OPTS a poll_interval=100. O, si tiene un controlador CardBus, intente con pci_csc=1, el cual selecciona una interrupción PCI (si está disponible) para cambios de estado en la tarjeta.

La reserva de puertos de E/S no es muy común, pero algunas veces tiene lugar con tarjetas que requieren regiones de espacio de E/S grandes, contiguas y alineadas, o que sólo reconocen pocas posiciones específicas de puertos. Los rangos de puertos de E/S por omisión en /etc/pcmcia/config.opts normalmente son suficientes, pero pueden ser extendidos. En casos extraños, la reserva puede indicar que falló el sondeo de puertos de E/S; revise la sección fallos en la búsqueda de puertos de E/S.

La reserva de memoria no es común tampoco con las configuraciones de la ventana de memoria que vienen por omisión en config.opts. Las tarjetas CardBus pueden requerir regiones de memoria más grandes que las tarjetas típicas de 16-bits. Dado que de que las ventanas de memoria de las tarjetas CardBus pueden ser mapeadas a cualquier parte del espacio de la dirección PCI del host (en lugar de sólo mapearlo al «agujero» de 640K-1MB en sistemas PC), es de utilidad especificar ventanas de memoria amplias en la memoria alta, tales como 0xa0000000-0xa0ffffff.

3.8 Conflicto de recursos entre dos tarjetas

Síntomas:

Esto usualmente indica un conflicto de recursos con un dispositivo del sistema que Linux no conoce. Los dispositivos PCMCIA son configurados dinámicamente, así, por ejemplo, las interrupciones son reservadas conforme se vayan necesitando, en lugar de ser asignadas específicamente a tarjetas o sockets en particular. Dada una lista de recursos que parecen estar disponibles, las tarjetas son recursos asignados en el orden en que son configurados. En este caso, a la tarjeta configurada en último lugar se le está asignando un recurso que en efecto, no está libre.

Revise el registro del sistema para ver qué recursos están usados por la tarjeta que no funciona. Exclúyalos de /etc/pcmcia/config.opts, y reinicie el demonio cardmgr para recargar la base de datos de recursos.

3.9 No se completa la configuración de dispositivos

Síntomas:

Esto indica que la tarjeta fue identificada con éxito, sin embargo, cardmgr fue incapaz de completar el proceso de configuración por alguna razón. La más común es que un paso en el script de configuración se ha bloqueado. Un buen ejemplo podría ser el script de red bloqueándose si una tarjeta de red se inserta sin tener presente una conexión a la red.

Para verificar el problema, puede ejecutar manualmente un script de configuración para ver dónde se está bloqueando. Los scripts están en el directorio /etc/pcmcia. Toman dos parámetros: un nombre de dispositivo, y una acción. El demonio cardmgr graba los comandos de configuración en el registro del sistema. Por ejemplo, si el registro del sistema muestra que el comando ./network start eth0 fue el último comando ejecutado por cardmgr, el siguiente comando puede rastrear el script:

       sh -x /etc/pcmcia/network start eth0


Página siguiente Página anterior Índice general