Capítulo 7. Uso de dispositivos portátiles con Linux

Tabla de contenidos

7.1. PCMCIA
7.2. SCPM – System Configuration Profile Management
7.3. IrDA – Infrared Data Association
7.4. Bluetooth: conexión inalámbrica de dispositivos

Resumen

Este capítulo describe las particularidades del uso de dispositivos portátiles — y en particular de los ordenadores portátiles — con Linux. Entre los temas tratados se encuentra la configuración de las tarjetas PC (PCMCIA) así como la administración de distintos perfiles del sistema por medio de SCPM y la comunicación inalámbrica a través IrDA y Bluetooth.

7.1. PCMCIA

PCMCIA es la abreviatura de Personal Computer Memory Card International Association y se usa por extensión para denominar todo el hardware y software relacionado.

7.1.1. El hardware

El componente clave es la tarjeta PCMCIA, de la que se distinguen dos tipos diferentes:

Tarjetas PC

Son las tarjetas que se emplean más a menudo y usan un bus de 16 bits para la transferencia de datos. Estas tarjetas suelen ser económicas y por lo general son estables y no presentan problemas.

Tarjetas CardBus

Son tarjetas de un estándar más nuevo con un bus de 32 bits de anchura, por lo que son más rápidas pero también más caras. El gasto adicional de estas tarjetas normalmente no está justificado, ya que el cuello de botella de la transferencia de datos suele estar en otra parte, y no en el bus. Ya existen varios drivers para estas tarjetas; aunque algunos de ellos aún son inestables (en función de la combinación de la controladora PCMCIA y la tarjeta).

Cuando el servicio PCMCIA está activo, el comando cardctl ident indica la tarjeta introducida en la ranura. Una lista de las tarjetas soportadas se encuentra en SUPPORTED.CARDS en el directorio /usr/share/doc/packages/pcmcia. Allí se encuentra también la última versión del PCMCIA-HOWTO.

El segundo componente que se necesita para el soporte PCMCIA es la controladora o bien el PC-Card/CardBus-Bridge. Este puente establece la comunicación entre la tarjeta y el bus PCI o (en caso de máquinas antiguas) el bus ISA. Casi siempre las controladoras son compatibles con el chip i82365™ de Intel por lo que todos los modelos corrientes se soportan. Con el comando pcic_probe se puede averiguar el tipo de controladora. Si la controladora conecta al bus PCI se puede conseguir más información con lspci -vt.

7.1.2. El software

7.1.2.1. Diferencias entre los dos sistemas PCMCIA

Existen dos sistemas PCMCIA: el externo y el integrado en el kernel. El sistema PCMCIA externo de David Hinds es el más antiguo, por lo que ha sido probado y mejorado durante más tiempo. Las fuentes de los módulos que emplea no están integrados en las del kernel, y es por esto por lo que se denomina sistema externo. Sin embargo, a partir del kernel 2.4, existe otro módulo alternativo en las fuentes: las del sistema PCMCIA integrado en el kernel (“Kernel-PCMCIA”). Los módulos básicos fueron escritos por Linus Torvalds y soportan mejor los puentes Cardbus más actuales.

Desgraciadamente, ambos sistemas son incompatibles. Además, en ambos sistemas se encuentran entradas diferentes para los drivers. Por esta razón, dependiendo del hardware, sólo se puede emplear uno de los dos sistemas. La norma en SUSE LINUX es utilizar el PCMCIA integrado en el kernel, aunque también se puede cambiar de sistema. Para ello, se debe asignar a la variable PCMCIA_SYSTEM del archivo /etc/sysconfig/pcmcia el valor external o kernel, y después arrancar de nuevo PCMCIA con rcpcmcia restart. Para un cambio temporal también se puede utilizar rcpcmcia [re]start external,kernel. Puede encontrar información más detallada en /usr/share/doc/packages/pcmcia/README.SuSE

7.1.2.2. Los módulos base

Los módulos del kernel para ambos sistemas se encuentran en los paquetes del kernel. También se necesitan el paquete pcmcia y hotplug.

Al arrancar un PCMCIA se cargan los módulos pcmcia_core, i82365 (PCMCIA externo) o yenta_socket (PCMCIA integrado en el kernel) y ds.En muy raras ocasiones se necesita el módulo tcic en vez de i82365 o yenta_socket. Estos inician las controladoras PCMCIA que se encuentran disponibles y proporcionan funciones básicas.

7.1.2.3. El administrador de tarjetas

Para que las tarjetas PCMCIA puedan intercambiarse, debe existir un daemon que controle la actividad de las ranuras de conexión. Según el sistema PCMCIA elegido y el hardware utilizado, esta tarea será realizada por el administrador de tarjetas (cardmanager) o por el sistema Hotplug del kernel. Para los PCMCIA externos se emplea el administrador de tarjetas. En el caso de los PCMCIA integrados en el kernel, el administrador sólo manipula la tarjeta PC, mientras que las tarjetas CardBus son controladas por Hotplug. El script de arranque del PCMCIA inicia el administrador de tarjetas después de que el módulo básico se haya cargado. Puesto que el Hotplug también soporta otros subsistemas además del PCMCIA, dispone de un script de arranque propio.

Cuando se introduce una tarjeta, el administrador de tarjetas o el Hotplug averigua el tipo y la función para cargar los módulos correspondientes. Una vez que todos los módulos se hayan cargado correctamente y según la función de la tarjeta, el administrador de tarjetas o el Hotplug inicia determinados scripts de arranque que se encargan de establecer la conexión de red, de montar particiones de discos SCSI externos o llevan a cabo otras acciones específicas del hardware. Los scripts del administrador de tarjetas se encuentran en /etc/pcmcia y los del Hotplug en /etc/hotplug. Al retirar la tarjeta, tanto el administrador de tarjetas como el Hotplug se encarga de desactivar, utilizando los mismos scripts, todas las actividades de la tarjeta. Finalmente, los módulos que ya no se necesitan se descargan de la memoria.

Tanto los protocolos de inicio de los sistemas PCMCIA como todas las acciones de la tarjeta quedan guardados en el archivo log del sistema (/var/log/messages). Allí se puede comprobar el sistema PCMCIA, el daemon y el script utilizados para la instalación. En teoría una tarjeta PCMCIA puede retirarse fácilmente, especialmente si se trata de una tarjeta RDSI, de módem o de red, siempre que ya se hayan acabado las conexiones a la red. Sin embargo no funciona en combinación con particiones de un disco externo o con directorios NFS. En este caso se debe tener un cuidado especial para que las unidades estén sincronizadas y se desmonten correctamente. Por supuesto, esto no es posible cuando la tarjeta ya se ha sacado. En caso de duda, utilice cardctl eject.

Este comando desactiva todas las tarjetas que se encuentren en el portátil. Si quiere desactivar solamente una tarjeta, añada el número de ranura. por ejemplo cardctl eject 0.

7.1.3. La configuración

Para especificar si se debe iniciar el PCMCIA o Hotplug al encender el ordenador, utilice el editor de runlevels de YaST o utilice chkconfig en la línea de comandos.

En el /etc/sysconfig/pcmcia se encuentran cuatro variables:

PCMCIA_SYSTEM

determina el sistema PCMCIA que se empleará.

PCMCIA_PCIC

incluye el nombre del módulo hacia el que se dirige la controladora PCMCIA. En casos normales, el script de inicio ya facilita este nombre, y esta variable queda vacía. Introduzca aquí el módulo sólo si se producen errores.

PCMCIA_CORE_OPTS

está pensada como parámetro para el módulo pcmcia_core, pero casi nunca es necesario utilizarlo. Estas opciones están descritas en las páginas del manual de pcmcia_core.

PCMCIA_PCIC_OPTS

recoge el parámetro para el módulo i82365. También para este caso se recomienda consultar la página del manual de i82365. Si se utiliza yenta_socket, olvídese de estas opciones, puesto que yenta_socket no reconoce ninguna opción.

La disposición de los controladores de las tarjetas PCMCIA para el administrador de tarjetas se encuentra en los ficheros /etc/pcmcia/config y /etc/pcmcia/*.conf. En primer lugar se lee config y después *.conf siguiendo un orden alfabético. La última entrada para una tarjeta es la decisiva. Los detalles sobre la sintaxis se encuentran en la página del manual de pcmcia.

7.1.3.1. Tarjetas de red (Ethernet, Wireless LAN y TokenRing)

Estas tarjetas se pueden instalar como tarjetas de red corrientes con YaST, escogiendo la opción PCMCIA en tipo de tarjeta. Todos los detalles adicionales de la configuración de red se encuentran en el capítulo 13.4, “El acceso a la red”. Preste atención a las indicaciones sobre las tarjetas que funcionan con Hotplug.

7.1.3.2. RDSI

La configuración de las tarjetas PC RDSI funciona en gran medida como la del resto de tarjetas RDSI con YaST. No importa cuál de las dos tarjetas RDSI PCMCIA se escoja; lo que importa es que sea una tarjeta PCMCIA. Al configurar el hardware y el proveedor, compruebe que el modo de funcionamiento es hotplug y no onboot.

También existen modems RDSI para tarjetas PCMCIA. Son tarjetas de módem o multitarea que incorporan un kit de conexión RDSI y se comportan como un módem.

7.1.3.3. Módem

Las tarjetas PC de módem normalmente no conocen ninguna configuración específica para PCMCIA. Cuando se inserta un módem, este está disponible directamente en /dev/modem.

También existen los llamados Softmodems para las tarjetas PCMCIA, pero por lo general no están soportados. En caso de que exista un controlador, debe unirse al sistema de forma individual.

7.1.3.4. SCSI e IDE

El administrador de tarjetas o Hotplug carga el módulo adecuado. Nada más insertar una tarjeta SCSI o IDE, se encuentran disponibles los dispositivos asociados, cuyos nombres se averiguan dinámicamente. Puede encontrar más información sobre los dispositivos SCSI e IDE disponibles en /proc/scsi o /proc/ide.

Los discos duros externos, los lectores CD-ROM y otros dispositivos similares deben estar encendidos antes de introducir la tarjeta PCMCIA. La terminación de los dispositivos SCSI debe realizarse de forma activa.

[Warning]Aviso

Hay que desmontar todas las particiones de los dispositivos que estén conectados a una tarjeta SCSI o IDE antes de extraerla. En caso de haberlo olvidado, no se puede acceder a estos dispositivos antes de un reinicio del sistema, aunque el resto del sistema funcione perfectamente.

Puede instalar Linux completamente en un disco duro externo, pero el procedimiento de arranque resulta un poco más complicado. En todo caso se necesita un disquete de arranque que incluya el kernel y un Ramdisk inicial initrd; más información en el apartado 11.3, “Arrancar con initial ramdisk”.

initrd contiene un sistema de archivos virtual con todos los módulos y programas necesarios para el soporte PCMCIA. El disquete de arranque y las imágenes de este disquete tienen esta misma estructura. Esto le permite arrancar siempre la instalación externa mediante estos disquetes. La desventaja es que se debe cargar manualmente el soporte PCMCIA en cada inicio. Para los usuarios avanzados existe la posibilidad de generar un disquete de arranque hecho a medida. Puede encontrar más información en inglés en el apartado 5.3 Booting from a PCMCIA device del HOWTO de PCMCIA.

7.1.4. Si a pesar de todo no funciona

Puede ocurrir que haya problemas con el uso de PCMCIA en algunos ordenadores portátiles o en combinación con determinadas tarjetas. La mayoría de las problemas se pueden solucionar sin demasiado esfuerzo, siempre que se proceda sistemáticamente.

[Warning]Aviso

Puesto que en SUSE LINUX coexisten tanto PCMCIA externos como integrados en el kernel, se debe tener en cuenta una peculiaridad al cargar los módulos manualmente. Ambos sistemas PCMCIA emplean módulos que tienen el mismo nombre pero que se encuentran en subdirectorios diferentes en /lib/modules/<versión_kernel>. Estos subdirectorios se llaman pcmcia para el PCMCIA integrado en el kernel y pcmcia-external para el PCMCIA externo. Por lo tanto, al cargar estos módulos manualmente se debe indicar el subdirectorio correspondiente:

modprobe -t <directorio> <nombre_módulo>

Lo primero es averiguar si la causa del problema está relacionada con una tarjeta o con el sistema base PCMCIA. Por eso hay que iniciar el ordenador sin ninguna tarjeta insertada. Todos los mensajes de interés son registrados en /var/log/messages, por lo que se recomienda observar este archivo mientras se realicen las pruebas con tail -f /var/log/messages. Esto permite determinar uno de los siguientes casos como causa del error.

7.1.4.1. El sistema base PCMCIA no funciona

Si el sistema llega a pararse durante el arranque con el mensaje PCMCIA: Starting services o si se producen otras incidencias extrañas, se puede deshabilitar el servicio PCMCIA para el próximo arranque, indicando NOPCMCIA=yes en la prompt de arranque. Para conocer mejor la causa del error, se deben cargar manual y secuencialmente los tres módulos básicos.

Pare ello deben ejecutarse los siguientes comandos como usuario root:

modprobe -t <dir> pcmcia_core
modprobe -t pcmcia-external i82365 
    

en el caso de PCMCIA externo o bien:

modprobe -t pcmcia yenta_socket
    

en el caso de Kernel-PCMCIA

o – en raras ocasiones –, modprobe -t <dir> tcic y

modprobe -t <dir> ds
    

Los módulos críticos son los dos primeros.

La página man de pcmcia_core le será de ayuda cuando el error aparezca en el momento de cargar pcmcia_core. Las opciones que se mencionan en la página del manual se pueden usar en combinación con el comando modprobe. Como ejemplo, se puede deshabilitar el soporte APM de los módulos PCMCIA, ya que en pocos casos resulta problemático. Para realizarlo existe la opción doapm; con do_apm=0 se desactiva la gestión de energía:

modprobe -t <dir> pcmciacore do_apm=0
    

Una vez que la opción probada tenga éxito, esta se guarda en el archivo /etc/sysconfig/pcmcia mediante la variable PCMCIA_CORE_OPTS:

PCMCIA_CORE_OPTS="do_apm=0"
    

En muy pocas ocasiones, la comprobación de áreas de memoria libres es problemática, debido a interferencias con los componentes del hardware. Para evitar esto, se puede utilizar probe_io=0. Para combinar varias opciones, estas se han de separar con un espacio en blanco:

PCMCIA_CORE_OPTS=do_apm=0 probe_io=0
    

Para resolver problemas que surjan al cargar los módulos i82365, se puede recurrir a la página del manual de i82365.

Un problema típico a la hora de cargar este módulo es un conflicto de recursos, una interrupción, un puerto de E/S (I/O-Port) o un rango de memoria que se ocupa dos veces. En realidad el módulo i82365 comprueba los recursos antes de asignarlos a la tarjeta pero justamente esta comprobación es la que a veces produce un error. Por ello, hay ordenadores que bloquean el teclado y/o el ratón en el momento de comprobar la interrupción 12 (dispositivos PS/2). En tal caso sirve como remedio el parámetro irq_list=<lista_IRQs>. La lista debe contener todos los IRQs que se pueden usar, Así, modprobe i82365 irq_list=5,7,9,10 o, para fijarlo, en /ets/sysconfig/pcmcia:

PCMCIA_PCIC_OPTS="irq_list=5,7,9,10"

Además el administrador de tareas (cardmanager) evalúa los archivos /etc/pcmcia/config y /etc/pcmcia/config.opts. Los parámetros definidos en estos archivos no tienen relevancia antes de la carga de los módulos de controladores para las tarjetas PCMCIA.

En /etc/pcmcia/config.opts también se puede indicar las IRQs, los puertos E/S y los rangos de memoria a incluir o excluir. A diferencia de la opción irqlist, los recursos excluidos en config.opts no se usan para una tarjeta PCMCIA pero sí que se comprueban mediante el módulo base i82365i82365.

7.1.4.2. La tarjeta PCMCIA no funciona (bien)

Fundamentalmente, hay tres razones por las que una tarjeta PCMCIA no funciona bien: no se reconoce la tarjeta, no se puede cargar el controlador, o la interfaz que el controlador pone a disposición está mal configurada.

Se debe comprobar que la tarjeta es manipulada por el administrador de tarjetas o por el Hotplug. Como recordatorio: el administrador gestiona los PCMCIA externos, el administrador de tarjetas PC-Card maneja los PCMCIA integrados en el kernel y Hotplug se encarga de las tarjetas Cardbus. Aquí sólo se trata del administrador de tarjetas.

No se reconoce la tarjeta.

Si no se reconoce la tarjeta, aparece el mensaje unsupported Card in Slot x en /var/log/messages. El mensaje sólo indica que el administrador de tarjetas no es capaz de asignar un controlador a la tarjeta, ya que se necesita /etc/pcmcia/config o /etc/pcmcia/*.conf para esta asignación. Estos archivos son, por así decirlo, una base de datos de controladores, que se puede ampliar fácilmente usando entradas existentes como plantilla para las nuevas. Para identificar la tarjeta, puede emplear el comando cardctl ident. Para más información sobre el tema, consulte el apartado 6 del PCMCIA-HOWTO y la página del manual de pcmcia. Después de modificar /etc/pcmcia/config o /etc/pcmcia/*.conf debe cargar de nuevo la asignación de controladores mediante rcpcmcia reload.

El controlador no se carga

Una de las causas es que exista una asignación incorrecta en la base de datos de controladores. Esto puede ocurrir por ejemplo si el fabricante ha insertado un chip distinto en un modelo de tarjeta que no ha cambiado externamente. A veces se dispone de controladores opcionales que funcionan mejor (o sólo entonces) con modelos distintos al controlador especificado. En estos casos se necesita información exacta sobre la tarjeta. También sirve de ayuda preguntar en listas de correo o en el Servicio de Soporte Avanzado.

Otra causa puede ser un conflicto de recursos. Con la mayoría de las tarjetas PCMCIA no importa qué IRQ, puerto E/S o rango de memoria utilizan, pero hay excepciones. Por eso, se debe siempre probar una tarjeta y, en determinadas ocasiones también, desconectar temporalmente otros componentes del sistema por ejemplo tarjetas de sonido, IrDA, modems e impresoras. Se puede ver la distribución de recursos del sistema con lsdev. (Es normal que varios dispositivos PCI empleen el mismo IRQ).

Una posible solución consiste en emplear la opción adecuada para el módulo i82365 (ver arriba PCMCIA_PCIC_OPTS). No obstante, existen opciones para determinados controladores de tarjeta; dichas opciones se pueden averiguar con modinfo /lib/modules/<directorio correcto pcmcia>/<controlador>.o (se necesita toda la ruta para dirigirse al sistema PCMCIA correspondiente). Para la mayoría de los módulos existe una página man.

Consejo: rpm -ql pcmcia | grep man elabora una lista de todas las páginas del manual relacionadas con pcmcia. Para probar las opciones, los controladores de tarjeta se pueden descargar manualmente. Una vez más, compruebe que el módulo utiliza el sistema PCMCIA empleado. Lea el aviso en líneas superiores.

Cuando encuentre la solución, se puede permitir o prohibir el empleo de un determinado recurso en /etc/pcmcia/config.opts; también se encuentran aquí las opciones para los controladores de tarjeta. Si por ejemplo el módulo pcnet_cs sólo se puede gestionar con el IRQ 5, se deberá realizar la siguiente entrada:

module pcnet_cs opts irq_list=5

Un problema específico de las tarjetas de red 10/100 Mbit es una selección automática equivocada del modo de transferencia. El problema se puede remediar con el comando ifport o mii_tool, que permiten averiguar y modificar el modo de transferencia. Para que estos comandos se ejecuten automáticamente, es necesario adaptar individualmente el script /etc/pcmcia/network.

Interfaz mal configurada

En este caso, es aconsejable comprobar adecuadamente la configuración de la interfaz para descartar errores de configuración. Además, con tarjetas de red es posible aumentar el rango de diálogo del script de red mediante la asignación de la variable DEBUG=yes en /etc/sysconfig/network/config. Con otro tipo de tarjetas, o en caso de que eso no sirva, existe la posibilidad de incluir una línea set -x en el script activado por el administrador de tarjetas (ver /var/log/messages). De esta forma, cada uno de los comandos del script quedarán registrados en el log del sistema. Si encuentra la posición crucial en un script, puede introducir y probar dichos comandos en una terminal.

7.1.5. Instalación vía PCMCIA

En ciertas ocasiones ya se requiere el soporte PCMCIA en la instalación, al instalar a través de la red o al usar el CDROM mediante PCMCIA. Para ello es necesario iniciar el sistema con un disquete de arranque. También se requiere un disquete de módulos.

Después de arrancar con el disquete (o de haber elegido Instalación manual al arrancar con CD) se inicia el programa linuxrc. Entonces, en el menú Módulos del kernel (controlador de hardware), se debe elegir la opción Cargar controlador PCMCIA. En primer lugar, aparecen dos cuadros de diálogo que permiten introducir opciones para los módulos pcmcia_core y i82365. Normalmente estos campos se quedan vacíos. Las páginas man para pcmcia_core y i82365 se encuentran en el primer CD como archivos de texto dentro del directorio docu.

En SUSE LINUX se instala el sistema PCMCIA externo. Durante la instalación aparecen mensajes del sistema en las distintas consolas virtuales, a las que se puede acceder mediante Alt + teclas de función.

Más adelante, cuando una interfaz gráfica esté activa, se debe utilizar Ctrl + Alt + teclas de función.

También durante la instalación existen terminales en las que se puede ejecutar comandos. Mientras linuxrc está en funcionamiento, esta terminal se encuentra en la consola 9 (una shell muy rudimentaria); una vez cargado el sistema de instalación (YaST se ha iniciado), hay una bash y muchas de las herramientas del sistema más comunes en la consola 2.

Si durante la instalación se ha cargado el controlador equivocado para una tarjeta PCMCIA, se debe ajustar el disquete de arranque manualmente. Para ello, necesita tener conocimientos avanzados de Linux. Después del primer paso de instalación, el sistema se reinicia total o parcialmente. Raras veces el sistema se para al iniciar PCMCIA, pero en este punto la instalación ya está tan avanzada que se puede iniciar Linux sin PCMCIA y en modo texto usando la opción de arranque NOPCMCIA=yes. Para solventar este problema consulte el apartado 7.1.4, “Si a pesar de todo no funciona”. Ocasionalmente, también se pueden realizar diversos ajustes del sistema en la consola 2, antes de que finalice la primera parte de la instalación, para que no sucedan fallos en el arranque.

7.1.6. Utilidades adicionales

El programa cardctl ya ha sido mencionado varias veces. Es la herramienta principal para conseguir información sobre PCMCIA, así como para ejecutar determinadas acciones. Puede encontrar detalles sobre el programa en el archivo cardctl. También se puede introducir cardctl para que aparezca una lista con los comandos válidos.

Para este programa también existe una interfaz gráfica cardinfo que permite controlar los aspectos más importantes. Para utilizarla, el paquete pcmcia-cardinfo debe estar instalado.

Otras utilidades del paquete pcmcia son ifport, ifuser, probe y rcpcmcia, pero no se usan con frecuencia. Para conocer exactamente el contenido completo del paquete pcmcia, se puede usar el comando rpm -ql pcmcia.

7.1.7. Actualizar el paquete Kernel o PCMCIA

Si quiere actualizar el kernel, utilice los paquetes del kernel ya preparados por SUSE. Si necesita compilar un kernel propio, también debe compilar el módulo PCMCIA. Es esencial que el kernel nuevo ya se esté ejecutando, ya que cierta información se extrae de aquí. El paquete pcmcia ya debe estar instalado pero no iniciado; en caso de duda, ejecute un rcpcmcia stop. Después instale el paquete fuente PCMCIA y a continuación introduzca:

rpm -ba /usr/src/packages/SPECS/pcmcia.spec
   

Ya está todo listo. En /usr/src/packages/RPMS se encuentra ahora un nuevo paquete. El paquete pcmcia-modules incluye los módulos PCMCIA para el PCMCIA externo. Este paquete se debe instalar con rpm --force, ya que los archivos del módulo pertenecen oficialmente al paquete del kernel.

7.1.8. Información adicional

Si está interesado en conocer más sobre el funcionamiento de determinados ordenadores portátiles, visite el sitio web de Linux Laptop en http://linux-laptop.net. Otra buena fuente de información es el sitio web de TuxMobil http://tuxmobil.org/ (TuxMobil – Ordenadores Móviles y Unix). Allí puede encontrar, además de información muy interesante, un Howto para ordenadores portátiles y otro para IrDA. La base de datos de soporte también contiene varios artículos sobre el uso de ordenadores portátiles con SUSE LINUX. Para consultarlos utilice el término de búsqueda laptop en http://portal.suse.de/sdb/de/index.html.