Compilando el kernel en linux

Sergio Paracuellos


Tabla de contenidos
1. Introducción
2. Obteniendo y compilando los fuentes

1. Introducción

En algunos de los articulos que hay incluidos en la página de grulla se habla de que hay que compilar el kernel para dar soporte a algunos dispositivos. Pues bien, este pico how-to pretende explicar a los que no estén familiarizados con linux como se realiza este proceso.


2. Obteniendo y compilando los fuentes

En primer lugar para poder compilar el kernel necesitamos tener los fuentes del mismo. Para ello lo mejor es bajarselos de internet en esta url.La última versión estable del kernel es la 2.4.18.

Una vez que tenemos los fuentes en nuestra máquina debemos descomprimirlos en un directorio, lo normal es poner el tarball en /usr/src/. Los fuentes vienen en formato .tar.gz o .tar.bz2. Para descomprimirlos haremos lo siguiente (según el formato):

			par:/usr/src# tar xvfz linux-2.4.12.tar.gz
			par:/usr/src# tar xvfj linux-2.4.12.tar.bz2	   
		

Se creará un directorio llamado linux. Ahora ya estamos listos para empezar. Estamos situados en /usr/src/linux. Podemos optar por tres caminos:

			 make config
			 make menuconfig
			 make xconfig		    
		

Yo personalmente os recomiendo que useis la última, pues es la más gráfica. Esto nos abrirá una ventana en la que tenemos todas las opciones que hay en el kernel. make menuconfig funciona de forma parecida a make xconfig pero no necesita las X Windows, funciona en consola, la otra, make config pregunta una por una, secuencialmente, todas las opciones, no es nada recomendable. Marcaremos las opciones que necesitemos. Yo ahí no puedo entrar pues depende de las necesidades de cada individuo. Lo que si que tengo que decir es que hay una opción llamada "loadable modules support" que nos permite meter módulos en el sistema. Un módulo es una parte del kernel que se carga en la memoria sólo cuando se la necesita y se descarga cuando ya no es necesaria, compilar partes del kernel como módulos hará que el sistema funcione más rápido, sin embargo no es bueno compilar como módulos cosas que se van a usar constantemente ya que su continua carga y descarga ralentizaría el sistema. Además, compilar como módulos cosas que son necesarias para arrancar el sistema hará que el nuevo kernel no sea capaz de arrancar, esto se debe a que los módulos se encuentran en el sistema de ficheros y no están disponibles hasta que éste a sido montado. Por ejemplo, compilar el soporte para el sistema de ficheros ext2 como módulo en un sistema cuya partición raíz es un sistema de ese tipo nos dejará un kernel inservible. Para compilar algo como parte del kernel hay que contestar "y", para compilarlo como módulo, "m", y para no compilarlo se debe contestar "n". Hay muchas opciones a las que contestar, y es posible que no sepamos lo que hacen una buena parte de ellas, la ayuda que tiene cada opción es bastante buena y nos dará una idea de lo que debemos contestar. Una vez marcadas todas las opciones deberemos salir guardando los cambios. Procederemos a continuación a compilar todo aquello que acabamos de marcar. Pues bien haremos:

			
			par:/usr/src/linux# make dep; make clean; make bzImage
		

Esto compilará nuestro sistema. Y una vez aquí habremos terminado la compilación a no ser que hayamos incluido módulos en el sistema. Veamos como compilar ahora los módulos:

			par:/usr/src/linux# make modules
			par:/usr/src/linux# make modules_install
		

Una vez en este punto, no nos queda más que copiar el nuevo kernel a su sitio para poder arrancarlo. La compilacián deja el kernel en el directorio /usr/src/linux/arch/i386/boot/ con el nombre de bzImage. En la mayoría de distribuciones se colocan los kernels en el directorio /boot, lo copiaremos allí:

			par:/usr/src/linux/arch/i386/boot# mv bzImage /boot/2.4.18
		

Lo único que nos queda es editar el /etc/lilo.conf y añadir una nueva entrada:

			image=/boot/2.4.18
			label=Kernel2.4.18
			read-only
			alias=2
			append="hdc=ide-scsi" (esto serí por la grabadora)
		

No conviene borrar el kernel viejo ni eliminarlo del fichero de configuración de lilo, si el nuevo kernel no funciona, lo cual es muy probable las primeras veces, siempre podremos volver a arrancar con el viejo kernel para hacer los cambios necesarios. Si el nuevo kernel es simplemente incapaz de arrancar el sistema, lo más probable es que nos hallamos contestado "n" o "m" a alguna opción en la que teníamos que haber dicho "y". Si lo que no funciona es otra cosa, algún periférico, alguna aplicación, etc. es probable que nos hallamos olvidado de compilar el soporte para ese dispositivo o que hallamos elegido una opción equivocada. En cualquier caso no pasa nada si el kernel recién compilado no funciona como queríamos, el kernel viejo seguirá funcionando igual que antes.

Espero que disfruteis de la compilación. Podeís encontrar más información en el Kernel-HOWTO