16 jun. 2008

Compilar el kernel (2.6.25)

Compilar el kernel es algo que no está al alcance de todos, pero en ocasiones es necesario bien para activar una nueva característica que necesitamos, modificar algun parámetro existente, optimizar el rendimiento o, como en mi caso, simplemente por aprender.

Empezaremos descargando una versión actual de las fuentes del kernel (en este caso utilizaremos la última versión disponible que es la 2.6.25) y lo descomprimimos con la siguiente órden:

$ wget -c ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.tar.bz2
$ tar xvfj linux-2.6.25.tar.bz2 && cd linux-2.6.25


Si no lo hemos hecho aun, necesitaremos instalar algunos paquetes para poder compilar:
$ sudo aptitude install build-essential libncurses-dev

Usaremos la configuración del kernel actual como base para la configuración del nuevo:
$ cp /boot/config-`uname -r` ~/linux-2.6.25/.config

Ahora lanzaremos el menu de configuración del kernel:
$ cd ~/linux-2.6.25/ && make menuconfig


Nota: si teneis errores diciendo que falta alguna libreria, compilador o utilidad de desarrollo, la instalais y volveis a lanzar el comando.

Nota: existen varios tipos de menús de configuración del kernel, tanto gráficos como en modo texto. En el archivo README del kernel teneis una explicación más detallada.

No voy a alargarme aquí explicando todas las pantallas y opciones pero os recomiendo que os tomeis vuestro tiempo, leais la ayuda y ajusteis al máximo las opciones a vuestro sistema. Un buen consejo es que si no sabemos lo que hace una opción es mejor no tocarla.

Una vez repasadas todas las pantallas y marcadas las opciones deseadas salimos del menu y compilamos el kernel con:
$ make

Nota: este proceso puede llegar a ser muy largo, en mi sistema tardó unos 60 minutos en compilar un kernel con la configuración por defecto, que incluye 1741 módulos!

Y lo instalamos con:
$ sudo make install modules_install

Generamos un archivo initrd con:
$ sudo update-initramfs -c -k 2.6.25

Los módulos quedarán instalados en /lib/modules/2.6.25, el kernel y el archivo initrd en /boot/vmlinuz-2.6.25 y /boot/initrd.img-2.6.25 respectivamente.

Ya sólo nos queda añadir una entrada en el menú del grub para el nuevo kernel (recomiendo duplicar la entrada que tengas para Ubuntu cambiando el número del archivo del kernel y la linea initrd por los nuevos), en mi caso por ejemplo quedó así:

[...]
title Ubuntu hardy 8.04
root (hd0,1)
kernel /boot/vmlinuz-2.6.24-16-generic root=/dev/sda2 ro splash locale=es_ES vga=792
initrd /boot/initrd.img-2.6.24-16-generic
quiet

title Ubuntu hardy 8.04 - Kernel 2.6.25
root (hd0,1)
kernel /boot/vmlinuz-2.6.25 root=/dev/sda2 ro splash locale=es_ES vga=792
initrd /boot/initrd.img-2.6.25
quiet
[...]


Reiniciamos y seleccionamos el nuevo kernel, si todo ha ido bien ejecutamos uname -r y veremos algo así:

$ uname -r
2.6.25


El principal problema que he encontrado es que tanto los drivers restringidos como el virtualbox y algunos otros programas dependen de la versión del kernel instalado y habría que reinstalarlos para que funcionasen. Mi recomendación es seguir usando el kernel de la distribución y dejar la versión 2.6.25 para pruebas y necesidades especiales.

7 comentarios :

car dijo...

muy bueno fosco_! gracias... siempre quise saber como se compilaba un kerner pero no tenia tiempo para investigar... esto me vino de 10...

saludos...

Kpru dijo...

jajajajajaja

boníssim!!!!!

mil gràcies!!!

Kpru dijo...

no m'ho podia creure!!!!!!

és brutal!

podries fer especial anècdotes d'aquestes!!! són espectaculars!

;)

Omar López dijo...

Que tal amigo pues he tenido falla a la hora de compilar el kernel, bueno mas bien a la hora de querer hechar a andar, pues cuando quiero entrar al kernel, comienza a cargar normal, pero llega a un momento en el cual se detiene y manda a initmafr o algo asi, q crees q este pasando??

fosco_ dijo...

Pues es difícil de saber con los datos que das, lo mas provable es que hayas quitado alguna opcion que es necesaria para que el kernel pueda arrancar en tu hardware o algun modulo que necesita para acceder al disco o al sistema de ficheros.

Fíjate bien en los mensajes que va dando antes de mandarte al initramfs y seguramente lo verás. Suerte

pelomher dijo...

Este blog me ha dado una idea pero el asunto es mas complicado:

En un portatil antiguo SOLAMENTE tengo arranque mediante lector de CD-DVD. Repito SOLAMENTE.

Las unicas versiones de linux que he podido instalar , dejando fuera los arranques ACPI-off han sido:

Suse 9.03 (no reconoce pendrive ni RTL8187 y es un verdadero rollo instalar nuevos paquetes por las dependencias)

Bactrack2 (con lilo).Pero no he conseguido arrancar la particion BT2 aunque logre configurar un arranque que la ve

Guadalinex V4.-kernel 2.6.5 .No monta pendrive ni RTL8187.

He pensado en intentar instalar un kernel al menos 2.6.25 (el controlador que viene con la tarjeta
RTL8187 necesita hernel 2.6.25 o mas ) en esta ultima version de Guadalinex, pero la instalacion tendria que ser sin conexion a internet.

Asi que si tienes paciencia y ganas te ruego que me digas :
1.-que tendria que descargar desde otro ordenador
2.-como tendria que instalarlo manualmente.

fosco_ dijo...

@pelomher: parece q tu principal problema es el arranque unicamente desde CD. Yo lo que te recomiendo es que instales Ubuntu Lucid (10.04), una vez instalada puedes usar el SuperGrub Disk o el CD alternat ede ubuntu para arrancar desde CD pero usando el sistema instalado.

No se si te habrá servido de ayuda.