Compilar kernel de Linux en Debian o Ubuntu

pinguinodebian.

Luego de confirmar los problemas con Debian en Palola, me puse las pilas para compilar el último kernel de Linux.

Después de pasarme un buen rato en Internet, armé el rompecabezas que me funcionó para compilar el último kernel estable de Linux al día de hoy, el 2.6.29.3, en Palola con Debian Lenny (rama estable). El mismo rompecabezas lo apliqué en un Kubuntu Jaunty compilando el kernel 2.6.30, así que vale también para Ubuntu. Lo escribo:

  1. Instalar los paquetes necesarios para compilar el kernel:

    # apt-get install build-essential libncurses5 libncurses-dev kernel-package
  2. Bajar los fuentes de http://www.kernel.org. Los que bajé yo:http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.3.tar.bz2
  3. Copiar los fuentes a /usr/src, descromprimir y pararse en el directorio de fuentes:

    # cp /tmp/linux-2.6.29.3.tar.bz2 /usr/src
    # cd /usr/src
    # tar -xvjf linux-2.6.29.3.tar.bz2
    # cd linux-2.6.29.3
  4. Limpiar los fuentes del kernel (no es necesario si es la primera vez que compilo):

    # make mrproper
  5. Copiar la configuración del kernel actual (en mi caso, la 2.6.26-1-amd64), al directorio con las fuentes del nuevo kernel, poniéndole como nombre “.config
    
    # cp /boot/config-2.6.26-1-amd64 ./.config
  6. Configurar el nuevo kernel agregando módulos a la configuración copiada:

    1. # make menuconfig
    2. Cargar la configuración del kernel actual: archivo “.config”
    3. Agregar módulos. Yo agregué los siguientes para compilar especialmente para procesador Core 2, para que me reconozca la tarjeta Wi-Fi Intel, para probar el nuevo filesystem ext4 y para algún otro chichecito:
      • Processor type and features\Processor family (Generic-x86-64)\Core 2/newer Xeon
      • File systems\The Extended 4 (ext4) filesystem:
        • <*> The Extended 4 (ext4) filesystem[*] Enable ext4dev compatibility[*] Ext4 extended attributes (NEW)
      • Device drivers\Graphics support\Bootup logo
      • Device drivers\Network device support\Wireless LAN:
        • <M> Intel Wireless WiFi Next Gen AGN[*] Enable Spectrum Measurement in iwlagn driver[*] Enable LEDS features in iwlagn driver[*] Intel Wireless WiFi 4965AGN[*] Intel Wireless WiFi 5000AGN
    4. Guardar como “.config”
  7. Compilar y crear los paquetes .deb. Con los siguientes comandos se crearán los paquetes kernel.deb y kernel-headers.deb:
    # make-kpkg clean
    # make-kpkg --initrd kernel_image kernel_headers
  8. Ir a tomarse una cervecita mientras compila.

  9. Instalar los paquetes generados:

    # dpkg -i /usr/src/linux-image-2.6.29.3_2.6.29.3-10.00.Custom_amd64.deb
    # dpkg -i /usr/src/linux-headers-2.6.29.3_2.6.29.3-10.00.Custom_amd64.deb
  10. Rebootear y probar. Me dio un terrible “Kernel Panic”. Investigando un poco, encontré que no estaba creado el ramdisk (initrd), ni agregada la opción de cargarlo en la lista de arranque de grub.

    Si te dio el error, entonces seguí con los pasos 11 y 12 (antes de rebootear podés confirmar si te generó el ramdisk: /boot/initrd.img-2.6.29.3, y si está agregada la línea del initrd en el archivo /boot/grub/menu.lst).

  11. Crear el initrd:

    # update-initramfs -c -k 2.6.29.3
  12. Actualizar el archivo /boot/grub/menu.lst, agregando la línea de ubicación del initrd generado en el arranque de las 2 opciones para el nuevo kernel. La parte de Linux en el archivo de opciones de arranque de grub quedaría así:

    title		Debian GNU/Linux, kernel 2.6.29.3
    root		(hd0,2)
    kernel		/boot/vmlinuz-2.6.29.3 	root=/dev/sda3 ro quiet
    initrd		/boot/initrd.img-2.6.29.3
    title		Debian 	GNU/Linux, kernel 2.6.29.3 (single-user mode)
    root		(hd0,2)
    kernel		/boot/vmlinuz-2.6.29.3 	root=/dev/sda3 ro single
    initrd		/boot/initrd.img-2.6.29.3
    title		Debian 	GNU/Linux, kernel 2.6.26-1-amd64
    root		(hd0,2)
    kernel		/boot/vmlinuz-2.6.26-1-amd64 root=/dev/sda3 ro quiet
    initrd		/boot/initrd.img-2.6.26-1-amd64
    title		Debian 	GNU/Linux, kernel 2.6.26-1-amd64 (single-user mode)
    root		(hd0,2)
    kernel		/boot/vmlinuz-2.6.26-1-amd64 root=/dev/sda3 ro quiet
    initrd		/boot/initrd.img-2.6.26-1-amd64
  13. Rebootear.

Si salió todo bien:

milton@Palola:~$ uname -a
Linux Palola 2.6.29.3 #1 SMP Sat May 9 21:55:23 UYT 2009 x86_64 GNU/Linux


NOTA: Por suerte, si algo sale mal y no bootea desde el nuevo kernel, grub nos permite arrancar con el kernel anterior. Quedan ambas opciones en la lista.

5 comments to Compilar kernel de Linux en Debian o Ubuntu

Deja un Comentario

 

 

 

Puedes usar estos tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>