Puppy tiene que comunicarse con los diversos componentes de
“hardware” de la computadora, y para ello el núcleo
Linux (kernel) tiene los llamados “módulos
controladores” (drivers). Hay un controlador para cada
componente de hardware; por ejemplo, para reproducir sonidos debe
existir un controlador de sonido. Un controlador es un programa que
sirve de enlace entre el sistema Puppy y el equipo en sí.
Algunos controladores están incorporados en el núcleo,
y otros se deben cargar aparte. Estos últimos son conocidos
como módulos.
La parte “difícil” de
este esquema consiste en decidir qué módulos hacen
falta para una PC individual; y en segundo lugar, encontrar y cargar
los módulos así identificados. Cabe señalar que
para algunos componentes poco comunes, puede no existir un
controlador adecuado.
Cuando Puppy arranca, se cargan varios
módulos de forma automática.Usted puede ver cuáles,
al examinar los archivos /etc/rc.d/rc.modules, /etc/rc.d/rc.network y
/etc/rc.d/rc.local0. El primer archivo, rc.modules, ejecuta un
programa llamado scanmodule, desarrollado por Antonio Gallo,
de badpenguin.org. Este magnífico programita explora y
encuentra los módulos requeridos para sonido, red Ethernet, PC
Card (pcmcia), raid, scsi y USB, y enseguida los carga.
Sin
embargo, scanmodule tiene un alcance muy limitado en la actualidad.
Hay dos problemas...
El primer problema. Si usted examina el directorio /lib/modules, verá todos los módulos incluídos con Puppy. Todos terminan en ".o.gz"; por ejemplo, el archivo "via82cxxx_audio.o.gz" es un controlador de sonido para los chips de sonido VIA Technologies 82cxxx. Para cargar este módulo y permitir que el núcleo lo utilice, use el siguiente comando:
# modprobe -v via82cxxx_audio
Notar que no hace falta introducir la extensión ".o.gz".
El parámetro "-v" significa “verbalizado”,
o sea, produce una salida detallada del resultado del intento de
carga del módulo.
Muy bien, pero, ¿qué
ocurre si no se encuentra el controlador para sus circuitos de
sonido? Éste es el primer problema. No se rinda de inmediato,
puede que otro de los módulos incluídos en Puppy sí
trabajen con su chip de sonido, así que cabe aquí
experimentar un poco.
modprobe puede rechazar la carga del
módulo, lo cual es un claro indicio de que el módulo no
es el indicado. También, puede ser que cargue, pero que
sencillamente no funcione. Entonces, lo puede remover así:
# modprobe -r via82cxxx_audio
Para ver una lista de todos los módulos cargados, escriba esto:
# lsmod
Si no logra encontrar un módulo adecuado, hay más aún
para elegir. Por ejemplo, en una de las páginas web de
descarga de Puppy, como
ftp://ibiblio.org/pub/Linux/distributions/puppylinux/,
mirando en el directorio de la última versión de Puppy,
encontrará un archivo llamado "modules-ALL-xxx.tar.gz"
(donde xxx es la fecha de lanzamiento). Este archivo contiene el
conjunto completo de módulos. No entraron todos en Puppy por
limitaciones de tamaño.
Digamos que descargó el
archivo "modules-ALL-xxx.tar.gz", y halló el módulo
que necesitaba. ¿Cómo lo carga en Puppy? No lo copie en
/lib/modules, ya que, antes de arrancar Puppy, ese directorio estaba
en el archivo image.gz en el dispositivo de arranque.
Una
solución temporal consiste en colocar el módulo en el
directorio /root y escribir:
# insmod /root/name-of-module.o
¡Aquí sí tiene que poner el nombre completo del módulo, incluyendo la extensión ".o" (o ".o.gz" si es un archivo comprimido)! Al menos, sabrá si funciona. Por si acaso, tenga cuidado de no cargar el mismo módulo, más de una vez. Retire cada módulo, después de probarlo, con:
# rmmod name-of-module.o
scanmodule es ejecutado por /etc/rc.d/rc.modules durante el
arranque (es decir, cuando Puppy se inicia por primera vez, al
encender la PC). Este programa intenta averiguar qué módulos
hacen falta y luego los carga. Sin embargo, scanmodule recurre a una
base de datos de hardware, ubicada en /lib/libhardware. Examine este
directorio. Encontrará archivos de texto simple, como por
ejemplo, "soundcard.db" (la base de datos de controladores
de sonido).
Estos archivos de base de datos relacionan cada
dispositivo a un controlador compatible. Por supuesto, el controlador
debe estar en /lib/modules. Si examina el archivo "soundcard.db",
encontrará una línea de texto referida al controlador
"via82cxxx_audio".
Pero, algunos de los
controladores en /lib/modules no figuran en estos archivos de base de
datos. Hay herramientas en Puppy que permiten explorar qué ha
sido cargado y qué ha quedado afuera:
He organizado los programas de Antonio para ejecutar una serie de
pruebas. Vaya al botón “Inicio” del sistema y
seleccione “Panel de Control”, luego “Detección
de Hardware”. Presione el botón "Query-PCI".
Luego de una breve pausa, obtendrá una pantalla como ésta:
La sección "parse_pci_devices" muestra todas
las interfases halladas en el bus PCI, en este formato:
vendor:device (class,subclass) status [vendorName-deviceName] className kernelModule
La parte relevante está en la última columna, que
describe el nombre del módulo. Si dice "null",
entonces el programa de búsqueda no pudo hallar un módulo
compatible en la base de datos.
Otra posibilidad consiste en
buscar en el directorio /lib/modules, y ver si el módulo
buscado está aquí (aunque no esté mencionado en
la base de datos). Puede usar el comando modprobe para averiguar si
funciona.
Si tiene ganas de experimentar, puede descargar el
archivo modules-ALL-xxx.tar.gz y buscar allí. Cabe notar,
puede usted colocar temporalmente un módulo en un directorio
tal como /root, y cargarlo así:
# insmod /root/test-module.o
Si usted puede determinar qué módulo funciona con su dispositivo en particular, envíe un mensaje al Foro de discusión (Puppy Discussion Forum), posiblemente en la sección HOWTO, y así yo podré introducir la información en la base de datos, e incorporar el módulo. Los datos que necesito son, principalmente, el par numérico de identificación del chip (por ejemplo, 1106:3058 en el caso del sonido en la ilustración anterior) y el módulo controlador que le corresponde. Notar, soy reacio a colocar módulos en Puppy para dispositivos inusuales, ya que eso engordaría demasiado al sistema.
El programa “Panel de
Control/Detección de hardware” tiene otros botones
útiles. Uno de ellos es “Modules”. Mostrará
una pantalla como ésta:
Esta ventana muestra los módulos que concuerdan con la
base de datos, descubiertos por scanmodule. Si la columna de la
derecha dice "running", significa que el módulo fue
cargado con éxito (por scanmodule, al arrancar Puppy).
Si,
por ejemplo, usted tiene una tarjeta Ethernet, pero no figura en esta
ventana, significa que su dispositivo Ethernet no figura en la base
de datos.
Cuando Puppy arranca, si el programa scanmodule de
Antonio no puede hallar un controlador para un dispositivo en
particular, por ejemplo, una tarjeta de red, entonces aparece un
mensaje de error, con instrucciones para enviarme un correo
electrónico. Sin embargo, le ruego que se ABSTENGA de hacerlo.
Por desgracia, mi buzón anda saturado.
Incluso si
scanmodule reporta una falla, una detección posterior durante
el arranque de Puppy puede ubicar exitosamente el módulo
correcto a cargar. RECUERDE, el programa de Antonio es solamente la
primera etapa de detección de hardware durante el arranque.
Por ejemplo, si usted ha ejecutado el Asistente de Red, usted puede
ubicar el controlador correcto Ethernet, el cual será cargado
al arranque, incluso si el programa de Antonio hubiera fallado.
Aparte de la detección automática de scanmodule, el
archivo /etc/rc.d/rc.local0 carga algunos módulos adicionales.
Estos módulos son cargados a pedido, no son detectados
automáticamente, y será necesario editar el archivo
para efectuar cambios.
Notar que este archivo está ubicado
en el directorio /root/.etc/rc.d, o sea que está en el
dispositivo principal de almacenamiento (home). Si lo modifica, los
cambios se mantendrán. Pero, si actualiza a Puppy, y el
archivo rc.local0 ha sido actualizado, entonces la versión con
sus cambios será remplazada por la versión más
nueva. De hecho, permítame decirlo con claridad:
Para Puppy a partir de la versión 0.9.9 en adelante, al arrancar una nueva versión de Puppy (por ejemplo, un “live-CD”), Puppy automáticamente remplazará los archivos del directorio /root con versiones más nuevas, provenientes del CD.
Por tanto, haga copias de respaldo de los archivos
que haya modificado.
Además de scanmodule y del
archivo rc.local0, hay otras formas de cargar módulos
controladores de red.
Notar que la secuencia exacta de ejecución
de los archivos "rc." está explicada (en inglés)
en el archivo /etc/rc.d/README.txt.
Por
ejemplo, para efectuar una conexión telefónica al
internet, los módulos "ppp" son cargados al momento
de efectuar la llamada. Essta operación es ejecutada por el
programa pppd. Si ejecuta el programa lsmod durante la
conexión, podrá ver estos módulos
adicionales.
Desde el botón “Inicio” del
sistema, haga clic en “Configuración”, y
encontrará un “Asistente de Cortafuegos Linux”, el
cual instala un cortafuegos (firewall). Se introduce una línea
en el archivo /etc/rc.d/rc.local, que iniciará el cortafuegos
la próxima vez que inicie Puppy. Esta instalación crea
un listado de instrucciones (script) llamado /etc/rc.d/rc.firewall*,
el cual carga todo un conjunto de módulos. De nuevo, use lsmod
para verlos.
El Asistente de Red le permite probar módulos
y seleccionar el que funcione, para que sea cargado al arranque de
forma automática.
PCMCIA (PC Card) es un trabajo en
progreso. Por ahora, parece que Puppy cargará los módulos
correspondientes por separado, usando un “script” llamado
/etc/rc.d/rc.pcmcia, que será cargado al arranque.
Usted puede compilar sus propios módulos para Puppy. Vea
esta dirección en Internet (en
inglés):
http://www.goosee.com/puppy/development/compilekernel.htm
(c) Copyright 2003,2004,2005 Barry Kauler