Compilación del núcleo de Linux
Escrito por Ritzzo

Publicado:13/10/2002
  Actualizado:13/10/2002
 

Éste artículo está dedicado a la tarea de compilar un kernel para dar soporte a algun tipo de hardware que necesitemos y que en ese momento no tengamos en el kernel o bien simplemente para poder actualizar el núcleo a una versión estable mayor o por último por el simple hecho de investigar y probar a realizar cosas nuevas. Imaginemos el caso de que queremos dar soporte al kernel para un puerto de infrarrojos (IrDA) por lo tanto tendremos que compilar el núcleo para darle soporte.

Empezaremos por buscar las fuentes del kernel que queremos compilar. Buscaremos un mirror o bien podremos descargarlos desde www.kernel.org mediante ftp , http o bien rsync. No obstante si tenemos una debian instalada podriamos hacer lo siguiente:

            apt-cache search kernel-source*

            apt-cache search kernel-headers*

Con estos dos simples comandos buscamos en el repositorio de los sources que tenemos , los sources del kernel y sus headers, que personalmente me gusta tener también estas últimas. Seguidamente bajamos el kernel que queremos desde kernel.org o bien si tenemos debian con el siguiente comando:

            apt-get install kernel-source-2.4.X

Una vez tengamos los sources del kernel que suelen ser alrededor de 25 megas. Estos sources se instalaran en  /usr/src a donde tendremos que dirigirnos seguidamente. Una vez allí tendremos que desempaquetar el source, y este proceso se puede llevar a cabo de varias formas:

            1.- bunzip2 paquete.tar.bz2 y luego un tar xvf paquete.tar

            2.- tar jxvf paquete.tar.bz2

El pirmero es más largo pero quizas más claro para las personas que sea su primera vez a la hora de compilar el núcleo. A libre elección esta el método a seguir por cada uno. Una vez hecho esto, tendremos el source desempaquetado en /usr/src, y generando /usr/src/linux, sino es así podremos crear un enlace . Nuestro siguiente paso sera crear un enlaces simbolicos del source de la siguiente manera:

            ln -sf /usr/src/sourcedelkernel  /usr/src/linux (sino ha sido creado usamos este enlace)

            ln -sf /usr/src/linux/include/linux  /usr/include/linux (opcional)

            ln -sf /usrsrc/linux/include/asm   /usr/include/asm (opcional)

 

Aqui observamos que creamos un enlace a "linux". Donde he puesto sourcedelkernel , ahi deberemos poner el kernel que vamos a compilar. Todo este proceso deberemos realizarlo como administrador del sistema , es decir, como root.

Una vez hecho esto, debemos también tener en cuenta que debemos tener las versiones de los paquetes necesario para realizar una compilación del nucleo satisfactoria, con esto me refiero a paquetes como: gcc, binutils, bin86, ncurse, etc.

Llegados a este punto podremos documentarnos en /usr/src/linux/Documentation, para tener una idea más acertada sobre el tipo de soporte que puede dar esa versión del kernel.

Entramos en la compilación hablando de los tres tipos de sistemas para elección de opciones del kernel. Tenemos el make config , make menuconfig y el make xconfig. El primero es quizas el más "díficil" de todos, es en modo texto y sin menús. El siguiente esta basado en ncurses y necesita de ellas. Es un modo texto con menus, personalmente es el que uso yo para recompilar el núcleo. Y por ultimo tenemos el modo grafico, el más sencillo y el que a mi forma de ver es el que debería usarse si es su primera vez.

Una vez ejecutado el comando correspodiente y elegido las opciones necesarias, pasamos al siguiente paso que es ejecutar un make dep. Este comando sirve para la creación adecuada de las dependencias necesarias para la compilacion del núcleo.

A continuación ejecutamos un make clean. Nos servirá para hacer una compilación limpia.

Por último haremos un make bzImage, sera el paso donde se compile el núcleo. También cabe decir que podremos hacer en este punto, otro tipo de opciones como : make zdisk , make zlilo, etc. la primera genera un disket de arranque y la segunda pues instala la imagen del kernel en el LILO. Personalmente me quedo con la primera mencionada "bzImage".Ésta generará una imagen en /usr/src/linux/arch/i386/boot/ o similar /usr/src/linux/boot. Esta imagen junto al system.map deberán ser trasladados en su momento. Todo lo dicho anteriormente se puede simplificar ejecutando : make dep && make clean && make bzImage.

Ahora entramos en materia de compilación de los módulos del kernel, para ello tendremos que realizar dos sencillos pasos que son : make modules && make modules_install. Es conveniente que si estamos recompilando un kernel que teniamos antes pues renombremos los módulos de /lib/modules, para no tener problemas. Seguidamente movemos la imagen creada del nuevo kernel y el system.map a /boot. En este punto tan solo tendremos que editar  /etc/lilo.conf e introducir el nuevo kernel y probarlo o bien hacer un disket de arranque con el kernel compilado. Para ello me remito a que se lean la pagina man de mkboot o mkbootdisk. Reiniciamos y comprobamos que todo ha salido bien.

Ahora expondré una serie de modelos a seguir a forma de resumen.

 

El primer modelo es el ya expuesto anteriormente: make xconfig/menuconfig/config , make dep && make clean && make bzImage, make modules && make modules_install.

 

El segundo modelo es para los usuarios de Debian. Instalamos el paquete "kernel-package" con apt-get. Seguidamente con el source del kernel hacemos un make xconfig/menuconfig/config. Luego procedemos a hacer un make-kpkg clean, acto seguido un make-kpkg --revision loquequeramos kernel_image. Esto nos generará un kernel_image.deb que tan solo tendremos que instalar con dpkg -i paquete.deb. Reiniciamos , vemos que todo va bien y ejecutamos un depmod -a como root.