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.
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.
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.
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:
|
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.
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:
|
Ya que sea ejecutado este comando el "Floppy" podrá ser utilizado para cargar la imagen del "Kernel" al iniciar el sistema.
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.
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.
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".
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.
Para generar una imagen del "Kernel" se requieren de 6 pasos:
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
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
.
A continuación se debe ejecutar el comando make clean
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.
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.
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> .
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/