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.
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)
.
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
.
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.
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.
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.
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.
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
Los siguientes parámetros se pueden definir en network.opts
:
Especifica el tipo de transceptor ethernet, para tarjetas que
no sean autodetectadas. Consulte man ifport
para ver los nombres
de los transceptores.
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
.
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
.
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
.
La dirección IP para esta interface.
Parámetros básicos de red: revise el COMO de red para más información.
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.
El nombre de dominio de la red local para este host, es usado
al crear /etc/resolv.conf
.
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.
Nombres de host o direcciones IP para servidores de
nombres para esta interface, para ser añadidos a /etc/resolv.conf
Una lista de puntos de montaje NFS para ser montados por esta interface.
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
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).
io_speed=#
cuando se cargue el módulo pcmcia_core
.
Edite CORE_OPTS
en el script de inicio para activar esta opción.
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.
ftp://hyper.stanford.edu/pub/pcmcia/extras/dlport.c
.
jt@hpl.hp.com
) tiene
disponible el Wireless HOWTO (Cómo inalámbrico) en
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
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.
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.
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.
/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.
/etc/pcmcia/network.opts
. Asegúrese que su cable, conector «T»,
terminador, etc. estén funcionando.
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"
Los siguientes parámetros se pueden definir en serial.opts
:
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
).
Especifica las opciones que se pasan al comando
setserial
.
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"
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.
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.
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.
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
.
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"
Los siguientes parámetros pueden especificarse en parport.opts
:
Especifica la ruta del enlace simbólico a crear hacia el puerto de impresora.
Especifica las opciones a pasar al comando tunelp
.
Por ejemplo:
case "$ADDRESS" in
*,*,*,*)
LINK="/dev/printer"
LP_OPTS=""
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.
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
.
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.
Los siguientes parámetros pueden ser especificados en scsi.opts
:
Es una opción booleana (y/n): Especifica si se debe añadir
una entrada /etc/fstab
para este dispositivo.
Es una opción booleana (y/n): Especifica si se debe comprobar
este dispositivo antes de ser montado, con fsck -Ta
.
Es una opción booleana (y/n): Especifica si este dispositivo debe montarse automáticamente al momento de insertar la tarjeta.
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
/etc/pcmcia/config.opts
para garantizar que cada ventana
pueda encontrarse.
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"
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"
CONFIG_SCSI_MULTI_LUN
del kernel.
CONFIG_SCSI
es
m
), debe modificar /etc/pcmcia/config
para cargar los
módulos SCSI antes de que se cargue el controlador *_cs
apropiado.
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.
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.
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
.
Es una opción booleana (y/n): Especifica si se debe añadir
una entrada /etc/fstab
para este dispositivo.
Es una opción booleana (y/n): Especifica si se debe comprobar
este dispositivo antes de ser montado, con fsck -Ta
.
Es una opción booleana (y/n): Especifica si este dispositivo debe montarse automáticamente en el momento de insertar la tarjeta.
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
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.
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.
Los siguientes parámetros se pueden especificar en ide.opts
:
Es una opción booleana (y/n): Especifica si se debe añadir
una entrada /etc/fstab
para este dispositivo.
Es una opción booleana (y/n): Especifica si se debe comprobar
este dispositivo antes de ser montado, con fsck -Ta
.
Es una opción booleana (y/n): Especifica si este dispositivo debe montarse automáticamente al momento de insertar la tarjeta.
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
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"
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.
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.