Logo de AulaDigital

PCMCIA Como 4

Linux PCMCIA COMO : Uso y características Página siguiente Página anterior Índice general

4. Uso y características

4.1 Herramientas para configurar y monitorizar dispositivos PCMCIA

Si los módulos son todos cargados correctamente, la salida del comando lsmod debería verse como sigue, cuando no hay tarjetas insertadas:

  Module                  Size  Used by
  ds                      5640   2
  i82365                 15452   2
  pcmcia_core            30012   3  [ds i82365]

El registro del sistema deberá también incluir la salida del controlador del socket, describiendo el(los) controlador(es) del host encontrado(s) y el número de sockets detectados.

El demonio de configuración cardmgr

El demonio cardmgr es responsable de monitorizar los sockets PCMCIA, cargando los controladores cuando se necesita, y corriendo scripts a nivel de usuario en respuesta a las inserciones y extracciones de tarjetas. Graba sus acciones en el registro del sistema, y también usa pitidos para señalar cambios en el estado de las tarjetas. Los tonos de los pitidos indican el éxito o fracaso de un paso de la configuración en particular. Dos pitidos agudos indican que la tarjeta fue identificada y configurada correctamente. Un pitido agudo seguido de un pitido grave indica que la tarjeta fue identificada, pero no pudo ser configurada por alguna razón. Un pitido grave indica que la tarjeta no pudo ser identificada.

cardmgr registra información del dispositivo para cada socket en /var/run/stab

He aquí el contenido de un ejemplo de /var/run/stab:

       Socket 0: Adaptec APA-1460 SlimSCSI
       0       scsi    aha152x_cs      0       sda     8       0
       0       scsi    aha152x_cs      1       scd0    11      0
       Socket 1: Serial or Modem Card
       1       serial  serial_cs       0       ttyS1   5       65

Para las líneas que describen dispositivos, el primer campo es el socket, el segundo es la clase del dispositivo, el tercero es nombre del controlador, el cuarto se usa para numerar múltiples dispositivos asociados con el mismo controlador, el quinto es el nombre del dispositivo, y los dos campos finales son los números mayor y menor para este dispositivo (si es aplicable).

El demonio cardmgr configura tarjetas basadas en una base de datos de tipos de tarjetas conocidas almacenadas en /etc/pcmcia/config. Este archivo describe una variedad de controladores, describe cómo identificar esas tarjetas, y cual(es) controlador(es) pertenecen a cada tarjeta. El formato de este archivo se describe en la página del manual de pcmcia(5).

Las utilidades cardctl y cardinfo

El comando cardctl puede ser usado para comprobar el estado de un socket, o para ver cómo está configurado. También puede ser usado para alterar el estado de configuración de una tarjeta. He aquí un ejemplo de la salida del comando cardctl config:

  Socket 0:
    not configured
  Socket 1:
    Vcc = 5.0, Vpp1 = 0.0, Vpp2 = 0.0
    Card type is memory and I/O
    IRQ 3 is dynamic shared, level mode, enabled
    Speaker output is enabled
    Function 0:
      Config register base = 0x0800
        Option = 0x63, status = 0x08
      I/O window 1: 0x0280 to 0x02bf, auto sized
      I/O window 2: 0x02f8 to 0x02ff, 8 bit

O cardctl ident, para obtener información de la identificación de la tarjeta:

       Socket 0:
         no product info available
       Socket 1:
         product info: "LINKSYS", "PCMLM336", "A", "0040052D6400"
         manfid: 0x0143, 0xc0ab
         function: 0 (multifunction)

Los comandos cardctl suspend y cardctl resume pueden usarse para desactivar una tarjeta sin descargar sus controladores asociados. El comando cardctl reset intenta resetear y reconfigurar una tarjeta. cardctl insert y cardctl eject emulan las acciones realizadas cuando una tarjeta es insertada o expulsada, incluyendo la carga y descarga de los controladores, y configurando o desactivando los dispositivos.

Si está Vd. corriendo X, cardinfo produce de forma gráfica el estado actual de todos los sockets PCMCIA, similar en contenido a cardctl config. También proporciona una interfaz gráfica para la mayoría de las otras funciones de cardctl.

Inserción y extracción de tarjetas

En teoría, puede insertar y extraer tarjetas PCMCIA en cualquier momento. Sin embargo, es una buena idea no expulsar una tarjeta que está siendo utilizada por algún programa de aplicación. Los kernels anteriores al 1.1.77 solían congelarse cuando las tarjetas serie/módem eran expulsadas, aunque esto parece estar ya solucionado.

Servicios de Tarjetas y Administración Avanzada de Energía

Los servicios de tarjetas pueden ser compilados con soporte para APM (Advanced Power Management) (En castellano: Administración Avanzada de Energía), si configuró su kernel con soporte APM. APM está actualmente a cargo de Stephen Rothwell, Stephen.Rothwell@canb.auug.org.au. El demonio apmd es mantenido por Avery Pennarun, apenwarr@worldvisions.ca), con más información disponible en http://www.worldvisions.ca/~apenwarr/apmd/. Los módulos PCMCIA serán configurados automáticamente para APM si es detectada una versión compatible en el sistema.

Esté APM configurado o no, puede usar cardctl suspend antes de suspender su portátil, y cardctl resume después de «despertarlo», para apagar y reactivar sus tarjetas PCMCIA. No funcionará con un módem que esté en uso, porque el controlador serie no puede guardar y restablecer los parámetros operativos del módem.

APM parece ser inestable en algunos sistemas. Si experimenta problemas con APM y PCMCIA en su sistema, intente localizar el problema en un paquete u otro antes de informar de un bug.

Algunos controladores, notablemente los controladores PCMCIA SCSI, no pueden recuperarse de un ciclo de suspender/despertar. Cuando se usa una tarjeta PCMCIA SCSI, use siempre cardctl eject antes de suspender el sistema.

Apagado del sistema PCMCIA

Para descargar el paquete PCMCIA completo, invoque rc.pcmcia con:

        /etc/rc.d/rc.pcmcia stop

Este script tomará algunos segundos para ejecutarse, para darle tiempo a todos los controladores a desactivarse correctamente. Si un dispositivo está en uso actualmente, el proceso de desactivación será incompleto, y puede que algunos módulos del kernel no sean descargados. Para prevenir esto, use cardctl eject para desactivar todos los sockets antes de invocar rc.pcmcia. El estado de salida del comando cardctl indicará si alguno de los sockets no pudo ser desactivado.

4.2 Un vistazo a los scripts de configuración de PCMCIA

Cada dispositivo PCMCIA tiene una «clase» asociada que describe cómo debe ser configurado y manejado. Las clases están asociadas con los controladores de dispositivos en /etc/pcmcia/config. Actualmente hay cinco clases de dispositivos de E/S (red, SCSI, cdrom, disco, y serie) y dos clases de dispositivos de memoria (memoria y FTL). Para cada clase, hay dos scripts en /etc/pcmcia: un script principal de configuración (por ejemplo, /etc/pcmcia/scsi para dispositivos SCSI), y un script de opciones (por ejemplo, /etc/pcmcia/scsi.options). El script principal de un dispositivo será invocado para configurarlo cuando se inserte una tarjeta, y para desactivar el dispositivo cuando sea extraída. Para tarjetas con varios dispositivos asociados, el script será invocado para cada dispositivo.

Los scripts de configuración inician al extraer algo de información acerca del dispositivo de /var/run/stab. Cada script construye una «dirección de dispositivo», que únicamente describe el dispositivo que ha sido solicitado para configurar, en la variable de shell ADDRESS. Esto es pasado al script *.opts, el cual debe proporcionar información acerca de cómo debe ser configurado un dispositivo en esta dirección. Para algunos, la dirección del dispositivo es sólo el número de socket. Para otros, se incluye información extra que puede ser útil para decidir cómo configurar el dispositivo. Por ejemplo, los dispositivos de red pasan su dirección ethernet de hardware como parte de la dirección del dispositivo, así, el script network.opts puede usar esto para seleccionar diversas configuraciones.

La primera parte de todas las direcciones de dispositivos es el «esquema» PCMCIA actual. Ese parámetro es usado para soportar múltiples conjuntos de configuraciones de dispositivos basadas en una simple variable externa definida por el usuario. Una uso de los esquemas puede ser el tener un esquema de «casa», y un esquema de «trabajo», el cual puede incluir diferentes conjuntos de parámetros de configuración de red. El esquema actual se selecciona usando el comando cardctl scheme. Si no se define un esquema, por omisión se establece el esquema default.

Como regla general, cuando se configura Linux para un equipo portátil, los dispositivos PCMCIA deben ser configurados desde los scripts para dispositivos PCMCIA. No intente configurar un dispositivo PCMCIA de la misma forma en que configuraría un dispositivo conectado de forma permanente. No obstante, algunas distribuciones de Linux suministran paquetes PCMCIA que están relacionadas con las herramientas de configuración de dispositivos propios de la misma distribución. En ese caso, alguna de las siguientes secciones puede o no aplicar; idealmente, esto sería documentado por los encargados de la distribución.

4.3 Adaptadores de red PCMCIA

Las interfaces de red tipo ethernet normalmente tienen nombres como eth0, eth1, y así sucesivamente. Los adaptadores Token-Ring se manejan de forma similar, sin embargo, son llamadas comúnmente tr0, tr1 y así sucesivamente. El comando ifconfig se usa para ver o modificar el estado de una interface de red. Una peculiaridad de Linux es que las interfaces de red no tienen archivos de dispositivo correspondientes en /dev/, así que no se sorprenda si no los encuentra.

Cuando se detecta una tarjeta ethernet, le será asignado el primer nombre de interface que esté libre, normalmente eth0. cardmgr ejecutará el script /etc/pcmcia/network para configurar la interface, la cual normalmente lee las configuraciones de red de /etc/pcmcia/network.opts. Los scripts network, y network.opts serán ejecutados sólo cuando su tarjeta ethernet esté presente. Si su sistema tiene la facilidad de configuración de red automática, puede o no ser PCMCIA. Consulte la documentación de su distribución de Linux y la sección Notas acerca de distribuciones de Linux específicas para determinar si los dispositivos de red PCMCIA deben ser configurados con herramientas automáticas, o editando network.opts.

La dirección de dispositivo pasada a network.opts consiste en cuatro campos separados por comas: el esquema, el número de socket, la instancia de dispositivo, y la dirección ethernet de hardware de la tarjeta, La instancia de dispositivo es usada para numerar dispositivos para tarjetas que tienen varias interfaces de red, así que normalmente será 0. Si tiene varias tarjetas de red usadas para propósitos diferentes, una opción puede ser el configurar las tarjetas basadas en la posición del socket, como en:

       case "$ADDRESS" in
       *,0,*,*)
           # definiciones para tarjeta de red en el socket 0
           ;;
       *,1,*,*)
           # definiciones para tarjeta de red en el socket 1
           ;;
       esac

Alternatívamente, pueden ser configuradas usando su dirección de hardware, como en:

  case "$ADDRESS" in
  *,*,*,00:80:C8:76:00:B1)
      # definiciones para una tarjeta D-Link
      ;;
  *,*,*,08:00:5A:44:80:01)
      # definiciones para una tarjeta IBM
  esac

Parámetros de dispositivos de red

Los siguientes parámetros se pueden definir en network.opts:

IF_PORT

Especifica el tipo de transceptor ethernet, para tarjetas que no sean autodetectadas. Consulte man ifport para ver los nombres de los transceptores.

PUMP

Una opción booleana (y/n): indica si la dirección IP e información de rutado del host se puede obtener ya sea por BOOTP o DHCP, con el demonio pump.

BOOTP

Una opción booleana (y/n): indica si la dirección IP del host y su información de rutado se obtendrán usando el protocolo BOOTP, con bootpc.

DHCP

Un opción booleana (y/n): indica si la dirección IP del host y su información de rutado se obtendrán de un servidor DHCP, con dhcpcd.

IPADDR

La dirección IP para esta interface.

NETMASK, BROADCAST, NETWORK

Parámetros básicos de red: revise el COMO de red para más información.

GATEWAY

La dirección IP de una máquina pasarela para la subred de este host. Los paquetes con destinos hacia afuera de esta subred serán destinados a dicha pasarela.

DOMAIN

El nombre de dominio de la red local para este host, es usado al crear /etc/resolv.conf.

SEARCH

Una lista de búsqueda para búsqueda de nombres, es añadida a /etc/resolv.conf. DOMAIN y SEARCH son mutuamente exclusivos: revise man resolver para más información.

DNS_1,DNS_2,DNS_3

Nombres de host o direcciones IP para servidores de nombres para esta interface, para ser añadidos a /etc/resolv.conf

MOUNTS

Una lista de puntos de montaje NFS para ser montados por esta interface.

IPX_FRAME, IPX_NETNUM

Para redes IPX: el tipo de frame y número de red, pasado al comando ipx_interface.

Por ejemplo:

  case "$ADDRESS" in
  *,*,*,*)
      IF_PORT="10base2"
      BOOTP="n"
      IPADDR="10.0.0.1"
      NETMASK="255.255.255.0"
      NETWORK="10.0.0.0"
      BROADCAST="10.0.0.255"
      GATEWAY="10.0.0.1"
      DOMAIN="dominio.org"
      DNS_1="dns1.dominio.org"
      ;;
  esac

Para montar y desmontar automáticamente sistemas de archivos NFS, primero añada todos esos sistemas de archivos a /etc/fstab, incluyendo noauto en las opciones de montaje. En network.opts, liste los puntos de montaje de los sistemas de archivos en la variable MOUNTS. Es especialmente importante usar ya sea cardctl o cardinfo para apagar una tarjeta de red cuando NFS se encuentre activo. No es posible desmontar limpiamente los sistemas de archivos NFS si una tarjeta de red es símplemente expulsada sin precaución.

En adición a los parámetros usuales de configuración de red, el script network.opts puede especificar acciones extra a tomar después de que una interface es configurada, o antes de que se apague la interface. Si network.opts define una función de shell llamada start_fn, será invocada por el script de red después de que la interface sea configurada, y el nombre de interface se pasará a la función como su primer (y único) argumento. Similarmente, si es definido, stop_fn se invocará antes de apagar una interfaz.

El tipo de transceptor se puede seleccionar usando la configuración IF_PORT. Esto puede ser, ya sea un valor numérico como en las versiones anteriores de PCMCIA, o una palabra clave que identifique el tipo de transceptor. Todos los controladores de red están configurados por omisión para autodetectar la interface si es posible, o bien, utilizar 10baseT. El comando ifport se puede utilizar para comprobar el tipo de transceptor actual. Por ejemplo:

       # ifport eth0 10base2
       #
       # ifport eth0
       eth0    2 (10base2)

El controlador actual (3.0.10 o posterior) de 3c589 debe autodetectar rápidamente los cambios de transceptor en cualquier momento. Las primeras versiones del controlador 3x589 tenían un algoritmo de autodetección de transceptores algo lento y no muy amistoso. Para esas versiones, el cable de red apropiado debe ser conectado a la tarjeta cuando la tarjeta es configurada, o se puede forzar la autodetección con:

       ifconfig eth0 down up

Comentarios acerca de tarjetas específicas

  • Con las tarjetas IBM CCAE y Socket EA, el tipo de transceptor (10base2, 10baseT, AUI), necesita configurarse cuando el dispositivo de red está configurado. Asegúrese de que el tipo de transceptor que aparece en el registro del sistema concuerda con su conexión.
  • Los controladores para tarjetas SMC, Megahertz, Ositech, y 3Com deben autodetectar el tipo de red conectada (10base2 o 10baseT). Establecer el tipo de transceptor cuando se carga el controlador sirve para definir la «primera búsqueda» de la tarjeta.
  • La Farallon EtherWave actualmente está basada en la 3Com 3c589, con un transceptor especial. Aunque la EtherWave usa conexiones al estilo 10baseT, su transceptor requiere que la 3c589 sea configurada en modo 10base2.
  • Si tiene problemas con un adaptador IBM CCAE, NE4100, Thomas Conrad, o Kingston, pruebe a incrementar el tiempo de acceso con la opción mem_speed=# al módulo pcnet_cs. Un ejemplo de cómo hacer esto se muestra en el archivo config.opts. Pruebe con velocidades por encima de 1000 (en nanosegundos).
  • Para el adaptador New Media Ethernet, en algunos sistemas, puede ser necesario incrementar el tiempo de acceso al puerto de E/S con la opción io_speed=# cuando se cargue el módulo pcmcia_core. Edite CORE_OPTS en el script de inicio para activar esta opción.
  • El soporte multicast en el controlador New Media Ethernet está incompleto. El último controlador funcionará con kernels multicast, pero ignorará los paquetes multicast. El modo promiscuo debe funcionar apropiadamente.
  • El controlador usado por los controladores token ring IBM y 3Com parecen comportarse bastante mal si las tarjetas no están conectadas cuando son inicializadas. Conecte siempre esas tarjetas a la red antes de activarlas. Si ifconfig informa que la dirección de harware como todo 0, esto debe ser debido a un problema de configuración de la ventana de memoria.
  • Algunas tarjetas Linksys, D-Link, e IC-Card 10baseT/10base2 tienen una forma única de seleccionar el tipo de transceptor que no es manejado por los controladores de Linux. Una solución es arrancar DOS y utilizar la utilidad proporcionada por el fabricante para seleccionar el transceptor, haciendo entonces un arranque «en caliente» de Linux. Alternativamente, hay una utilidad Linux para realizar esta función, que está disponible en ftp://hyper.stanford.edu/pub/pcmcia/extras/dlport.c.
  • Para adaptadores de red inalámbricos WaveLAN, Jean Tourrilhes, jt@hpl.hp.com) tiene disponible el Wireless HOWTO (Cómo inalámbrico) en http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/

Diagnóstico de problemas con adaptadores de red

  • ¿Es reconocida su tarjeta como una tarjeta ethernet? Revise el registro del sistema y asegúrese de que cardmgr identifique la tarjeta correctamente e inicia uno de los controladores de red. Si no lo hace, su tarjeta puede ser utilizable todavía si es compatible con una tarjeta soportada. Esto es posible hacerlo fácilmente si la tarjeta dice ser NE2000 compatible.
  • ¿Está configurada la tarjeta apropiadamente? Si está usando una tarjeta soportada, y fue reconocida por cardmgr, pero todavía no funciona, pudo ser un conflicto de interrupción o puerto con otro dispositivo. Determine qué recursos está utilizando la tarjeta (en el registro del sistema), e intente de nuevo excluyéndolos en /etc/pcmcia/config.opts para forzar a la tarjeta a usar otros.
  • Si su tarjeta parece estar configurada adecuadamente, pero a veces se congela, particularmente bajo carga alta, puede ser que necesite intentar cambiar los parámetros de sincronización de su controlador del socket. Revise la sección Opciones de Inicio para más información.
  • Si obtiene mensajes de network unreachable cuando intenta acceder a la red, la información especificada en /etc/pcmcia/network.opts es incorrecta. Este mensaje es una indicación absolutamente a prueba de tontos de que hay un error de rutado. Por otra parte, las tarjetas mal configuradas normalmente fallarán silenciosamente.
  • Para diagnosticar problemas en /etc/pcmcia/network.opts, empiece tratando de hacer ping a otros sistemas en la misma subred usando sus direcciones IP. Trate entonces de hacer ping a su puerta de enlace o «pasarela» (gateway), y a máquinas en otras subredes. Debe ser posible hacer ping a las máquinas por su nombre si lleva a cabo dichas pruebas con éxito.
  • Asegúrese que su problema sea PCMCIA. Puede ser muy útil comprobar si la tarjeta funciona correctamente bajo DOS con los controladores del fabricante. Verifique bien sus modificaciones al script /etc/pcmcia/network.opts. Asegúrese que su cable, conector «T», terminador, etc. estén funcionando.

4.4 Dispositivos serie PCMCIA y módems

Los dispositivos serie de Linux son gestionados por medio de los archivos de dispositivo especiales /dev/ttyS* y /dev/cua*. En los kernels pre-2.2 los dispositivos ttyS* eran para conexiones entrantes, como módems. El uso de dispositivos cua* se desaprueba en los kernels actuales, y se puede usar ttyS* para todas las aplicaciones. La configuración de un dispositivo serie se puede examinar y modificar con el comando setserial.

Cuando se detecta una tarjeta serie o módem, se le asignará el primer slot de dispositivo serie que se encuentre disponible. Este será usualmente /dev/ttyS1 (cua1) o /dev/ttyS2 (cua2), dependiendo del número de puertos serie que tenga. El dispositivo ttyS* es el que aparecerá en /var/run/stab. El script de opciones por omisión para dispositivos serie, /etc/pcmcia/serial.opts, enlazará el dispositivo a /dev/modem por conveniencia. Para los kernels pre-2.2, el enlace se hace al dispositivo cua*.

No intente usar /etc/rc.d/rc.serial para configurar un módem PCMCIA. Este script sólo debería ser utilizado para configurar dispositivos no extraíbles. Modifique /etc/pcmcia/serial.opts si quiere hacer algo especial para configurar su módem. No intente tampoco cambiar las configuraciones de E/S y puerto de un dispositivo serie utilizando setserial. Esto podría decir al controlador serie que busque al dispositivo en un lugar diferente, pero no cambiar cómo el hardware de la tarjeta está configurado actualmente. El script de configuración serie le permite especificar otras opciones para setserial, así como si se debe añadir una línea a /etc/inittab para este puerto.

La dirección del dispositivo pasada a serial.opts tiene tres campos separados por comas: el primero es el esquema, el segundo es el número de socket, y el tercero es la instancia del dispositivo. La instancia del dispositivo puede tomar varios valores para tarjetas que soporten múltiples puertos serie, pero para tarjetas de un sólo puerto, siempre será 0. Si comunmente usa más de un módem, puede especificar diferentes configuraciones basadas en la posición del socket, como en:

       case "$ADDRESS" in
       *,0,*)
           # Opciones para un modem en el socket 0
           LINK=/dev/modem0
           ;;
       *,1,*)
           # Opciones para un modem en el socket 1
           LINK=/dev/modem1
           ;;
       esac

Si un módem PCMCIA ya está configurado cuando Linux arranca, puede ser identificado incorrectamente como un puerto serie ordinario. Esto es inofensivo, sin embargo, cuando los controladores PCMCIA toman el control del módem, se le asignará un slot de dispositivo diferente. Por ello es mejor, ya sea analizar /var/run/stab o usar /dev/modem, en lugar de indicar que este módulo debe recargarse. Edite la entrada del dispositivo serie, de modo que se lea:

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

Parámetros de dispositivos serie

Los siguientes parámetros se pueden definir en serial.opts:

LINK

Especifica una ruta para un enlace simbólico a crear al dispositivo callout (para llamar hacia el exterior) (ejemplo, /dev/cua* para kernels pre-2.2 o /dev/ttyS* para kernels 2.2.x).

SERIAL_OPTS

Especifica las opciones que se pasan al comando setserial.

INITTAB

Si se especifica, se usará para añadir una entrada inittab para el dispositivo.

Por ejemplo:

       case "$ADDRESS" in
       *,*,*,*)
           LINK="/dev/modem"
           SERIAL_OPTS=""
           INITTAB="/sbin/getty"

Diagnóstico de problemas con dispositivos serie

  • ¿Se reconoce su tarjeta como un módem? Revise el registro del sistema y asegúrese que cardmgr identifica la tarjeta correctamente e inicia el controlador serial_cs. Si no, necesitará añadir una nueva entrada en el fichero /etc/pcmcia/config para que pueda ser identificado apropiadamente. Consulte la sección Configuración de tarjetas no reconocidas para más detalles.
  • ¿Es el módem configurado satisfactoriamente por serial_cs? Nuevamente, revise el registro del sistema y busque los mensajes del controlador serial_cs. Si ve mensajes como register_serial() failed debe tener un conflicto de puerto de E/S con otro dispositivo. Otra causa de conflictos tiene lugar cuando el dispositivo es reconocido como una UART 8250; la mayoría de módems modernos deben identificarse como UART 16550A. Si piensa que está viendo un conflicto de puertos, edite /etc/pcmcia/config.opts y excluya el rango de puertos que fue reservado para el módem.
  • ¿Hay un conflicto de interrupciones? Si el registro del sistema se parece normal, pero el módem no funciona, pruebe a cambiar la irq a 0 usando setserial y comprobar si el módem funciona. Esto causa que el controlador serie use un modo de búsqueda más bajo en lugar de usar interrupciones. Si esto parece solucionar el problema, es probable que otro dispositivo del sistema esté usando la interrupción seleccionada por serial_cs. Deberá añadir una línea a /etc/pcmcia/config.opts para excluir esta interrupción.
  • Si el módem parece funcionar muy, muy lento, esto es casi un indicador seguro de un conflicto de interrupciones. Asegúrese que su problema sea realmente PCMCIA. Puede ayudarle comprobar si la tarjeta funciona bajo DOS con los controladores del fabricante. Así mismo, evite probar la tarjeta con algo complicado como SLIP o PPP hasta que esté seguro que haga conexiones simples. Si es capaz de establecer «conexiones simples», pero no con SLIP, su problema es más probable que tenga que ver con SLIP, y no con PCMCIA.
  • Si obtiene mensajes del kernel indicando que el módulo serial_cs no puede cargarse, significa que su kernel no tiene soporte para dispositivo serie. Si ha compilado el controlador serie como módulo, debe modificar /etc/pcmcia/config para indicar que el módulo serie debe cargarse antes de serial_cs.

4.5 Dispositivos PCMCIA de puerto paralelo

El controlador de puerto paralelo de Linux está estructurado por capas, así que varios tipos de dispositivos de alto nivel pueden compartir el mismo controlador de puerto de bajo nivel. Los dispositivos se gestionan a través de los archivos especiales de dispositivo /dev/lp*. La configuración de un dispositivo de impresora puede examinarse y modificarse con el comando tunelp.

El módulo parport_cs depende de los controladores parport y parport_pc, los cuales pueden ser compilados dentro del kernel o bien compilados como módulos. La estructura del controlador por capas significa que cualquiera de los controladores paralelos de alto nivel (tales como el controlador plip, el controlador de impresora, etc.) deben ser compilados como módulos. Estos controladores sólo reconocen dispositivos de puerto paralelo en el momento de iniciar el módulo, así que pueden cargarse después de que cualquier dispositivo paralelo PC Card sea configurado.

La dirección del dispositivo pasada a parport.opts tiene tres campos separados por comas: el primero es el esquema, el segundo es el número de socket, y el tercero es la instancia del dispositivo. La instancia del dispositivo puede tomar varios valores para tarjetas que soportan múltiples puertos paralelos, pero para tarjetas de un solo puerto, siempre será 0. Si usa habitualmente más de una tarjeta, necesitará especificar diferentes configuraciones basadas en la posición del socket, como en:

       case "$ADDRESS" in
       *,0,*)
           # Opciones para una tarjeta en el socket 0
           LINK=/dev/printer0
           ;;
       *,1,*)
           # Opciones para una tarjeta en el socket 1
           LINK=/dev/printer1
           ;;
       esac

Si configura el kernel para cargar el controlador básico de puerto paralelo como módulo, debe editar /etc/pcmcia/config para indicar qué módulos necesitan cargarse. Edite la entrada para el dispositivo paralelo de modo que se lea:

       device "parport_cs"
         class "parport" module "misc/parport", "misc/parport_pc", "parport_cs"

Parámetros de dispositivos paralelos

Los siguientes parámetros pueden especificarse en parport.opts:

LINK

Especifica la ruta del enlace simbólico a crear hacia el puerto de impresora.

LP_OPTS

Especifica las opciones a pasar al comando tunelp.

Por ejemplo:

       case "$ADDRESS" in
       *,*,*,*)
           LINK="/dev/printer"
           LP_OPTS=""

Diagnóstico de problemas con dispositivos de puertos paralelos

  • ¿Hay un conflicto de interrupciones? Si el registro del sistema parece estar bien, pero el puerto no funciona, cambie la irq a 0 usando tunelp, y compruebe si las cosas mejoran. Esto cambia el controlador a modo de búsqueda. Si parece solucionar el problema, es probable que otro dispositivo en su sistema esté utilizando la interrupción seleccionada por parport_cs. Deberá añadir una línea a /etc/pcmcia/config.opts para excluir esta interrupción.
  • Si su kernel genera mensajes indicando que el módulo parport_cs no puede cargarse, significa que el kernel no tiene soporte para dispositivos paralelos. Si tiene compilado el controlador paralelo como módulo, necesita modificar /etc/pcmcia/config para indicar que los módulos parport y parport_pc deben cargarse antes que parport_cs.

4.6 Adaptadores SCSI PCMCIA

Todos los controladores que dan soporte actualmente a tarjetas SCSI PCMCIA son trabajos basados en alguna de las siguientes tarjetas bus ISA: Qlogic, Adaptec AHA-152X, o Future Domain TMC-16x0. Los controladores PCMCIA son compilados enlazando parcialmente código específico PCMCIA (en qlogic_cs.c, toaster_cs.c, o fdomain_cs.c) con el controlador SCSI normal de Linux. Debido a las limitaciones en el modelo del controlador SCSI de Linux, sólo se soporta una tarjeta extraíble por controlador.

Cuando se detecta un nuevo adaptador SCSI, los controladores SCSI sondearán la presencia de dispositivos. Revise el registro del sistema para asegurar que los dispositivos sean detectado apropiadamente. Los nuevos dispositivos SCSI se asignarán a los primeros archivos de dispositivo SCSI disponibles. El primer disco SCSI será /dev/sda, la primera cinta SCSI será /dev/st0, y el primer CD-ROM será /dev/scd0.

En /var/run/stab se muestra una lista de los dispositivos conectados a este adaptador, y el script de configuración /etc/pcmcia/scsi se llamará una vez para cada dispositivo conectado, ya sea para configurar o apagar ese dispositivo. El script por omisión no toma ninguna acción para configurar dispositivos SCSI, pero desmontará apropiadamente los sistemas de archivos en dispositivos SCSI cuando se extraiga la tarjeta.

Las direcciones de dispositivo que se pasan a scsi.opts son complicadas, debido a la variedad de cosas que pueden conectarse a un adaptador SCSI. Las direcciones consisten de de seis o siete campos separados por comas: el esquema actual, el tipo de dispositivo, el número de socket, el canal SCSI, ID, y el número lógico de unidad, y opcionalmente, el número de partición. El tipo de dispositivo será sd para discos, st para cintas, sr para unidades de CD-ROM, y sg para dispositivos SCSI genéricos. Para la mayoría de configuraciones, la unidad lógica y el canal SCSI serán 0. Para unidades de disco con varias particiones, scsi.opts se llamará primero para toda la unidad, con direcciones de cinco campos. El script deberá establecer la variable PARTS una lista de particiones. Entonces, scsi.opts será llamado para cada partición, con las direcciones más largas, de siete campos.

Si su kernel no tiene un controlador de alto nivel (disco, cinta, etc) para un dispositivo SCSI en particular, entonces no será configurado por los controladores PCMCIA. Como efecto lateral, el nombre del dispositivo en /var/run/stab será algo como sd#nnnn donde nnnn es un número hexadecimal de cuatro dígitos. Esto pasa cuando cardmgr no puede traducir una ID de un dispositivo SCSI a su nombre de dispositivo correspondiente en Linux.

Es posible modularizar los controladores SCSI de alto nivel para que puedan cargarse según demanda. Para hacerlo, necesita editar /etc/pcmcia/config para decirle a cardmgr qué módulos extra necesitan ser cargados cuando sea configurado su adaptador. Por ejemplo:

       device "aha152x_cs"
         class "scsi" module "scsi/scsi_mod", "scsi/sd_mod", "aha152x_cs"

Especificaría que se cargase el módulo principal SCSI y el módulo controlador de disco antes de cargar el módulo controlador PCMCIA normal. El script Configure de PCMCIA no detectará automáticamente módulos SCSI modularizados, así que necesitará usar la opción de configuración manual para habilitar el soporte SCSI.

Encienda siempre los dispositivos SCSI antes de encender su portátil, o antes de insertar la tarjeta adaptadora, para que el bus SCSI esté listo cuando el adaptador se configure. También hay que ser muy cuidadoso al expulsar un adaptador SCSI. Asegúrese que todos los dispositivos SCSI asociados sean desmontados y cerrados antes de expulsar la tarjeta. La mejor forma de asegurar esto es usar cardctl o cardinfo para solicitar que se desactive la tarjeta antes de expulsarla físicamente. Por ahora, todos los dispositivos SCSI deberán encenderse antes de conectar un adaptador SCSI, y deberán permanecer conectados hasta que desconecte el adaptador y/o apague su portátil.

Hay una complicación potencial cuando se usan tarjetas que no se presentan con adaptadores de bus ISA ordinarios. El bus SCSI transporta una señal termination power (corriente de terminación) que se necesita para que los terminadores pasivos SCSI ordinarios funcionen apropiadamente. Los adaptadores PCMCIA SCSI no suministran corriente de terminación, así que si se requiere, deberá proporcionarlo el dispositivo externo. Algunos dispositivos externos SCSI deben configurarse para suministrarlo. Otros, como el Iomega Zip y el Syquest EZ, usan terminadores activos que no dependen de ello. En algunos casos, puede ser necesario usar un bloque terminador especial como el APS SCSI Sentry 2, el cual tiene una fuente de alimentación externa. Cuando configure la entrada para el dispositivo SCSI, hágalo teniendo en cuenta si alguno de sus dispositivos requieren o pueden suministrar corriente de terminación o no.

Parámetros de dispositivos SCSI

Los siguientes parámetros pueden ser especificados en scsi.opts:

DO_FSTAB

Es una opción booleana (y/n): Especifica si se debe añadir una entrada /etc/fstab para este dispositivo.

DO_FSCK

Es una opción booleana (y/n): Especifica si se debe comprobar este dispositivo antes de ser montado, con fsck -Ta.

DO_MOUNT

Es una opción booleana (y/n): Especifica si este dispositivo debe montarse automáticamente al momento de insertar la tarjeta.

FSTYPE, OPTS, MOUNTPT

El tipo de sistema de archivos, opciones de montaje, y punto de montaje que se utilizarán para la entrada en fstab y/o para montar el dispositivo.

Por ejemplo, un script para configurar una unidad de disco en SCSI ID 3, con dos particiones, y un CD-ROM en SCSI ID 6:

  case "$ADDRESS" in
  *,sd,*,0,3,0)
      # Este dispositivo tiene dos particiones...
      PARTS="1 2"
      ;;
  *,sd,*,0,3,0,1)
      # Opciones para la particion 1:
      #  actualizar /etc/fstab, y montar un sistema de archivos ext2 en /usr1
      DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
      FSTYPE="ext2"
      OPTS=""
      MOUNTPT="/usr1"
      ;;
  *,sd,*,0,3,0,2)
      # Opciones para la partición 2:
      #  actualizar /etc/fstab, y montar un sistema de archivos MS-DOS en /usr2
      DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
      FSTYPE="msdos"
      OPTS=""
      MOUNTPT="/usr2"
      ;;
  *,sr,*,0,6,0)
      # Opciones para un CD-ROM en SCSI ID 6
      PARTS=""
      DO_FSTAB="y" ; DO_FSCK="n" ; DO_MOUNT="y"
      FSTYPE="iso9660"
      OPTS="ro"
      MOUNTPT="/cdrom"
      ;;
  esac

Comentarios acerca de tarjetas específicas

  • La tarjeta Adaptec APA-1480 CardBus necesita una ventana de puerto de E/S grande (256 puertos contiguos alineados en un límite de 256 puertos). Puede que sea necesario incluir las regiones de los puertos de E/S en /etc/pcmcia/config.opts para garantizar que cada ventana pueda encontrarse.
  • No está soportado el adaptador Adaptec APA-460 SlimSCSI. Esta tarjeta se vendió originalmente bajo el nombre de Trantor, y cuando Adaptec se unió a Trantor, continuaron vendiendo la tarjeta Trantor con etiqueta Adaptec. La APA-460 no es compatible con ningún controlador de Linux existente.
  • He sido informado de la mala interacción entre la tarjeta New Media Bus Toaster y un scanner UMAX Astra 1200s. Debido a la complejidad del protocolo SCSI, cuando se diagnostican problemas con dispositivos SCSI, es digno de considerar que combinaciones incompatibles como esta pueden existir y no pueden documentarse.

Diagnóstico de problemas con adaptadores SCSI

  • Con el controlador aha152x_cs (usado por Adaptec, New Media, y algunos más), parece que el soporte SCSI de conexión/reconexión constituye una fuente de problemas frecuentes con dispositivos de cinta. Para desactivar esta «característica», añada lo siguiente a /etc/pcmcia/config.opts:
      module "aha152x_cs" opts "reconnect=0"
    
  • Con el controlador aha152x_cs, ciertos dispositivos parecen requerir un tiempo de espera de inicio más grande, controlado con el parámetro reset_delay del módulo. La unidad CDR Yamaha 4416S es uno de esos dispositivos. El resultado es que el dispositivo es identificado sin problemas, y luego se congela el sistema. En esos casos, pruebe:
           module "aha152x_cs" opts "reset_delay=500"
    
  • Otra fuente potencial de problemas en el sondeo de dispositivos SCSI es el tanteo de LUNs múltiples. Si ve que la detección de un dispositivo es realizada sin problemas, seguida de «timeouts» del bus SCSI cuando se sondea el LUN 1 para ese dispositivo, debe desactivar la opción CONFIG_SCSI_MULTI_LUN del kernel.
  • Si tiene compilado el soporte SCSI modularmente (CONFIG_SCSI es m), debe modificar /etc/pcmcia/config para cargar los módulos SCSI antes de que se cargue el controlador *_cs apropiado.
  • Si obtiene mensajes de tipo aborting command due to timeout (abortando el comando debido a timeout), cuando se sondea el bus SCSI, es muy probable que tenga un conflicto de interrupciones.
  • Si el controlador del host avisa no SCSI devices found (no se han encontrado dispositivos SCSI), verifique que el kernel fue compilado con los controladores SCSI de alto nivel apropiados para sus dispositivos (por ejemplo, disco, cinta, CD-ROM, y/o genéricos). Si falta un controlador de alto nivel, los dispositivos de ese tipo se ignorarán.

4.7 Tarjetas de memoria PCMCIA

El controlador memory_cs maneja todos los tipos de tarjetas de memoria, y también proporciona acceso directo al espacio de la dirección de memoria PCMCIA para tarjetas que tienen otras funciones. Cuando se carga, crea una combinación de dispositivos de caracteres y de bloques. Revise la página del manual del módulo para ver una descripción completa del esquema de nombres de estos dispositivos. Los dispositivos de bloques se usan para tener acceso a disco (creando y montando sistemas de archivos, etc.). Los dispositivos de caracteres son para lecturas en bruto (que no se procesan) que no se guardan en el buffer y son escritas en posiciones arbitrarias.

La dirección de dispositivo que se pasa a memory.opts consiste de dos campos: el esquema, y el número de socket. Las opciones se aplican a la primera partición de memoria común en la tarjeta correspondiente.

Algunas tarjetas de memoria antiguas, y la mayoría de las tarjetas de RAM simple estática, carecen de Card Information Structure, CIS (Estructura de Información de Tarjeta), que es el esquema que las tarjetas PCMCIA usan para identificarse a si mismas. Normalmente, cardmgr asumirá que una tarjeta que carece de CIS es una tarjeta de memoria simple, y cargará el controlador memory_cs. Por tanto, un efecto lateral es que otros tipos de tarjetas pueden detectarse erróneamente como tarjetas de memoria.

El controlador memory_cs usa un algoritmo heurístico para determinar la capacidad de esas tarjetas. Este algoritmo no funciona con tarjetas protegidas contra escritura, y puede cometer errores en algunos otros casos. Si una tarjeta se configura de forma errónea, su tamaño puede especificarse explícitamente cuando se haga uso de los comandos dd o mkfs.

Parámetros de dispositivos de memoria

DO_FSTAB

Es una opción booleana (y/n): Especifica si se debe añadir una entrada /etc/fstab para este dispositivo.

DO_FSCK

Es una opción booleana (y/n): Especifica si se debe comprobar este dispositivo antes de ser montado, con fsck -Ta.

DO_MOUNT

Es una opción booleana (y/n): Especifica si este dispositivo debe montarse automáticamente en el momento de insertar la tarjeta.

FSTYPE, OPTS, MOUNTPT

El tipo de sistema de archivos, opciones de montaje, y punto de montaje que se utilizarán para la entrada en fstab y/o para montar el dispositivo.

He aquí un ejemplo de un script que montará automáticamente las tarjetas de memoria basándose en el socket en que estén insertadas:

       case "$ADDRESS" in
       *,0,0)
           # Montar sistema de archivos, pero no actualizar /etc/fstab
           DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"
           FSTYPE="ext2" ; OPTS=""
           MOUNTPT="/mem0"
           ;;
       *,1,0)
           # Montar sistema de archivos, pero no actualizar /etc/fstab
           DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"
           FSTYPE="ext2" ; OPTS=""
           MOUNTPT="/mem1"
           ;;
       esac

Uso de tarjetas de memoria flash

La dirección de dispositivo que se pasa a ftl.opts consiste en tres o cuatro campos: el esquema, el número de socket, el número de región, y opcionalmente, el número de partición. La mayoría de tarjetas flash tienen sólo una región de memoria flash, así que el número de región será generalmente cero siempre.

Para usar una tarjeta de memoria flash como un dispositivo de bloques del tipo de un disco ordinario, primero se crea una partición FTL, o flash translation layer, en el dispositivo por medio del comando ftl_format. Esta capa oculta los detalles específicos de dispositivo de la programación de la memoria flash y hace que la tarjeta se vea como un simple dispositivo de bloques. Por ejemplo:

       ftl_format -i /dev/mem0c0c

Nótese que este comando accede a la tarjeta por medio de la interface raw de la tarjeta de memoria. Una vez formateada, la tarjeta puede tratarse como un dispositivo de bloques ordinario por medio del controlador ftl_cs. Por ejemplo:

       mke2fs /dev/ftl0c0
       mount -t ext2 /dev/ftl0c0 /mnt

La nomenclatura de dispositivos FTL es difícil. Los números menores de los dispositivos tienen tres partes: el número de tarjeta, el número de región en esa tarjeta, y opcionalmente, la partición dentro de esa región. Una región puede ser tratada como un simple dispositivo de bloques sin tabla de partición (como un disquete), o puede particionarse como un disco duro. El dispositivo ftl0c0 es la tarjeta 0, región de memoria común 0, la región entera. Los dispositivos de ftl0c0p1 a ftl0c0p4 son primariamente las particiones de 1 a 4 si la región ha sido particionada.

Hay dos formatos mayores para tarjetas de memoria flash: el estilo FTL, y el sistema de archivos Microsoft Flash. El formato FTL es generalmente más flexible porque permite que pueda utilizarse cualquier sistema de archivos de alto nivel en una tarjeta flash como si fuera un dispositivo de disco ordinario. El FFS es un tipo sistema de archivos completamente diferente. Linux no puede manejar actualmente tarjetas formateadas con FFS.

Las tarjetas flash Intel Series 100 usan el primer bloque flash de 128k para almacenar la información de la configuración de la tarjeta. Para prevenir el borrado accidental de esta información, ftl_format automáticamente detectará esto y saltará al primer bloque cuando se cree una partición FTL.

4.8 Tarjetas PCMCIA para unidades ATA/IDE

El soporte para unidades ATA/IDE se basa en el controlador IDE regular del kernel. La parte específica PCMCIA del controlador es ide_cs. Asegúrese de usar cardctl o cardinfo para apagar la tarjeta ATA/IDE antes de expulsarla, porque el controlador no fue programado a prueba de extracción en caliente.

La dirección de dispositivo que se pasa a ide.opts consiste de tres o cuatro campos: el esquema actual, el número de socket, el número de serie de la unidad, y un número opcional de partición. El comando ide_info puede usarse para obtener el número de serie del dispositivo IDE. Tal y como sucede con los dispositivos SCSI, ide.opts se llama primero para el dispositivo entero. Si ide.opts retorna una lista de particiones en la variable PARTS, el script entonces se llamará para cada partición.

Parámetros para discos ATA/IDE

Los siguientes parámetros se pueden especificar en ide.opts:

DO_FSTAB

Es una opción booleana (y/n): Especifica si se debe añadir una entrada /etc/fstab para este dispositivo.

DO_FSCK

Es una opción booleana (y/n): Especifica si se debe comprobar este dispositivo antes de ser montado, con fsck -Ta.

DO_MOUNT

Es una opción booleana (y/n): Especifica si este dispositivo debe montarse automáticamente al momento de insertar la tarjeta.

FSTYPE, OPTS, MOUNTPT

El tipo de sistema de archivos, opciones de montaje, y punto de montaje que se utilizarán para la entrada en fstab y/o para montar el dispositivo.

He aqui un ejemplo del archivo ide.opts para montar la primera partición de cualquier tarjeta ATA/IDE en /mnt.

       case "$ADDRESS" in
       *,*,*,1)
           DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
           FSTYPE="msdos"
           OPTS=""
           MOUNTPT="/mnt"
           ;;
       *,*,*)
           PARTS="1"
           ;;
       esac

Diagnóstico de problemas con adaptadores ATA/IDE

  • Algunas unidades IDE violan la especificación PCMCIA al requerir un tiempo mayor para iniciar que el máximo permitido para la configuración de la tarjeta. Desde la versión 3.0.6, el controlador ide_cs automáticamente intentará sondear el dispositivo para darle tiempo de iniciarlos. Con los controladores antiguos, necesita cargar el módulo pcmcia_core con:
           CORE_OPTS="unreset_delay=400"
    
  • Para usar una unidad de CD-ROM ATA/IDE, el kernel debe compilarse con CONFIG_BLK_DEV_IDECD activado. Normalmente será el caso para los kernels estándar, sin embargo es bueno estar enterado por si compila un kernel personalizado.

4.9 Tarjetas multifunción

Se puede compartir una simple interrupción entre varios controladores, como el controlador serie y el controlador ethernet: en efecto: la especificación PCMCIA requiere que todas las funciones de las tarjetas compartan la misma interrupción. Normalmente, todas las funciones de las tarjetas están disponibles sin tener que intercambiar controladores.

El uso simultáneo de dos funciones de tarjetas es algo «difícil» y varios fabricantes de hardware han implementado el compartir interrupciones en sus propias formas incompatibles (y a veces propietarias). Los controladores para algunas tarjetas (Ositech Jack de Diamond, 3Com 3c562, Linksys) soportan de forma apropiada el acceso simultáneo, pero otras (Megahertz en particular) no.

Los kernels antiguos no soportan el compartir interrupciones entre diferentes controladores de dispositivos, así que no es posible para los controladores PCMCIA el configurar esta tarjeta para acceso simultáneo ethernet y módem. Los controladores ethernet y serie se cargan automáticamente. Sin embargo, el controlador ethernet por omisión «posee» la interrupción de la tarjeta. Para usar el módem, puede descargar el controlador ethernet y reconfigurar el puerto serie haciendo algo como:

       ifconfig eth0 down
       rmmod 3c589_cs
       setserial /dev/modem autoconfig auto_irq
       setserial /dev/modem

El segundo setserial debe verificar que el puerto ha sido configurado para usar la interrupción que previamente utilizaba el controlador ethernet.


Página siguiente Página anterior Índice general