Kernel Mini Como
De Grupo de Usuarios de GNU Linux de Quilmes
Kernel MiniComo
Esto es una adaptación de http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html, tratando de dar una guía rápida y simple que entre en una página. Los ejemplos son para un kernel 2.6.14.2, pero aplican a toda la rama 2.6.x, para los kernels de la serie 2.4 se hacen notas aclaratorias donde hace falta algún procedimiento especial.
Obtención del árbol de fuentes
- Descompactar los fuentes (preferentemente en /usr/src) y hacer un link simbólico en /usr/src/linux:
$ cd /usr/src
$ tar xjvf /tmp/linux-2.6.14.2.tar.bz2
- Borramos el link simbólico actual para crear el nuevo:
$ rm linux
$ ln -s /usr/src/linux-2.6.14.2 /usr/src/linux
Versionado del kernel
Se recomienda identificar inequívocamente cada kernel generado, para eso hay que editar el archivo Makefile que se encuentra en la base del árbol de los fuentes.
- Hay que buscar las siguiente línea (o similar):
EXTRAVERSION = -2
- Y cambiar el valor que aparezca por lo que nosotros queramos, por ejemplo:
EXTRAVERSION = -test1
Nota: esto es un paso recomendado, pero no es necesario.
Creación de la configuración del kernel
Las siguientes formas de configurar el kernel están soportadas.
- Texto plano y secuencial de preguntas (no recomendado por no tener forma de retroceder ante un error):
$ make config
- Regenera la configuración, basándose en la configuración previa de un kernel de la misma serie (solo si queremos usar la misma configuración que usamos en un kernel anterior):
$ make oldconfig
- Menú basado en ncurses (la opción recomendada):
$ make menuconfig
- Menú para XWindows (en la serie 2.4 requiere Tcl/Tk y en la serie 2.6 requiere QT):
$make xconfig
Las opciones especificas a seleccionar y cuales compilar como módulos, dependen de cada uno. Recomendado: tanto el menú ncurses como el de XWindows tienen una breve ayuda para cada opción.
Pasos previos a la compilación
- La serie 2.4 requiere que se generen manualmente las dependencias:
$ make dep
- Luego, tanto para 2.4 como para 2.6, se limpia el árbol de archivos excedentes:
$ make clean
Compilación del kernel
- Para generar la imagen de kernel se recomienda para la serie 2.4:
$ make bzImage
- Y para la serie 2.6 basta con:
$ make
Compilación de los módulos
- Si hay elementos del kernel que se configuraron como módulos, se deben compilar aparte:
$ make modules
Instalación de los módulos
- Los módulos se instalan en /lib/modules/$KERNELVERSION mediante:
$ make modules_install
Nota: si estamos instalando módulos de un kernel con versión *idéntica* a uno instalado previamente, este paso va a sobrescribir los módulos del kernel anterior. Como es posible que ambos kernels, a pesar de tener la misma versión, tengan diferentes módulos compilados, se recomienda hacer una copia de respaldo de lo que esta en /lib/modules.
Initial RAMDisk
El Initial RAMDisk es una imagen que contiene los módulos necesarios para montar el root filesystem y solo es necesario cuando este soporte no se encuentra contenido en el kernel. Estas situaciones se presentan comúnmente cuando el driver del filesystem usado o del controlador de discos usado se configuró como módulo en lugar de estar incluido dentro del kernel. La imagen permite la carga de estos módulos antes de que el kernel tenga acceso al disco y de esta manera poder continuar la carga de los demás módulos.
- Para crear un Initial RAMDisk:
$ mkinitrd /boot/initrd-2.6.14.2.img 2.6.14.2
Se recomienda la lectura de ftp://ftp.slackware.com/pub/slackware/slackware-10.2/testing/packages/linux-2.6.13/README.initrd para tener una referencia mas clara de este tema.
Instalación del kernel
Para instalar el nuevo kernel es necesario copiarlo junto con su mapa.
- Copiamos el kernel (si tu arquitectura no es i386, hay que cambiar el directorio donde buscar el kernel):
$ cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.14.2
- Copiamos el mapa:
$ cp System.map /boot/System.map-2.6.14.2
- Guardamos copia del mapa anterior:
$ mv /boot/System.map /boot/System.map.old
- Enlazamos el nuevo mapa al nombre correcto:
$ ln -s /boot/System.map-2.6.14.2 /boot/System.map
Configuración del cargador de arranque
- Dependiendo del cargador de arranque en uso, se modifica su configuración, en el caso de GRUB (/boot/grub/menu.lst):
#Cambiar 2.6.14.2 por 2.4.x.x si estamos con un kernel de serie 2.4
title Nuevo Kernel (2.6.14.2)
#Cambiar por el dispositivo de arranque correcto
root (hd0,0)
kernel /boot/vmlinuz-2.6.14.2 ro root=LABEL=/
#Solo agregar si creamos un Initial RAMDisk
#initrd /boot/initrd-2.6.14.2.img
- En el caso de LILO (/etc/lilo.conf):
#Cambiar 2.6.14.2 por 2.4.x.x si estamos con un kernel de serie 2.4
image=/boot/vmlinuz-2.6.14.2
label=NuevoKernel
#Cambiar por el dispositivo de arranque correcto
root=/dev/hda1
read-only
#Solo agregar si creamos un Initial RAMDisk
#initrd=/boot/initrd-2.6.14.2.img
- Y luego reinstalamos lilo:
# /sbin/lilo
Listo
Reiniciamos y en el menú del gestor de arranque seleccionamos el nuevo kernel.
