HOW TO: Compilando el kernel

Archivado en: DeTodoUnPoco, Geek, Sistemas Operativos, Software Libre — Luther Blissett a las 11:16 am el Friday, 3 de February de 2006

El otro día me pidió un profesor de la facultad que escribiese un pequeño tutorial sobre como compilar paso a paso un kernel de Linux. Como ya he acabado los examenes y soy al fin libre, me puse a escribirlo, y por si a alguno le interesa, os lo pego aqui. Tiene licencia Creative Commons asi que podeis hacer con el (casi) lo que querais. A los que tengais ya idea de como va esto, os agradecería mucho que lo leyeseis y me dijerais cosas que debería corregir o añadir. Ya me direis que os parece…

ACTUALIZACION:Lo he pasado a un PDF que podeis decargar de aquí.


CÓMO COMPILAR EL NÚCLEO DE LINUX PASO A PASO


Este documento trata de describir de la manera más sencilla posible
los pasos necesarios para compilar un núcleo de Linux de la rama de
desarrollo 2.6.x.

1: Conseguir el código fuente del núcleo

El núcleo de Linux se distribuye bajo licencia GPL, lo que implica
que su código fuente es público, modificable y redistribuible siempre
y cuando se haga respetando los términos que especifica dicha licencia(*).

Esto quiere decir que nos podemos descargar el código de forma legal y
gratuita. Para obtener lo último de lo último deberemos dirigirnos a la
página oficial del núcleo en
http://www.kernel.org/ y descargar
la última versión estable.

En la página veremos algo así como:

"The latest stable version of the Linux kernel is: 2.6.15.2"

Pues bien, para descargar todo el código fuente deberemos pulsar sobre
el enlace “F” que aparece a la derecha de dicha línea
y lo guardamos al directorio que nos parezca oportuno.

(*) Para más informacion acerca de GPL, visita la página web de
la Free Software Foundation en
http://www.fsf.org/ o consulta
directamente los términos de la licencia en
http://www.gnu.org/licenses/gpl.html

2: Descomprimir el fichero.

Si todo fue bien, deberíamos tener un fichero con un nombre parecido
a: linux2.6.15.2.tar.bz2

Bien, una vez que lo tengamos, necesitaremos descomprimirlo. Esto se puede
hacer de manera sencilla desde la línea de órdenes, situándonos en el
directorio donde se encuentre el fichero y ejecutando la siguiente orden:

$: tar xfvj ./linux2.6.15.2.tar.bz2

En lo que dura el proceso, deberían aparecer por la pantalla mensajes
acerca de los ficheros o directorios que se están descomprimiendo.

3: Ejecución de la interfaz de configuración.

Antes de empezar a hacer cualquier cosa, ejecutamos
$: make mrproper, que borra toda la basurilla que haya
podido sobrar de anteriores compilaciones.

El núcleo proporciona tres métodos de configuracion de sus parámetros:

  1. La configuración “a pelo”.

    Es la opción menos recomendada ya que verás pasar por el
    terminal cada una de las opciones (hay cientos) y tendrás que
    configurar cada una de ellas individualmente.

    Si eres más valiente que Chuck Norris o más friki que
    Marilyn Manson, puedes configurar el núcleo por este método,
    ejecutando la siguiente orden desde el directorio donde se
    encuentran los ficheros fuente:

    $: make config
  2. La configuración mediante interfaz gráfica
    de terminal.

    Es una solución aceptable. Aunque no es tan cómoda como la
    tercera opción, permite configurar todos los parametros de
    manera sencilla e intuitiva. Con este método no es necesario
    configurarlos uno por uno, sino que los mismos ya tienen
    valores por defecto que se pueden modificar solo si se desea.

    Si eres amante de los terminales, un nostálgico del “edit” de
    MS-DOS o no te gusta perder el tiempo, este es el método más
    recomendable. Para ejecutar la interfaz, teclea la siguiente
    orden desde el directorio donde se encuentran los ficheros
    fuente:

    $: make menuconfig

    IMPORTANTE: Para poder ver el menú de
    configuración, es necesario tener instaladas la biblioteca
    ncurses. Para conseguirla, puedes buscar en Sourceforge
    o bien instalarla utilizando algún gestor de paquetes, ejecutando
    como root las órdenes que siguen:

    • En Debian: $: aptget install ncurses
    • En Ubuntu: $: aptget install ncurses
    • En Fedora: $: yum install ncurses
    • En SUSE: $: yast i ncurses
    • Otros: pregunta en Google o búscate la vida.

  3. La configuración mediante la interfaz gráfica.
    Es la mejor solución por ser la más cómoda. Consiste en una
    pequeña aplicación con interfaz gráfica y menús desplegables
    que permiten configurar todos los parámetros con pulsaciones de
    ratón.

    Si utilizas Windows habitualmente, duermes soñando con Gnome
    y KDE o te cagas en los terminales y en el ingeniero que los inventó, esta es la opción más
    recomendable. Para ejecutar la interfaz, teclea la siguiente
    orden desde el directorio donde se encuentran los ficheros
    fuente:

    • $: make xconfig (para KDE)
    • $: make gconfig (para Gnome)

    IMPORTANTE: Para poder ver el menú de
    configuración, es necesario tener intaladas la biblioteca
    qt (para xconfig en KDE) o GTK+ (para gconfig en
    Gnome). Si por alguna extraña razón no las tienes ya instaladas,
    puedes buscarlas en Sourceforge.net o bien instalarlas utilizando
    algún gestor de paquetes, como se explicó en el apartado anterior
    para la biblioteca ncurses.

4: Configuración.

Una vez tengas el interfaz de configuración lanzado, verás que para cada
parámetro configurable del núcleo hay tres opciones:

  • Compilarlo para que se incluya en el núcleo:
    es la opción más
    recomendable para todas las funciones que siempre se vayan a
    utilizar. Por ejemplo, la capacidad para gestionar la mayoría
    de los sistemas de ficheros o los drivers de la tarjeta
    de red que usemos, el monitor, el ratón, etc.

    Hay que tener en cuenta que cuantas más opciones se compilen
    dentro del núcleo, más lento irá. Así que hay que andarse con
    ojo de no incluir demasiadas cosas que perfectamente se podrían
    compilar como módulos.

  • Compilarlo como módulo: Es la opción más
    recomendable para las funciones que solo se necesitan en
    determinadas ocasiones. Por ejemplo es interesante compilar
    como módulo la capacidad para gestionar impresoras, dispositivos
    USB, sistemas de ficheros poco utilizados en Linux (como el NTFS
    de Microsoft), etc.

  • No compilarlo: De esta manera excluimos
    ciertas funciones del sistema operativo. Por ejemplo, si
    nuestra máquina solo dispone de controladora IDE, es una
    gilipollez compilar la capacidad de gestión de dispositivos SCSI
    o, si no estamos trabajando en un portátil, es inútil incluir
    la capacidad para la administración de energía.

Lo mejor es trastear con las opciones. La interfaz proporciona
información sobre cada uno de los aspectos que se pueden configurar,
y siempre sugiere una opción. Normalmente dice algo como: “Si no tienes
ni idea de lo que es esto, deberías habilitar/deshabilitar esta opción”.

Los parámetros que hemos configurado hay que guardarlos en el fichero
.config, en el mismo directorio donde se encuentran los
ficheros fuente.

NOTA: Si tienes una configuración previa del núcleo y
quieres modificar los parámetros del núcleo basándote en esa
configuración, debes hacer lo siguiente: en el directorio
/boot encontrarás un fichero con un nombre parecido a
config2.x.x.x-x-xxx (las x se sustituyen por la version que se
esté utilizando), que contiene la configuración actual de tu núcleo.
Debes copiar este fichero con el nombre .config al
directorio donde tienes los ficheros fuente del nuevo núcleo que
quieres instalar. Para ello, bastará con hacerse root y ejecutar
la siguiente orden:

$: cp /boot/config2.x.x.x-x-xxx /ruta/hacia/los/ficheros/fuente/.config

5: Compilación e instalación.

Ahora solo queda compilar e intentar arrancar. Si funciona, pues estupendo.
Si no arranca, tendremos que fijarnos en los mensajes de error que da el
núcleo al arrancar para tratar de encontrar el punto donde la hemos cagado.

Para compilar e instalar nuestro nuevo núcleo, nos autenticamos como
root y seguimos estos sencillos pasos:

  1. $: make (Empieza a compilar todo. Puedes ir a
    echar un mus porque tarda aproximadamente 20-40 minutos,
    dependiendo de la potencia de tu máquina)
  2. $: make install (Instala la imagen del núcleo en
    el directorio apropiado)
  3. $: make modules_install (Instala las partes que se
    hayan compilado como módulos)
  4. $: mkinitrd /boot/initrd2.6.X.img 2.6.X (Crea un
    disco duro virtual necesario para el arranque). ¡Ojo! Hay que
    sustituir
    la X por la version adecuada del núcleo que estemos compilando.

¡Ya está! Si todo ha ido bien, deberíamos tener una imagen del núcleo
compilada y lista para utilizarse. Siempre vamos a disponer de un
núcleo que funciona instalado, así que no hay que preocuparse por
equivocarse al escoger los parámetros de configuración. Si no arranca,
siempre se puede cargar el núcleo “bueno” y volver a configurar y
compilar el otro.

Ahora solo queda el momento de la verdad: reiniciar el ordenador y,
cuando GRUB o Lilo nos pregunte qué núcleo escoger,
rezar 2 padres nuestros y 3 avemarias y arrancar con el que acabamos de compilar. Suerte.

6: OTROS RECURSOS

A continuacion, una lista con recursos acerca del núcleo. Casi todo
está en inglés. Si no sabes inglés vete aprendiendo, que para ser
informático es indispensable. Si no te quieres tirar la vida programando
en un cubículo de 2×2, mientras consumes cantidades ingentes de cafeina,
aprende inglés y consigue que tu jefe te ascienda a encargado de
relaciones internacionales ;-)

TUTORIALES Y HOW-TO’S SOBRE CÓMO COMPILAR EL NÚCLEO:

http://www.linuxquestions.org/linux/answers/


http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html


http://www.linuxgazette.com/issue68/ghosh.html


http://www.freeos.com/articles/2589/


http://linuxgazette.net/111/krishnakumar.html


http://www-128.ibm.com/developerworks/edu/l-dw-linuxkernel-i.html


http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=1&chap=7

Cómo compilar el núcleo en Ubuntu

OTROS ENLACES QUE MERECEN LA PENA:

http://kernel.org/


http://www.novell.com/linux/suse/


http://fedora.redhat.com/


http://www.debian.org/


http://www.ubuntu.com/


http://www.novell.com/linux/suse/

ENLACES PARA SUPER-FREAKS DEL NÚCLEO Y
KERNEL HACKERS:


http://kerneltrap.org/


http://www.kerneltraffic.org/kernel-traffic/index.html


http://www.kernelhacking.org/


http://www.tldp.org/LDP/khg/HyperNews/get/khg.html


http://www.kernel-labs.org/
(Español)

LIBROS SOBRE EL NÚCLEO:

Linux Kernel Development
Es el mejor libro sobre el núcleo que ha sido escrito.
Explica el funciomiento interno de la serie 2.6 de manera
clara y prestando atención al código y a las estructuras de
datos utilizadas. El autor es Robert Love, uno de los
responsables del proyecto Gnome y desarrollador activo del
núcleo.
Understanding the linux kernel
La última versión está actualizada a la serie 2.6 del
núcleo.
The Linux Kernel Primer. A Top-down Approach for X86
and Powerpc Architectures
Es un libro más orientado al kernel hacking que a
explicar el funcionamiento del núcleo.
Linux Core Kernel Commentary
Es un tocho enorme con gran parte del código del núcleo
impreso y comentado. Es un libro de consulta para ver
cómo se implementan ciertas funciones. NO es un
libro para leerse de arriba a abajo, a no ser que estés
como una cabra o vivas en la carcel y no tengas nada mejor
que hacer.

Luther Blissett v.0.3. Abril 2006. Some rights reserved.

(Creative Commons Attribution-NonCommercial-ShareAlike 2.1 Spain)

26 Respuestas a “HOW TO: Compilando el kernel”

  1. meneame.net dice:

    HOW TO: Compilando el kernel de Linux

    Es un pequeño tutorial que explica paso a paso y con un lenguaje entendible por los no iniciados, como compilar el kernel de Linux. El tutorial cubre la ultima rama de desarollo estable, la 2.6. Espero que os sea de utilidad ;-)

  2. Lek dice:

    No es por hacer la pelota, pero está de puta madre, tío… y muy sencilluco :)

  3. Benet J. dice:

    Ya era hora!!! Todos los que tengo son para la rama 2.4

  4. ThE FuCkInG sHiT.OrG » HOW TO: Compilando el kernel dice:

    [...] HOW TO: Compilando el kernel Archivado en: DeTodoUnPoco, Sistemas Operativos, Software Libre, Geek — Luther Blissett a las 11:16 am [...]

  5. Troxer dice:

    En este enlace: http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=1&chap=7
    viene buena informacion sobre las opciones más importantes del Kernel, eso si para configurarlo desde menuconfig (¡¡como hacen los grandes!!).

    ¿Encarguito de gyermo no? :P
    Está muy bien el tutorial, pero por esto te vamos a formar un consejo de guerra en el Club…

  6. Bellz dice:

    Hola Luther & Co.

    Muy buen tutorial tío,

    si me permites hago dos anotaciones, si tienes una configuración del Kernel previa y no la quieres perder debes hacer lo siguiente,

    en el directorio /boot encontrarás un arhivo llamado config-2.x.x.x-x-xxx que contiene la configuración actual de tu kernel, debes copiar este archivo con el nombre “.config” al directorio donde tienes los fuentes del nuevo kernel que quieres instalar,

    bash:$ cd /usr/src/linux
    bash:/usr/src/linux$ sudo cp /boot/config-2.x.x.x-x-xxx .config

    el resto del proceso es igual que el que has descrito.

    En Ubuntu hay otra vía (no estandar) para hacer la compilación del kernel y construir la imagen, podemos utilizar “make-kpkg” que sustituye a “make dep”, “make clean”, “make bzImage” y “make modules”

    bash:/usr/src/linux$ sudo make-kpkg clean
    bash:/usr/src/linux$ sudo make-kpkg –append-to-version=.XXXX –initrd kernel_image

    lo unico que debeis hacer es sustituir “XXXX” con una secuencia alfanumérica elegida por vosotros para poder identificar el nuevo kernel compilado y distinguirlo de cualquier otro que ya tengais compilado en vuestro sistema, se recomienda no utilizar expresiones como “386″, “586″ u otra expresión común ya que puede conducir a confusión a la hora de distinguirlo de otros kernels de Debian precompilados. El parámetro “–initrd” lo que hace es crear una imagen initrd en el directorio /boot que utilizaremos para arrancar nuestro sistema.
    Si todo ha salido bien en el directorio /usr/src se creará un archivo de imagen con un no mbre parecido a algo com kernel-image-2.x.x.x.XXXX_xx.xx.Custom_i386.deb
    que es el archivo que contiene nuestro kernel compilado listo para instalar, lo que haremos con

    bash:/usr/src$ sudo dpkg -i kernel-image-2.x.x.x.XXXX_xx.xx.Custom_i386.deb

    esta orden es equivalente a las clásicas make modules_install y make install, además de colocar en su sitio la imagen initrd generada y actualizar el grub o el lilo.

    Podeis ver un tutorial completo del que he hecho un poco de copy-pasting en WikiLerning un artículo al que merece la pena echar un vistazo.

    Os cuento esto porque hace poco he tenido que recompilar el kernel de mi Ubuntu para añadir el soporte genérico para discos scsi de forma estática.

    Espero que os sirva de algo :)

  7. mimetist dice:

    Juer, lo difícil es hacer que parezca fácil.
    Esta es una de esas cosas que nunca haré, compilar el kernel, porque soy un cagao y me da miedo joderlo todo… Ya me acojono cuando tengo que compilar aplicaciones…

    Además que soy un patán incapaz de compilar las cosas… es como si las instrucciones no estuviesen bien. No puedo compilar el xmame, el amarok, ni alguna otra… :(

  8. Luther Blissett dice:

    Si Troxer, encarguito de Gyermo. Despues de la alegria que me dio ver la nota que me puso no podía hacer menos que terminar el tutorial ;-)

    Por cierto, a ver cuando hacemos la proxima reunion. Hay peña en mi clase que quiere venirse.

    Gracias por el link, ya lo he incluido.

    Tambien gracias a ti, Bellz. He añadido lo que comentabas y tambien he puesto un enlace a tu tutorial.

    Saludos!

  9. Nixz dice:

    Muy buen tutorial!!
    Acabas de conseguir que compilar un kernel me parezca algo fácil, aunque creo que todavía no estoy preparado…

    Saludos!

  10. Bellz dice:

    De nada Luther,

    me debes una botella de Cacique 500… jijiji

  11. Luther Blissett dice:

    Yo encantao de pagarte una botellita pero me vas a hacer tirar los 18-20 euros que cuesta porque, cito textualmente desde histrionicos: “5.- Sólo bebo whisky, vino y alguna vez cerveza”

    Espero que te retractes de tal afirmacion y aprendas a apreciar los encantos del Cacique 500. ;-)

    Un saludo. Cuidate.

    Luther.

  12. Bellz dice:

    Haría una excepción, por supuesto, el ron añejo si lo tomas sólo tiene una textura y sabor muy similar al Whisky… jejeje

    :D

  13. Javi Román dice:

    >

    Para los que todavía están aprendiendo …. http://www.kernel-labs.org

    Saludos.

  14. Javi Román dice:

    En el post anterior me refería, a los que están aprendiendo inglés todavía,…., no todo está en inglés…

  15. matallo dice:

    Nada como una instalación de gentoo para aprender a compilar el kernel. Por cierto, el genkernel es para cagaos :D

  16. deepspawn dice:

    Hey,una pequeña “advertencia” que no sobra.
    make mrproper : ELIMINA el .config por lo que no es buena idea hacerlo justo antes de hacer make :P

    Compilar el Kernel es sencillo, lograr una configuración estable, rapida, limpia, etc … es toda una odisea.
    Siempre es bueno conservar un .config “vanilla” de donde se pueda empezar y ojo con el mkrproper que no vaya a botar las “horas” que se gastaron en configurar su kernel.

    EOC

  17. Chriztian dice:

    En Debian Sarge necesitas instalar libncurses5-dev

  18. Chriztian dice:

    para usar make menuconfig

  19. omartech dice:

    hola:queria aser una consulta,mi compu tiene HT, y ase un tiempo quise ponerle linux y no pude;quiero saber si por el hecho de que tenga HT no puedo instalarlo me podian responder porfa

  20. Bonjy dice:

    Buenas… :)

    Pues como en otras paginas iba a pasar de largo… pero tu petición tan origial, ha llamado mi atención y me ha convencido.

    El artículo está muy bien me ha resultado tan útil como esperaba, no soy un experto en linux, pero me ha informado muy satisfactoriamente. Y lo agradezco.
    Un 10 para ti.

    Saludos.

  21. Mila Mori dice:

    DIdactico tu howto.

    Gracias

  22. JAC dice:

    muy bueno y de gran utilidad especialmente para los que nos estamos metiendo con el pinguino

    gracias

  23. Feith dice:

    Naz!

    ¿Alguien sabria como aplicar los parches cramfs a la ultima version estable del kernel de linux (2.6.20)?

    gracias de antemano

  24. brain dice:

    pregunta tonta:

    mkinitrd /boot/initrd2.6.20.img 2.6.20

    $Id: mkinitrd,v 1.201 2004/05/16 22:00:48 herbert Exp $

    Usage: /usr/sbin/mkinitrd [OPTION]… [version]

    que falla aqui?

    Si lo pongo asi no hay problemas: “mkinitrd /boot/initrd2.6.20.img”. El unico problema es que no me monta el devfs al arrancar :(

  25. Julio C dice:

    Muy Buen Material

  26. zer0 dice:

    Muy buen How To, en hora buena men, saludos.

Di algo coño!

XHTML: Puedes usar estos tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>