Logo de AulaDigital

PCMCIA Como 5

Linux PCMCIA COMO : Temas avanzados Página siguiente Página anterior Índice general

5. Temas avanzados

5.1 Apartado de recursos para dispositivos PCMCIA

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.

5.2 Cómo puedo separar configuraciones de los dispositivos para casa y el trabajo?

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.

5.3 Arranque desde un dispositivo PCMCIA

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.

El script 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.

Creación de un disquete de inicio 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.

Instalación de una imagen 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=.


Página siguiente Página anterior Índice general