HOW TO: Compilando el kernel
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…
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:
- 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
- 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.
- En Debian:
- 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:
$: 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)$: make install(Instala la imagen del núcleo en
el directorio apropiado)$: make modules_install(Instala las partes que se
hayan compilado como módulos)$: 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)



February 3rd, 2006 at 11:44am
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 ;-)
February 3rd, 2006 at 12:00pm
No es por hacer la pelota, pero está de puta madre, tío… y muy sencilluco :)
February 3rd, 2006 at 12:04pm
Ya era hora!!! Todos los que tengo son para la rama 2.4
February 3rd, 2006 at 12:22pm
[...] HOW TO: Compilando el kernel Archivado en: DeTodoUnPoco, Sistemas Operativos, Software Libre, Geek — Luther Blissett a las 11:16 am [...]
February 3rd, 2006 at 12:32pm
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…
February 3rd, 2006 at 12:37pm
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 :)
February 3rd, 2006 at 12:59pm
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… :(
February 3rd, 2006 at 2:54pm
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!
February 3rd, 2006 at 3:25pm
Muy buen tutorial!!
Acabas de conseguir que compilar un kernel me parezca algo fácil, aunque creo que todavía no estoy preparado…
Saludos!
February 3rd, 2006 at 3:53pm
De nada Luther,
me debes una botella de Cacique 500… jijiji
February 3rd, 2006 at 4:09pm
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.
February 3rd, 2006 at 5:39pm
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
February 4th, 2006 at 10:32am
>
Para los que todavía están aprendiendo …. http://www.kernel-labs.org
Saludos.
February 4th, 2006 at 10:34am
En el post anterior me refería, a los que están aprendiendo inglés todavía,…., no todo está en inglés…
February 4th, 2006 at 5:26pm
Nada como una instalación de gentoo para aprender a compilar el kernel. Por cierto, el genkernel es para cagaos :D
February 7th, 2006 at 3:25am
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
May 28th, 2006 at 9:51pm
En Debian Sarge necesitas instalar libncurses5-dev
May 28th, 2006 at 9:52pm
para usar make menuconfig
October 3rd, 2006 at 11:18pm
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
December 1st, 2006 at 1:19am
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.
January 6th, 2007 at 10:26pm
DIdactico tu howto.
Gracias
January 12th, 2007 at 6:57pm
muy bueno y de gran utilidad especialmente para los que nos estamos metiendo con el pinguino
gracias
February 5th, 2007 at 10:36pm
Naz!
¿Alguien sabria como aplicar los parches cramfs a la ultima version estable del kernel de linux (2.6.20)?
gracias de antemano
February 11th, 2007 at 3:24pm
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 :(
March 12th, 2007 at 6:02am
Muy Buen Material
May 29th, 2008 at 10:09am
Muy buen How To, en hora buena men, saludos.