Kernel: Su Configuración Y LILO

La imagen (o copia) del "Kernel" es la que regirá el funcionamiento del sistema, esta imagen del "Kernel" puede encontrarse en Disco Duro o bien en un "Floppy" (también conocido como "Boot Floppy"),pero una vez leída esta imagen (al arranque) pasa a memoria RAM donde permanecerá indefinidamente hasta que el sistema sea reiniciado

Para que esta imagen sea cargada en el sistema se utiliza generalmente LILO "Linux Loader" que es un Administrador de Arranque ("Boot Manager"); a pesar de su nombre, LILO es capaz de arrancar cualquier sistema operativo (Windows,Sun,etc..) para el que éste fue configurado.

LILO

La configuración de LILO depende en gran parte del archivo /etc/lilo.conf , este archivo contiene los parámetros que serán utilizados por LILO. Cuando se ejecuta el comando lilo (ubicado en el subdirectorio /sbin ) LILO será instalado en la ubicación que se haya indicado en /etc/lilo.conf , esta ubicación suele ser un "Master Boot Record" ya sea de un Floppy o Disco Duro. NOTA: LILO SOLO INDICA donde se encuentran los archivos generales de configuración (en Linux el "Kernel", en Windows "command.com" y el registro), esto se observará a continuación.

Configuración de lilo.conf

La primera sección de lilo.conf contiene los parámetros de Instalación de LILO, esto es, donde será instalado LILO.

   boot=/dev/fd0
   compact
   map=/boot/map
   install=/boot/boot.b
   prompt
   timeout=50          
   

El parámetro boot=/dev/fd0 indica que LILO deberá ser instalado en el dispositivo /dev/fd0 , lo cual equivale al "Master Boot Record" del "Floppy Drive" del Sistema, si se deseara instalar LILO en el "Master Boot Record" de un disco duro se especificaría boot=/dev/hda , lo cual indica el MBR del primer disco duro del servidor. Las demás opciones especifican otros parámetros importantes, sin embargo, es raro que estos valores cambien en instalaciones.

Las siguientes secciones de lilo.conf son denominadas Stanzas y contienen información referente a los sistemas operativos que LILO es capaz de ejecutar al arranque del sistema.

 
#Stanza para iniciar Linux
        image=/boot/vmlinuz
	label=linux
	root=/dev/hda1
	read-only
#Stanza para iniciar Windows 95/98
        other=/dev/hda2
	label=windows
	table=/dev/hda

El parámetro image=/boot/vmlinuz indica que el archivo vmlinuz es la imagen del "Kernel" que será utilizada por LILO al arranque del sistema. label = linux , es la opción que aparecerá en el menú de LILO, mientras que root=/dev/hda1 indica que la partición número 1 del primer disco ( /dev/hda1 ) contiene el sistema raíz de archivos Linux que fue definido al instalar el Software.

La segunda Stanza define los parámetros para cargar Windows 95/98 al arranque (en vez de Linux), el parámetro other=/dev/hda2 especifica que la partición /dev/hda2 contiene el sistema operativo Windows, mientras que table=/dev/hda es el disco que contiene la partición Windows y el parámetro label=windows será la opción del menú LILO.

Aunque a través de la instrucción global prompt en lilo.conf le será ofrecida una lista de Stanza's para inicializar su sistema, en caso de agotarse este lapso -- indicado por timeout -- la primer Stanza definida en la configuración será elegida sobre el resto. Como alternativa puede colocar la instrucción default nombre_label_stanza para indicar explícitamente la stanza con la que desea inicializar su sistema.

Una vez finalizada la configuración de lilo.conf se ejecuta el comando lilo ubicado en el directorio /sbin , lo cual copiara LILO al lugar indicado. Al iniciar el Sistema si se específica un "Master Boot Record" (vía el BIOS del Sistema) que contenga LILO, aparecerán las opciones para cargar los sistemas operativos Linux y Windows.

Eliminar LILO

En dado caso que sea necesario, la manera más fácil de eliminar LILO de un "Master Boot Record" es mediante el comando: FDISK /MBR

Este comando sobre-escribirá un "Boot record" del tipo MS-DOS, eliminando LILO, a su vez LILO guardará una copia de este "Boot Record" sobre-escrito de la forma /boot/boot.0200 . Inclusive si se desea volver a pasar este "Master Boot Record" al disco se ejecutaría el siguiente comando:

 
 dd if=/boot/boot.0200 of=/dev/hda bs=446 count=1  

Lo anterior copiaría el archivo /boot/boot.0200 al "Master Boot Record" del primer disco del sistema ( /dev/hda ); a pesar que los archivos boot.0200 son de 512 bytes,sólo es necesario copiar los primeros 446 bytes al MBR.

Floppy Disk sin LILO

También es posible crear una imagen del "Kernel" en un "Floppy Disk" sin el uso de LILO, aunque claro esta , si se inicia el sistema con este Floppy no existirá la posibilidad de elegir entre sistemas operativos, sino que Linux será cargado automáticamente.

Como se mencionó anteriormente la imagen del "Kernel" generalmente es un archivo llamado vmlinuz ubicado en el subdirectorio /boot , esta imagen al igual que la configuración de LILO indica la partición del sistema que contiene el directorio raíz ("root directory") que fue definido al instalar el Software. Para verificar el directorio raíz definido en la imagen, se utiliza el comando rdev .

osmosis# rdev /boot/vmlinuz  
Root Device /dev/hda1 

Lo anterior indica que el directorio raíz de esta imagen se encuentra /dev/hda1 , la primer partición del disco. Este parámetro es de suma importancia cuando no se utiliza LILO, ya que al ser leída la imagen del "Kernel", éste continuará con el arranque leyendo archivos de este directorio raíz, como: inittab,/rc.d/init.d/*....etc.En dado caso que este directorio raíz no se encuentre bajo la partición adecuada , se modifica de la siguiente manera:

osmosis# rdev /boot/vmlinuz /dev/hda2 

Lo anterior cambia el directorio raíz de vmlinuz a la partición 2 del primer disco. NOTA: Verifique esta configuración de nuevo con el comando rdev /boot/vmlinuz

*NOTA: Para formatear el Floppy: osmosis# mkfs -t ext2 /dev/fd0 1440

Ahora, para copiar esta imagen a un "Floppy" se utiliza el siguiente comando:

 osmosis# dd if=/boot/vmlinuz of=/dev/fd0 bs=8192 

Ya que sea ejecutado este comando el "Floppy" podrá ser utilizado para cargar la imagen del "Kernel" al iniciar el sistema.

Kernel

En la sección de LILO se pudo percatar que la imagen del "Kernel" se encuentra en un archivo llamado vmlinuz en el subdirectorio /boot , el nombre de la imagen no tiene mucha importancia , inclusive se pueden tener 4 o 5 imágenes diferentes en el sistema, el problema es que solo una puede ser utilizada para ejecutarse en el sistema, y por convención esta se llama vmlinuz.

Una de las razones más comunes por las cuales se genera otra imagen del "Kernel" es cuando se requiere soporte para un tipo especial de Hardware o funcionalidad adicional como múltiples direcciones IP , debido a que este tipo de funcionalidades ocupan de mayor espacio en el "Kernel", muchas imágenes de "Kernel" no vienen configuradas con estas opciones, ya que forzarían al "Kernel" a ocupar mayor memoria RAM, y en sistemas en los que el RAM es limitado, es un inconveniente que ésta memoria se encuentre ocupada por funciones que rara vez son utilizadas.

Código Fuente

El código fuente del "Kernel", siempre se encuentra en el subdirectorio /usr/src/linux/ , la ubicación de este código es importante ya que cuando se compilan algunos programas estos hacen uso del código fuente y lo tratan de localizar en este subdirectorio que es utilizado por convención.

Archivo "Tar"

El "Kernel" es distribuido comúnmente en un archivo Tar,este archivo Tar es descomprimido en el subdirectorio /usr/src/linux ; en el sitio http://www.kernel.org se encuentra un deposito de diferentes versiones del Kernel. Cabe mencionar que las versiones pares del "Kernel" son consideradas estables (2.0,2.2,2.4..), mientras los números impares son considerados inestables o de prueba (2.1,2.3,2.5...). Los números que van más allá de la segunda cifra son considerados "patches".

Patches

En ocasiones ocurre la necesidad de aplicar un patch al Código Fuente del Kernel que posee el sistema, estos patches deben de ser aplicados al código fuente en orden numérico y en el subdirectorio /usr/src/ , se utiliza el siguiente comando:

osmosis# gunzip -c <nombre_del_archivo_patch> | patch -p0

Una vez aplicados los patch, se debe verificar que estos hayan sido aplicados correctamente:

find /usr/src/linux -follow -name "*.rej" -print find /usr/src/linux -follow -name "*#" -print

Si los comandos anteriores despliegan un archivo, esto significa que el patch no fue aplicado correctamente, es importante corregir esto, ya que si existen errores es muy probable que el intentar generar una imagen del "Kernel" genere un error.

Generar una Imagen del Código Fuente

Para generar una imagen del "Kernel" se requieren de 6 pasos:

  1. Colocarse en el subdirectorio /usr/src/linux , de este directorio ejecutar el comando make config , esto iniciara un proceso de diversas preguntas que determinaran la composición del "Kernel"; existen otras opciones para realizar este proceso, ellas son: make menuconfig que utiliza un medio más gráfico, y make xconfig que es utilizado de X Windows .

    Debido a la longitud de preguntas de configuración que se realizan no sería conveniente mencionarlas todas, pero si cabe mencionar que existe una opción en ciertas preguntas denominada m , esta opción significa que se desea tener la funcionalidad en la imagen del "Kernel" mediante Módulos de Carga

  2. El paso anterior genero (o modifico) el archivo Makefile que se encuentra en /usr/src/linux , ahora es necesario encontrar las dependencias de los archivos que son llamados de este Makefile , para esto se utiliza el comando: make dep .

  3. A continuación se debe ejecutar el comando make clean

  4. En este punto se lleva acabo la compilación del código fuente para generar una imagen del "Kernel", el comando utilizado es make zImage ; este proceso puede tardarse desde unos minutos hasta varía horas, dependiendo de las funcionalidades que haya agregado a la imagen del "Kernel" y el sistema en el que se este llevando acabo la compilación (cantidad de RAM, procesador...), la imagen compilada del kernel residirá en el subdirectorio usr/src/linux/arch/i386/zImage (si el procesador no es Intel 386, el subdirectorio i386 cambiara dependiendo del tipo de procesador.

  5. La imagen del "Kernel" (generada en el paso 4) debe ser copiada a la partición especificada en LILO , o bien a un "Boot Floopy" según sea el caso.

Ubicación y Tipos de Módulos

Los módulos ("drivers") del sistema se encuentran en el subdirectorio /lib/modules/<versión_del_kernel> , bajo subdirectorios que clasifican los tipos de drivers (cdrom,video,pcmcia...), cada archivo es un archivo objeto ( terminación .o ). Cuando se ejecutan los comandos make modules y make modules_install (al compilar el código fuente del "Kernel"), los drivers que se instalan son aquellos que forman parte de la distribución del "Kernel" , sin embargo, hay ocasiones en que los vendedores de cierto Hardware proporcionan su driver para que este sea cargado como modulo en el "Kernel", por convención estos también se instalan en el subdirectorio /lib/modules/<versión_del_kernel> .

Activar y Desactivar Módulos

insmod es el comando que comúnmente se utiliza para activar un modulo en el "Kernel".

osmosis# insmod /lib/modules/2.2.5-15/misc/joystick.o

Activaría el modulo joystick.o para utilizar un "joystick" en el sistema.

En ocasiones se requiere que cierto modulo se encuentre en el sistema para que otro pueda ser activado, para esta labor es necesario generar una base de los módulos con todas sus dependencias ( modules.dep ) , el siguiente comando lo realiza:

osmosis# depmod -a

Para activar un modulo y en dado caso otros módulos necesarios para su funcionamiento, se utiliza el comando modprobe

:
osmosis# modprobe radio-aztech

Activaría el modulo radio-aztech con todos los módulos que dependan de éste.

Para eliminar un modulo de la imagen del "Kernel" se utiliza rmmod :

osmosis# rmmod ftap

Eliminaría el modulo ftap de la imagen actual del sistema. Para observar que módulos se encuentran activos en la imagen del sistema se utiliza el comando lsmod .

En dado caso que se requiera activar los módulos al arranque del sistema, es posible colocar los comandos insmod o modprobe en el archivo de arranque rc.local ubicado en /etc/rc.d/