Compilar el kernel a lo tradicional


kernel

Existen varias razones para compilar un kernel. Por ejemplo puedes estar interesado en agregar un nuevo hardware o funcionalidad a tu computadora, o entonar tu sistema para tener un servicio o aplicación más confiable. Cualquiera que sea tu razón, aquí tienes las instrucciones para compilar el kernel de la forma tradicional.

Requisitos

Como vas a compilar un kernel, necesitarás algunos archivos y compiladores. También necesitarás ncurses para desplegar diálogos en una consola. En Debian puedes instalar todo esto escribiendo:

aptitude install build-essential libncurses5-dev

Directorio de trabajo

Es común usar el directorio /usr/src/ al momento de compilar el kernel, controladores y módulos. Entonces, entra a ese directorio:

cd /usr/src/

Procedimiento

Necesitarás las fuentes del kernel para compilarlo. Estas pueden obtenerse desde los repositorios de la distribución o desde kernel.org directamente. En Debian tendrás un archivo tar en el directorio /usr/src/ al instalar el siguiente paquete:

aptitude install linux-source-2.6.30

Si quieres descargarlas desde kernel.org sería algo como esto:

wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.tar.bz2

Ahora descomprime el archivo tar:

tar xfjv linux-source-2.6.30.tar.bz2
De existir por compilaciones previas, borra el enlace linux:
rm linux
Ahora crea un enlace al directorio descomprimido. Si descargaste las fuentes desde Debian esto sería:
ln -s linux-source-2.6.30 linux

Si las descargaste desde kernel.org, debes escribir:

ln -s linux-source-2.6.30 linux

Entra al directorio linux:

cd linux

Si has compilado otros kernels es buena idea limpiar todo antes de comenzar a compilar el kernel nuevo:

make mrproper

Procede ahora a configurar las opciones de tu kernel. Para hacer esto, puedes usar make config (una interfaz interactiva pero algo molesta), make menuconfig (basada en mcurses). Yo sugiero usar la segunda opción:

make menuconfig

Verás una ventana similar a la mostrada arriba (la imagen principal del artículo). Desde ahí podrás seleccionar nuevas características para tu kernel, y decirle que las compile como módulo o como parte del kernel. Luego de que hayas seleccionado las opciones, escoge Exit para escribir el archivo .config.

En este punto ya has configurado tu kernel, para compilarlo escribe lo siguiente:

make

Este paso puede tardar mucho según las opciones que hayas escogido. Una vez que haya finalizado (y si no hubo errores) procede a instalar la imagen compilada y sus módulos:

make install
make module_install

Debes crear una pre-imagen, conocida como initramfs, para ayudar a tu kernel a cargar al momento de iniciar la máquina. Para crear esta pre-imagen para tu kernel escribe lo siguiente:

mkinitramfs -o /boot/initrd.img-2.6.30 2.6.30

Ahora edita grub (o cualquier bootloader que estés usando) para arrancar por el kernel compilado. Esto lo puedes hacer de forma manual, o si estás en Debian la orden update-grub lo hace por ti de forma automática:

update-grub

Finalmente, reinicia la computadora y selecciona tu kernel recién compilado!!

Compártelo:
  • Twitter
  • Facebook
  • Identi.ca
  • del.icio.us

Artículos relacionados:

  1. Compilar el kernel a lo Debian
  2. Compilar kernel a la medida
  3. Compilando el Kernel en el PS3
  4. ¿Y cuánto tarda compilar el kernel de la netbook en el PC?
  5. ¿Y cuańto tarda en compilar el kernel en una PC de escritorio?

,

  1. P|P0

    #1 by P|P0 on 15/01/2010 - 5:03

    Saludos, he usado Debian 4 y 5, Ubuntu desde la versión 7.04, actualmente uso Linux Mint 8, me considero un usuario normal, amante de linux.

    Siempre he escuchado sobre compilar el Kernel pero que beneficios y contra me puede traer?

    Eser Kernel compilado luego se me actualizara? Puedo perder modulos, no tengo mucha idea sobre esto, alguien podria alcararme esto si es tan amable.

  2. Luis Gallardo

    #2 by Luis Gallardo on 15/01/2010 - 6:19

    Hola P|P0,

    La idea detrás de compilar el kernel es la de poder adaptarlo a tus necesidades ya que el kernel que distribuye cualquier distribución es muy genérico, es decir, en el caso de Ubuntu está pensado para que corra en el mayor número de máquinas posibles. ¿Esto en que te afecta? Bueno que puedes tener muchas funcionalidades que no utilizas en tu kernel o como módulos. Te pongo este ejemplo, imagina que tienes una netbook sin bluetooth como las Acer One, ¿Tiene sentido tener los módulos de bluetooth cargados en tu sistema? Todos ese código ocioso a la larga repercute en rendimiento e incluso en consumo innecesario de energía. Te invito a que veas este post que habla sobre arranque rápido que aun y cuando está relacionado con servicios, el compilar el kernel ayudó a mejorar el arranque en mi máquina: http://lgallardo.com/2009/07/08/arranque-rapido-debian-14-segundosfast-boot-on-debian-14-sec/

    Otra cosa por la que quieras compilar tu kernel es para dar soporte a un hardware nuevo, o un hadware que no tenía soporte antes. Ejemplo, mi netbook lenovo S10 tiene una tarjeta inalámbrica Broadcom BCM4312 la cual no tiene soporte en el kernel, pero están trabajando en ello para que el módulo b43 soporte toda esa gama. Cuando eso ocurra, yo voy a compilar el kernel para agregar esa funcionalidad directamente desde el kernel, y no desde drivers de terceros.

    También ocurre que para ciertas aplicaciones necesitarás de opciones activadas muy específicas del kernel. Por ejemplo, si estás trabajando con aplicaciones que necesiten tiempo real de respuesta, entonces tendrás que compilar el kernel para tal fin.

    ¿Se acttualizará el kernel que compilas? No, si quieres ir actualizando el kernel tendrás que bajar las versiones nuevas y compilarlas. Pero no creas que es complicado, porque basta con hacer un make oldconfig y todo la configuración de tu kernel actual será cargada, y se te preguntará por las nuevas funcionalidades nada más. Los módulos lo configuras y tú a tu gusto, es decir, no vas a perder ningún módulo que tengas actualmente a menos de que tú mismo lo quites al momento de seleccionar las opciones del kernel.

    Por cierto, eso que comentas de que “se actualizará el kernel” debe ser porque de cuando en cuando recibes un paquete con una imagen del kernel nuevo. Eso en esencia es el kernel que la gente de la distribución que estés usando probó y dijo que estaba apta para usarse con su distro, pero no es más que un kernel compilado por ellos y el cual, repito, es muy genérico. Para que tengas una idea, yo compilo el kernel para mi netbook lenovo s10 solo con las opciones que necesito y quito el resto (ver este enlace http://lgallardo.com/2009/06/08/compilando-el-kernel-para-lenovo-s10ekernel-compiling-on-lenovo-s10e/)

    Espero que todo esto te haya aclarado tu duda :)

  3. P|P0

    #3 by P|P0 on 16/01/2010 - 1:37

    @Luis Gallardo

    Muchas Gracias amigo, la verdad fue muy clara tu respuesta pero aun quedo un poco ido, no creo intentarlo en estos momentos seguramente una de las preguntas de esos módulos me dejara fuera de base y si luego no me funciona? Voy a leer mas al respecto para ver si me animo, ya tengo claro al menos todas las ventajas que conseguiría si compilo el kernel!

  4. Luis Gallardo

    #4 by Luis Gallardo on 16/01/2010 - 4:05

    @P|P0 Puedes tener más de un kernel en tu sistema y arrancar desde el que quiera. De hecho cuando vas actualizando el kernel por la distribución se te van acumulando con el tiempo, pero siempre arrancas por el último. El kernel que compiles simplemente lo agregas en ese listado (grub) y si no te funciona puedes volver a arrancar por el kernel que tenías antes.

  5. P|P0

    #5 by P|P0 on 18/01/2010 - 12:45

    @Luis
    Si compilo el kerner y no me funciona, podria arrancar con un Kernet anterior sin problemas? No me digas nada mas hoy mismo llego a coimpilarlo!

  6. Luis Gallardo

    #6 by Luis Gallardo on 18/01/2010 - 2:05

    Si, puedes. De hecho el último paso (update-grub) lo que hace es actualizar el menú de arranque para incluir tu kernel compilado, pero dejando las entradas que tenías antes. Esto es muy útil justamente para enviar meteduras de patas, si compilaste mal el kernel aun puedes iniciar con tu kernel anterior normalmente.

  7. keil

    #7 by keil on 21/01/2010 - 6:31

    Excelente aporte.

  8. Luis Gallardo

    #8 by Luis Gallardo on 21/01/2010 - 8:29

    Gracias keil :)

  9. Ivan

    #9 by Ivan on 25/01/2010 - 3:27

    Con este metodo el problema que veo es que no creas las linux-headers que pueden ser necesarias para instalar otros programas como drivers o como vmware por ej,¿no?

    Un saludo y enhorabuena por el blog.

  10. Luis Gallardo

    #10 by Luis Gallardo on 25/01/2010 - 3:49

    @Ivan Ciertamente con este método no se están creando los headers, pero si necesitas compilar un driver para vmware o VirtualBox puedes dejar el enlace a /usr/src/linux apuntando a al directorio de las fuentes y compilar el driver. Si necesitas el driver en otra máquina, podrás llevarte el módulo ya compilado.

    Otra opción es que compiles el kernel a lo Debian y que incluyas la generación de los headers, como se explica en este post http://lgallardo.com/2010/01/25/compilar-el-kernel-a-lo-debian/

    Gracias por tus comentarios :)

  11. geaplanet

    #11 by geaplanet on 23/08/2010 - 3:07

    Echo en falta explicar también qué ocurre cuando tienes que aplicar un parche.

    Pero está muy bien explicado.

  12. Luis Gallardo

    #12 by Luis Gallardo on 23/08/2010 - 9:14

    @geoplanet Gracias por los comentarios. Si, faltó lo de los parches ;)

(No será publicado)

Switch to our mobile site