En teoría, no debe importar qué interrupción se reserva para cada dispositivo, mientras dos dispositivos no sean configurados para usar la misma interrupción.
En /etc/pcmcia/config.opts
encontrará un lugar para excluir las
interrupciones que son usadas por dispositivos no PCMCIA.
De igual modo, no hay forma de especificar directamente las direcciones de
E/S que va a utilizar una tarjeta. El archivo
/etc/pcmcia/config.opts
permite especificar rangos de puertos
disponibles para ser usados por una tarjeta cualquiera, o para excluir
rangos que causan conflictos con otros dispositivos.
Después de modificar /etc/pcmcia/config.opts
, puede reiniciar
cardmgr
con kill -HUP
.
La interrupción que se utiliza para monitorizar el estado de la tarjeta se
determina por el módulo controlador de bajo nivel del socket (i82365
o tcic
) antes de que cardmgr
pase a /etc/pcmcia/config
,
así no se ve afectado con los cambios a este archivo. Para establecer esta
interrupción, use la opción cs_irq=
cuando se cargue el controlador
del socket, estableciendo la variable PCIC_OPTS
en
/etc/rc.d/rc.pcmcia
Todos los controladores de tarjetas tienen un parámetro llamado
irq_list
para especificar qué interrupciones pueden intentar
reservar. Dichas opciones deben establecerse en el archivo
/etc/pcmcia/config
. Por ejemplo:
device "serial_cs"
module "serial_cs" opts "irq_list=8,12"
...
debe especificarse que el controlador serie debe utilizar sólo la irq 8 o
la 12. Sin importar las configuraciones de irq_list
, los Servicios de
Tarjetas nunca reservarán una interrupción que ya esté siendo usada por
otro dispositivo, o una interrupción que esté excluida en el archivo de
configuración.
Esto es bastante fácil con el soporte de «esquemas». Usando dos esquemas
de configuración, llamados casa
y trabajo
. He aquí un ejemplo
del script network.opts
con configuraciones específicas de esquemas:
case "$ADDRESS" in
trabajo,*,*,*)
# definiciones para la tarjeta de red en el esquema trabajo
...
;;
casa,*,*,*|default,*,*,*)
# definiciones para la tarjeta de red en el esquema casa
...
;;
esac
La primera parte de una dirección de dispositivo siempre es la
configuración del esquema. En este ejemplo, la segunda cláusula case
aplicará para ambos esquemas. Así, si un esquema no está establecido por
cualquier razón, se tomará por omisión la configuración casa
.
Ahora, para seleccionar entre dos conjuntos de configuraciones, ejecute:
cardctl scheme casa
o bien
cardctl scheme trabajo
El comando cardctl
hace el equivalente a apagar todas sus tarjetas y
luego reiniciarlas. Este comando puede ejecutarse de forma segura estando
el sistema PCMCIA cargado o no, pero el comando puede fallar si está
usando otros dispositivos PCMCIA en ese momento (incluso si sus
configuracion no es explícitamente dependiente de la configuración del
esquema).
Para mostrar la configuración del esquema, ejecute:
cardctl scheme
Por omisión, la configuración del esquema es persistente a través de los
inicios del equipo. Esto puede tener efectos no deseados si la red se
inicializa para el ambiente equivocado. Opcionalmente, puede establecer el
valor inicial del esquema con la opción de inicio SCHEME
; consulte la
sección
Opciones de Inicio para más detalles.
También es posible establecer el esquema desde el prompt de inicio de
lilo
. Debido a que lilo
pasa opciones desconocidas a init
como variables de entorno, un valor destinado a SCHEME
(o cualquier
otra opción de inicio de PCMCIA) en el prompt de inicio se propagará al
script de inicio PCMCIA.
Para ahorrarse tecleo, los esquemas pueden ser especificados en el archivo
de configuración de lilo
. Por ejemplo, puede tener:
root = /dev/hda1
read-only
image = /boot/vmlinuz
label = casa
append = "SCHEME=casa"
image = /boot/vmlinuz
label = trabajo
append = "SCHEME=trabajo"
Así, al teclear casa
o trabajo
en el prompt de inicio arrancará
con el esquema PCMCIA apropiado.
Tener el sistema de archivos raíz en un dispositivo PCMCIA es algo difícil
porque el sistema PCMCIA de Linux no está diseñado para ser enlazado
dentro del kernel. Sus componentes principales, los módulos cargables del
kernel y el demonio cardmgr
dependen de un sistema que ya está
ejecutándose. La funcionalidad initrd
del kernel sortea esta
limitación permitiendo a Linux iniciar utilizando un disco ram temporal
como una imagen raíz mínima, cargar los controladores, y remontar entonces
un sistema de archivos raíz diferente. La raíz temporal puede configurar
dispositivos PCMCIA y luego remontar un dispositivo PCMCIA como raíz.
La imagen initrd
de residir en un dispositivo arrancable
obligatoriamente; lo que implica no puede tratarse de un dispositivo
PCMCIA. Esta es una limitación de BIOS, no del kernel. Aqui es útil
distinguir entre dispositivos «arrancables» (es decir, dispositivos desde
los que se puede iniciar), y dispositivos root-ables (es decir,
dispositivos origen, que son montados como raíz). Los dispositivos
«arrancables» se determinan por BIOS, y están limitados generalmente a
discos flexibles internos y unidades de disco duro. La funcionalidad
initrd
permite disponer de más dispositivos origen, no de más
dispositivos «arrancables».
Algunas distribuciones de Linux permitirán la instalación a un dispositivo
conectado a un adaptador SCSI PCMCIA, como un efecto lateral involuntario
de su soporte para instalar desde unidades de CD-ROM SCSI PCMCIA. Sin
embargo, en la actualidad, no hay herramientas de instalación de Linux que
soporten el configurar una imagen initrd
apropiada para iniciar Linux
con un sistema de archivos raíz PCMCIA. Configurar un sistema con raíz
PCMCIA de este modo requiere que se use otro sistema Linux para crear la
imagen initrd
. Si no tiene otro sistema Linux disponible, una opción
podría ser instalar temporalmente una configuración mínima en una unidad
no PCMCIA, crear una imagen initrd
, y luego reinstalar en el
dispositivo PCMCIA destino.
El Linux Bootdisk-HOWTO contiene información general acerca de la
configuración de discos de inicio pero nada específico de initrd
. El
documento principal de initrd
se incluye con las distribuciones
recientes del código fuente del kernel, en
linux/Documentation/initrd.txt
. Antes de empezar, debería leer
este documento. Es de utilidad estar familiarizado con lilo
. El uso
de initrd
también requiere que tenga un kernel compilado con
CONFIG_BLK_DEV_RAM
y CONFIG_BLK_DEV_INITRD
activados.
Esta es una técnica de configuración avanzada, y requiere un alto nivel de familiaridad con Linux y el sistema PCMCIA. Asegúrese de leer toda la documentación relevante antes de empezar. Las siguientes recetas deberían funcionar, pero las derivaciones de los ejemplos le pondrán rápidamente en un territorio desconocido y «no soportado»; y estará solo.
Este método requiere obligatoriamente que se use una versión del
controlador PCMCIA 2.9.5
o posterior. Los paquetes PCMCIA antiguos o
los componentes individuales no funcionarán en el contexto initrd
. No
mezcle componentes de diferentes versiones.
pcinitrd
El script pcinitrd
crea una imagen básica para iniciar con una
partición raíz PCMCIA. La imagen incluye una jerarquía de directorios
mínima, algunos archivos de dispositivos, unos cuantos binarios,
bibliotecas compartidas, y un conjunto de módulos controladores PCMCIA.
Cuando se invoca pcinitrd
, especifique los módulos controladores que
busca que se incluyan en la imagen. Los componentes principales de PCMCIA,
pcmcia_core
y ds
, se incluyen automáticamente.
Como ejemplo, digamos que su portátil usa un controlador compatible con
i82365
, y quiere iniciar Linux con el sistema de archivos raíz en un
disco duro conectado a un adaptador Adaptec SlimSCSI. Podría crear
una imagen initrd
apropiada con:
pcinitrd -v initrd pcmcia/i82365.o pcmcia/aha152x_cs.o
Para personalizar la secuencia de inicio de initrd
, podría montar la
imagen usando el dispositivo loopback con un comando como:
mount -o loop -t ext2 initrd /mnt
y luego editar el script linuxrc
. Los archivos de configuración se
instalarán bajo /etc
en la imagen, y también puede
personalizarse. Consulte la página del manual de pcinitrd
para mayor
información.
initrd
Después de crear una imagen con pcinitrd
, puede crear un disquete de
inicio copiando el kernel, la imagen initrd comprimida, y algunos archivos
de soporte para lilo
a un disquete limpio. En el ejemplo siguiente,
asumimos que el dispositivo raíz PCMCIA deseado es /dev/sda1
:
mke2fs /dev/fd0
mount /dev/fd0 /mnt
mkdir /mnt/etc /mnt/boot /mnt/dev
cp -a /dev/fd0 /dev/sda1 /mnt/dev
cp [kernel-image] /mnt/vmlinuz
cp /boot/boot.b /mnt/boot/boot.b
gzip < [initrd-image] > /mnt/initrd
Genere un fichero /mnt/etc/lilo.conf
que contenga:
boot=/dev/fd0
compact
image=/vmlinuz
label=linux
initrd=/initrd
read-only
root=/dev/sda1
Finalmente, invoque a lilo con:
lilo -r /mnt
Cuando lilo
es invocado con -r
, realiza todas las acciones
tomando como directorio raíz el especificado. La razón para crear los
archivos de dispositivo bajo /mnt/dev
es que lilo
no podrá
usar esos archivos en /dev
cuando se ejecute con este directorio
raíz alternativo.
initrd
en una unidad no-Linux
Un uso común de la funcionalidad initrd
puede darse en sistemas donde
el disco duro interno está dedicado a otro sistema operativo. El kernel de
Linux y la imagen initrd
pueden ponerse en una partición no-Linux, y
lilo
o LOADLIN
pueden configurarse para iniciar Linux desde esas
imágenes.
Asumiendo que tiene un kernel que se ha configurado para el dispositivo
raíz apropiado, y una imagen initrd
creada en otro sistema, la forma
más fácil de iniciar Linux es utilizando LOADLIN
, como:
LOADLIN <kernel> initrd=<imagen-initrd>
Una vez que pueda iniciar Linux en su máquina destino, puede instalar
lilo
para permitir que Linux se inicie directamente. Por ejemplo,
digamos que /dev/hda1
es la partición no-Linux destino y
/mnt
puede usarse como un punto de montaje. Primero, genere un
subdirectorio en el destino para los archivos de Linux:
mount /dev/hda1 /mnt
mkdir /mnt/linux
cp [imagen-del-kernel] /mnt/linux/vmlinuz
cp [imagen-initrd] /mnt/linux/initrd
En este ejemplo, digamos que /dev/sda1
es la partición raíz de
Linux deseada, en un disco duro SCSI montado vía un adaptador PCMCIA SCSI.
Para instalar lilo
, genere un archivo lilo.conf
que contenga:
boot=/dev/hda
map=/mnt/linux/map
compact
image=/mnt/linux/vmlinuz
label=linux
root=/dev/sda1
initrd=/mnt/linux/initrd
read-only
other=/dev/hda1
table=/dev/hda
label=windows
La línea boot=
dice que se instale el cargador de inicio en el MBR
(master boot record) del dispositivo especificado. La línea
root=
identifica el sistema de archivos raíz deseado a usar después
de cargar la imagen initrd
, que puede resultar innecesario si la
imagen del kernel ya se encuentra configurada de esta forma. La sección
other=
se usa para describir el otro sistema operativo instalado en
/dev/hda1
.
Para instalar lilo
en este caso, teclee:
lilo -C lilo.conf
Nótese que en este caso, el archivo lilo.conf
usa rutas absolutas que
incluyen /mnt
. Hice esto en el ejemplo porque el sistema de
archivos destino puede no soportar la creación de archivos de dispositivos
para las opciones boot=
y root=
.