Sin embargo, compilar el kernel puede ser útil en ciertas circunstancias, como por ejemplo:
- Activar funciones no activadas por defecto en el kernel de la distribución
- Usar opciones experimentales
- Mantener el kernel actualizado
- Optimizar/ajustar el kernel a nuestro hardware
- Por el placer de aprender
Si no necesitas hacer nada de lo anterior te recomiendo que no compiles el kernel manualmente. En mi caso lo he hecho para poder activar el nuevo sistema de ficheros experimental btrfs, sobre el que hablaremos en el próximo artículo.
- Instalar las fuentes
Descargaremos y descomprimimos la versión más actual (la 2.6.31.6 a día de hoy) con la orden:
$ wget -c ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.6.tar.bz2
$ tar xvfj
linux-2.6.31.6.tar.bz2
Si no lo hemos hecho aun, necesitaremos instalar algunos paquetes para poder compilar:$ sudo aptitude install build-essential libncurses5-dev
- Configurar las opciones
$ cp /boot/config-`uname -r` ~/linux-2.6.31.6/.config
Ahora lanzaremos el menu de configuración del kernel:
$ cd
~/linux-2.6.31.6/ && 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.
- Compilar kernel y módulos
$ make
Empezaremos a ver mensajes por pantalla que nos informan del progreso de la compilación. En función de la potencia del hardware y de las opciones marcadas en el kernel este proceso puede tardar mucho rato (en mi sistema tardó 1 hora 40 minutos en compilar el kernel y los módulos con las opciones por defecto).
Para instalarlo ejecutaremos:
$ sudo make install modules_install
Generamos un archivo initrd con:
$ sudo update-initramfs -c -k 2.6.31.6
Los módulos quedarán instalados en /lib/modules/2.6.31.6, el kernel y el archivo initrd en /boot/vmlinuz-2.6.31.6 y /boot/initrd.img-2.6.31.6 respectivamente.
- Actualizar grub1 (Versiones 9.04 y anteriores)
$ sudo gedit /boot/grub/menu.lst
Recomiendo duplicar la sección de Ubuntu cambiando el número del archivo del kernel y la linea initrd por los nuevos), en mi caso por ejemplo quedó así (resalto los cambios que he hecho en rojo para que lo veais mejor):
[...]
title Ubuntu Jaunty 9.04
root (hd0,1)
kernel /boot/vmlinuz-2.6.28-16-generic root=/dev/sda2 ro splash locale=es_ES vga=792
initrd /boot/initrd.img-2.6.28-16-generic
quiet
title
Linux 2.6.31.6 - manual
root (hd0,1)
kernel
/boot/vmlinuz-2.6.31.6
root=/dev/sda2 ro splash locale=es_ES vga=792
initrd
/boot/initrd.img-2.6.31.6
quiet
[...]
La parte que he añadido es la segunda, y el resto del archivo de configuración del grub se deja sin alterar.
Una vez guardardo el archivo reiniciamos y seleccionamos el nuevo kernel, si todo ha ido bien ejecutamos
uname -r
y veremos algo así:$ uname -r
2.6.31.6
- Actualizar grub2 (Versiones 9.10 y posteriores)
Primero editaremos el archivo de opciones generales de grub para asegurarnos de que aparece el menu de selección de sistema operativo y que tenemos tiempo de elegir el nuevo kernel (si en tu sistema ya se muestra el menu de grub2 saltate este paso):
$ gksu gedit /etc/default/grub
Y nos aseguraremos de comentar (poniendo un "#" delante) la linea:
#GRUB_HIDDEN_TIMEOUT=0
Como el nuevo formato de configuración no es muy conocido yo os recomiendo que saqueis una copia de una de las entradas actuales de vuestro grub leyendo el archivo /boot/grub/grub.cfg. En mi caso las siguientes lineas corresponden a una entrada en el menu:
menuentry "Ubuntu, Linux 2.6.31-14-generic" {
recordfail=1
save_env recordfail
set quiet=1
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set fcc3f8cd-346f-4337-b75d-dff91753f1d3
linux /boot/vmlinuz-2.6.31-14-generic root=UUID=fcc3f8cd-346f-4337-b75d-dff91753f1d3 ro quiet splash
initrd /boot/initrd.img-2.6.31-14-generic
}
Nota: los identificadores de particiones y los nombres de archivo serán diferentes en cada caso, usad los vuestros, no copieis estos!Ahora añadiremos la entrada manual copiando la información anterior al final del archivo /etc/grub.d/40_custom y modificando los nombres del archivo del kernel y del initrd por los que hemos creado nostotros:
$ gksu gedit /etc/grub.d/40_custom
En mi caso al final del archivo añadí estas lineas (resalto los cambios que he hecho en rojo para que lo veais mejor):
menuentry "Linux 2.6.31.6 - manual" {
recordfail=1
save_env recordfail
set quiet=1
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set fcc3f8cd-346f-4337-b75d-dff91753f1d3
linux /boot/vmlinuz-2.6.31.6 root=UUID=fcc3f8cd-346f-4337-b75d-dff91753f1d3 ro quiet splash
initrd /boot/initrd.img-2.6.31.6
}
Como veis lo único que he cambiado es la etiqueta de la entrada, la referencia al archivo del kernel y al archivo del initrd.Finalmente actualizaremos el grub2 con la orden:
$ sudo update-grub
Debemos ver que aparece el nuevo kernel que hemos introducido, reiniciamos y seleccionamos el nuevo kernel, si todo ha ido bien ejecutamos
uname -r
y veremos algo así:$ uname -r
2.6.31.6
- Más información
Como compilar el kernel de ubuntu
- Artículos relacionados
5 comentarios :
Hasta que porfin encontre como compilar el kernel de linux desde las mismas fuentes de kernel.org y actuales (2.6.31) en ubuntu (en mi caso xubuntu) aunque tratare de compilar el kernel 2.6.32 (y no la x.31) para ver si porfin tengo soporte a ext4 en xubuntu 8.04 lts.
GRacias de antemano por el turorial.
Hize lo que ponias (pero con el sources del kernel 2.6.32)pero me trabo en esto:
sudo make install modules_install
me sale esto:
sh /home/jorge/linux-2.6.32/arch/x86/boot/install.sh 2.6.32 arch/x86/boot/bzImage \
System.map "/boot"
In order to use the new kernel image you have just installed, you
will need to reboot the machine. First, however, you will need to
either make a bootable floppy diskette, re-run LILO, or have GRUB
installed.
Checking for ELILO...No
Checking for LILO...No
Checking for SILO...No
Checking for PALO...No
Should I make a bootdisk? (y/N) n
WARNING: Your system is probably unbootable now. After correcting any
problems, rerun this script with the command `mkboot -i'.
make[1]: *** [install] Error 1
make: *** [install] Error 2
despues cuando hago:
sudo update-initramfs -c -k 2.6.32
y me sale esto:
update-initramfs: Generating /boot/initrd.img-2.6.32
Cannot find /lib/modules/2.6.32
update-initramfs: failed for /boot/initrd.img-2.6.32
Datos de mi sistema:
*Xubuntu 8.04 lts (totalmente actualizado al 141209) con ext3,
*Kubuntu 9.10 con ext4
*Grub2 (cuando instale el xubutnu 8.04 despues de kubuntu 9.10 le puse que no instalara grub, pues ya tenia grub2)
*La única razon para tratar de compilar el kernel 2.6.32 es para tener soporte (montarlo) a mi particion ext4 de kubuntu 9.10, si sabes de otra manera de tener aceso a esa particion sin necesidad de instalar un nuevo kernel dimelo porfavor.
Para compilar los modulos ejecuta: sudo make modules_install
Luego revisa que te ha generado una imagen del kernel en /boot (lo distinguirás por que debe ser el unico de version 2.6.32)
Revisa tambien que el grub se ha actualizado para soportar el nuevo kernel, en caso de que no sea hazlo tu a mano tam como explica el articulo.
Suerte
che existe una pagina que te podes bajar los debs de los kernels mas nuevos
yo me baje el 2.6.32.2 y me anda barbaro en mi amd64 ahi les dejo la pagina muchos no lo saben
http://kernel.ubuntu.com/~kernel-ppa/mainline/
Buen aporte,aunque nunca está de más saber compilar un kernel manualmente. Un saludo.
Publicar un comentario