Compilar el Kernel en linux (kernels versión 2.6)

Esta entrada huele a langostinos. Sí, a langostinos, a pescado al horno, a carne asada… Cuando empecé el ciclo, el primer año, el horario era de tarde, desde las cuatro hasta las once. La asignatura de sistemas operativos y redes la teníamos en las últimas horas, a partir de las nueve y viente. Y el tema del kernel lo vimos allá por primavera, así que ya hacía un relativo calorcillo. El caso es que este calor nos obligaba a tener abiertas las ventanas, y a esas horas llegaba el olor de las cenas que se preparaban en los restaurantes que hay detrás del instituto, inundando un aula de alumnos con el estómago vacío a esas últimas horas. De ahí que mi amigo Brais dijera siempre “no huele a comida, huele a Kernel”, por lo que sí, el kernel huele a langostinos.

Ahora nos centraremos en las versiones 2.6.x (siendo x el número de revisión de dicho kernel), que es con las que más he trabajado (bueno, con las 2.4 también, tal vez le dedique una entrada más adelante), a falta de ponerme algún día a cacharrear con las 3.0 (la última versión estable creo que es la 3.0.4 aparecida este verano). Lo primero es conseguir una versión del kernel, cosa que podéis hacer en la página www.kernel.org, que tiene además mirrors para varios países. Aquí podéis encontrar siempre la última versión, claro que debéis tener en cuenta que muchas veces esta puede ser una versión inestable. Por otra parte en muchos casos también puede ser interesante ir a la página del creador de nuestra distribución (Debian, Ubuntu, Red Hat…) para buscar allí el paquete del kernel, porque puede venir con modificaciones específicas para nuestra distribución.

Una vez descargado el kernel en el directorio que vamos a utilizar para la compilación, tras desempaquetarlo y tras comprobar las versiones necesarias de las utilidades básicas procedemos a la limpieza de anteriores con el siguiente comando:

 make clean mrproper

Parece un chiste, pero no. Ese es el comando que limpia rastros de anteriores compilaciones (igual un día me lanzo y hago una versión que se llame Don Limpio…). Una vez limpio, nos toca la configuración de parámetros. Si disponemos de un archivo .config previo nos ahorrará empezar de cero. Para esto usamos el comando

 make menuconfig

Ahora hay que construir la imagen binaria del kernel, que requiere de estos dos comandos:

 make dep

make bzimage

Y seguimos con la construcción de los módulos y su posterior instalación (/lib/modules/version):

 make modules

make modules_install

Y finalmente (bueno, finalmente todavía no, pero casi) copiamos de la imagen a su posición final, desde la carpeta provisional que hemos utilizado (en este ejemplo la arquitectura es la i386, así que adapta la instrucción a tu caso, y acuérdate también de cambiar x por el número de tu revisión del kernel):

 cp arch/i386/boot/bzimage boot/vmlinuz-2.6.x.img

Ahora nos queda crear la imagen initrd que consideremos necesaria, con las utilidades de rigor en cada versión. Y ajustamos el bootloader lilo o grub para que arranque con este kernel, según sea el utilizado.

Los últimos pasos (vmlinuz, system.map e initrd) de movimientos de archivos a /boot se realizan normalmente con el proceso

 make install

Pero hay que tener en cuenta que esto realiza todo el proceso, y que puede alterar los enlaces por defecto a /boot o modificar los bootloaders. Es algo que tenemos que tener en cuenta a la hora de guardar configuraciones pasadas.

El initrd en Fedora/Red Hat se crea automáticamente con install. En cambio en Debian y varios de sus derivados la cosa es bien distinta, y ahí tenemos dos opciones:

  1.  Crearlo usando mkinitrd (en las versiones anteriores al kernel 2.6.12) o con mkinitramfs (en las posteriores).
  2.  Construir el kernel desde el principio al estilo “Debian Way”, a la que tal vez dedique otra entrada, aunque si tenéis mucha prisa podéis consultar el manual que hay disponible en la web oficial de Debian.
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s