Cómo compilar el kernel Linux en Ubuntu, Fedora, y otras
Cuando mencionamos la palabra “kernel” es imposible no pensar en Linux. Y es que GNU/Linux es el sistema operativo que realmente le ha dado gran popularidad a este término.
A él le debemos que hayamos llegado tan profundo en la informática verdadera (en la que se sabe ciertamente cómo se maneja la información en su más bajo nivel). En la actualidad no es tan recurrente que necesitemos compilar un kernel, aunque tiempo atrás si lo era. Hoy día esto se hace por alguna necesidad específica o por el simple hecho de aprender cómo se hace.
Entre las razones existentes para compilar un kernel tenemos:
- Eres un desarrollador del kernel.
- Necesitas compilar un kernel con alguna característica especial que un kernel oficial de tu distro no tiene.
- Te estás preparando para corregir un bug en el kernel oficial de tu distro.
- Tienes hardware que el kernel oficial de tu distro no soporta.
Existen muchas maneras de compilar el kernel (casi una por cada distribución). Esto significa que para cada distro, ya sea basada en Red Hat, Debian o Slackware, debemos documentarnos muy bien antes de comenzar tan importante tarea, porque si se nos queda algún módulo excluido o incluido sin necesidad podría generar conflictos e incluso no funcionar correctamente.
Todo el proceso se puede resumir en los siguientes pasos generales para todas las distros:
- Obtener las fuentes del kernel.
- Instalar las herramientas necesarias para la compilación (gcc, build-essentials, etc.).
- Descomprimir las fuentes del kernel en /usr/src/
- Configurar el kernel (ej. make menuconfig).
- Compilar (make), compilar los módulos (make modules), instalar los módulos, (make modules_install).
- Instalar el kernel compilado (make install).
- Crear la imagen (initrd) para el nuevo kernel y ajustar grub para que la encuentre.
Este proceso puede ser una excelente manera de ajustar nuestro sistema para que soporte nuevo hardware o para hacerlo más liviano quitando, cuidadosamente, módulos que no utilizaremos. De cualquier manera es recomendable que aparte de esta guía busques la ayuda de personas más experimentadas si tienes una buena razón para hacerlo, aún si lo haces por puro placer o aprendizaje.
A continuación veremos cómo compilarlo en algunas distribuciones más usadas.
Compilar el Kernel en Fedora/CentOS y otras derivadas
Paso 1: Instalar algunos dependencias o prerequisitos
su -c 'yum groupinstall “Development Tools”'su -c 'yum install ncurses-devel qt-devel unifdef'
Paso 2: Descargar las fuentes de kernel.org del estable más reciente (2.6.36)
cd /tmpwget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.bz2
Paso 3: Descomprimir las fuentes.
mkdir /usr/src/linuxtar -xjvf linux-2.6.36.tar.bz2 /usr/src/linuxcd /usr/src/linux
Paso 4: Configurar el Kernel.
Hay varias formar de hacer la configuración que querramos:
- make menuconfig: Menú basado en texto y diálogos a colores.
- make xconfig: Gráfico (Qt), de uso preferible en KDE.
- make gconfig: Gráfico (Gtk), de uso preferible en Gnome.
Paso 5: Compilar el Kernel.
Compilar para crear una imagen comprimida del Kernel
make
Compilar los módulos del Kernel
make modules
Instalar los módulos
make modules_install
Paso 6: Instalar el Kernel
make install
Paso 7: Modificar grub para que asuma el nuevo Kernel.
nano /boot/grub/grub.conf
Y una vez en el editor, escribir lo siguiente (suponiendo que la partición del sistema es (hd0,0), es decir, la primera de todas y que además está en el primer disco duro. En caso de que este no sea tu escenario, debes cambiar convenientemente ese parámetro. así como los parámetros VolGroup00 y LogVol00, como detallan aquí).
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.35.4)
root (hd0,0)
kernel /vmlinuz-2.6.35.4 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.35.4.img
title CentOS (2.6.36)
root (hd0,0)
kernel /vmlinuz-2.6.36 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.36.img
Y finalmente reiniciamos
shutdown -r now
Compilar el Kernel en Debian/Ubuntu
Paso 1: Instalar algunos dependencias o prerequisitos:
sudo apt-get install build-essential gcc libncurses5-dev
Paso 2: Descargar las fuentes de kernel.org del estable más reciente (2.6.36. )
cd /tmpwget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.bz2
Paso 3: Descomprimir las fuentes.
mkdir /usr/src/linuxtar -xjvf linux-2.6.36.tar.bz2 /usr/src/linuxcd /usr/src/linux
Paso 4: Configurar el Kernel.
Hay varias formar de hacer la configuración que querramos:
- make menuconfig: Menú basado en texto y diálogos a colores.
- make xconfig: Gráfico (Qt), de uso preferible en KDE.
- make gconfig: Gráfico (Gtk), de uso preferible en Gnome.
Paso 5: Compilar el Kernel.
Compilar para crear una imagen comprimida del Kernel
make
Compilar los módulos del Kernel
make modules
Instalar los módulos
make modules_install
Paso 6: Instalar el Kernel
make install
Paso 7: Crear la imagen initrd.
La imagen initrd contiene los controladores de dispositivos necesarios para cargar el resto del sistema operativo. No todas las computadoras requieren esto pero no está demás crearla.
cd /bootmkinitrd -o initrd.img-2.6.36 2.6.36
Paso 8: Modificamos grub para que asuma el nuevo Kernel añadiendo lo siguiente.
nano /boot/grub/menu.lst
Y una vez en el editor, escribimos lo siguiente (como en el caso anterior, tenemos que tener cuidado con la partición donde tenemos el sistema y, por tanto, donde tenemos el kernel y demás ficheros del sistema de arranque)
title Ubuntu GNU/Linux, kernel 2.6.36 Default
root (hd0,0)
kernel /boot/vmlinuz root=/dev/hda1 ro
initrd /boot/initrd.img-2.6.36
savedefault
boot
Otra forma menos delicada de hacer este paso es con un comando que actualiza el archivo menu.lst y lo ajusta de forma automática.
update-grub
Y finalmente reiniciamos
shutdown -r now
Enlaces de referencia
- http://wiki.centos.org/HowTos/Custom_Kernel
- https://help.ubuntu.com/community/Kernel/Compile
- http://www.cyberciti.biz/tips/compiling-linux-kernel-26.html
- http://www.linuxforums.org/forum/kernel/55612-mini-howto-compile-linux-kernel-2-6-a.html
- http://www.linux.com/learn/tutorials/362602-how-to-compile-the-linux-kernel
Related posts:
- ¿Cuánto tardó Linus en compilar el primer kernel?
- ¿Tienes un portátil? No instales Ubuntu 11.04 (ni 10.10, ni otras distros basadas en el kernel 2.6.38)
- ¿Cómo instalar software en Linux?
- ¿Quién se encarga de desarrollar el kernel Linux?
- El kernel Linux 2.6.39, disponible















Muy útil gracias. Me lo guardo para cuando salga el Kernel 2.6.36 y ponerselo a Linux Mint.
Nunca entenderé porqué estas distros como Ubuntu o Mint no actualizan el Kernel (solo actualizaciones menores). A algunos poco les aportará pero yo como usuario de una Ati serie 4000 y un adaptador Wifi broadcom, espero impaciente los nuevos Kernels, pues para mi Wifi se supone que en el proximo Kernel se implementarán los drivers libres al fin, y para la Ati, continuamente mejoran aunque sea poco a poco la gestión de energía y rendimiento 3D……………… y tener que esperar hasta el proximo ubuntu o Mint solo porque no quieren dejar que actualices mediante repos me parece una putada. Igual peco de ignorante en algo técnico por lo que esto no es posible hacerlo mediante una simple actualización, pero lo dudo.
Creo que no hay nada que entender al respecto, se trata de una política de los desarrolladores y nada más.
Pues se contradicem porque se supone que distros como Ubuntu presumen de traernos siempre lo último a nuestro escritorio.
¿Nunca vez los cambios de las nuevas versiones, cierto?
Y si Ubuntu no lo trae ¿Por qué Mint no? Ah! Ya… Hace lo que traiga Ubuntu y de ahí no salen….
¿Quién presume a traer lo último? Claro que trae lo último y lo más innovador, pero también lo busca traer estable.
Por si sabías, el Kernel 2.6.36, salió el 20 de Octubre, cuando Ubuntu 10.10 salió el 10 de Octubre y aún no estaba el Kernel 2.6.36.
Y con el Kernel 2.6.36, veo que trabaja aún más lento que el 2.6.35 (según el Benchmark de Phoronix) publicado acá también. Por lo que me imagino que la versión del 11.04, traerá el Kernel 2.6.37 o aún, el ..x.38. Ya que el 2.6.37, parece que de aquí no pasará en éste año.
Primero informáte. Luego si vas a criticar, busca la base en que hacerlo y si es de manera destructiva, no incluyas a Distribuciones acá. Por lo visto, en todos tus comentarios, nombras a Ubuntu. Jaja! Hasta en el papel higiénico lo debes ver, que hasta pronto te veré volver a éste :)
Ah! Buena guía, cosa que guardaré por si veo que un Kernel próximo trabaja mejor que el instalado en mi PC. Pero aún, me quedo con éste y por algo Cannonical no quiere incluirlo en ésta versión (en las actualizaciones). No creo que quiera incluir un kernel 2.6.36 en una versión 8.04.4. LTS. Alguna incompatibilidad o mal manejo, debe traer. Sólo espero sus actualizaciones en reparo de fallas / bugs, así está bien.
Saludos!
Si oh gran amo infinitamente sabio.
Hasta donde logro comprender, Ubuntu no presume de traer lo ultimo, sino de ser sencillo y acercar GNU/Linux al usuario común.
Dicho está con lo de Hsierra….
Resumen de mi comentario :)
Saludos!
Y de traer lo último tambien les he leído en alguno faq mas de una vez.
Si de verdad quieres lo ultimo instala Archlinux o Gentoo, ahí si verás lo ultimo, incluso PCLinuxOS que es user-friendly adoptó el modelo rolling release :). Un saludo.
Madre mía cuantas veces lo habré hecho esto en Slackware!
Hasta que aprendí como arrancar el nuevo kernel tuve que reinstalarlo varias veces.
Qué tiempos aquellos!
pd. soy primer
Esta forma de hacerlo es “a lo bestia”.
El paquete kernel-package se encarga de todo, automatizando el proceso y te genera un deb con nuestro kernel particular, otro con las cabeceras, documentación, etc. listos para ser instalados.
Para instalar programas sin deb desde los fuentes ¿usas make install o checkinstall? Pues aquí lo mismo. Es recomendable que APT siempre sepa de lo que instalas.
yo esto no lo hago desde el año 98 que lo compilé para Red Hat, cuando había que hacer
make mrpropery cosas por el estiloque tiempos de sufrimiento aquellos
Que interesante es esto!! Me gustaría aprender a compilar el kernel para tener disponible desde el vamos, y desde las mismas entranias del sistema, todas las webs del tipo de redtube, pornotube y xvideos. Así se lo vendo a los cibers (que es donde mas se ve porno) y ago mucho dinero. Seria la hostia! Voy a ver si puedo aprender. Luego capas que a lo mejor pueda crear una nueva distribusion con kernel porno. Uy! como me esta gustando esto. se me ocurren millones de ideas. Gracias por tan util informacion. Yo siempre pense que los linuxeros eran terroristas y subversivos, pero creo que voy a tener que retractarme. Esto jamas podria aserse en Windows. Disculpas si alguna vez ofendi a alguien.
No entiendo tu comentario
por lo que entendí, está usando sarcasmo imitando a una especie de hoygan amante del porno que cualquier cosa que lee la relaciona con su pasión. Si lo mirás de ahí puede hasta resultar chistoso. Pero no deja de ser un comentario que no aporta nada
Ni yo.
¿Alguien puede decirme qué dijo? … no entendí nada
Joselito
No confundas la Compilación con la morbosidad.
“make && make_modules install” ahorra dos pasos de los comentados. Y no, no es nada “arcaico” o propio de versiones antiguas la compilación del núcleo, sino algo muy recomendable, siempre QUE SE SEPA LO QUE SE ESTÁ HACIENDO. Se consiguen núcleos optimizados, ergo más pequeños, estables y rápidos, pero repito a gritos, NO HAY QUE TOCAR NADA QUE NO SE SEPA QUÉ HACE, Y HAY QUE INFORMARSE BIEN DE QUÉ OPCIONES NECESITA NUESTRO HARDWARE.
Un buen punto de partida es hacer una copia del archivo /usr/src/linux/.config de nuestro sistema recién instalado con los valores por defecto y en perfecto funcionamiento y empezar a quitar o añadir opciones, o (más prudente) modificar si tal opción se compila dentro del núcleo (lo que lo hace más pesado) o si se compila como módulo (lo hará más ágil pero si algo no funciona siempre podremos cargar dichos módulos), todo siempre previa lectura que para qué sirven las opciones con las que trasteemos.
Evidentemente hay que guardar como oro en paño el último núcleo bueno que tengamos por si en nuestra compilación a medida la hemos pifiado, poder volver a arrancar nuestro ordenador con un núcleo que funcione.
En fin, una práctica, repito, muy recomendable, pero desde luego no a novatos ni gente normal que necesita una máquina que, antes que nada, funcione. Los “aventureros” siempre pueden hacer una segunda instalación o experimentar en una máquina virtual.
Saludos.
Compìlar un kernel de cero es una tarea muy compleja o sea es solo para expertos, lo que si está al alcance de cualquiera es el recompilar un kernel.
A partir del kernel 2.6.32 , se tiene disponible nuevos target para Make, investigar por
make localmodconfig
make localyesconfig
El primero hace una purga de los módulos que no se usan y el segundo sirve para fijarlos en el core del núcleo
El truco radica en que antes debes activar ciertos módulos, por ejemplo introducir un cd en la compactera, conectar un pendrive, reproducir un sonido, etc, etc, si no haces esto, no van a quedar registros de que se hayan usado estos moduloso, por lo que la recompilación no los tomará en cuenta.
Explicame más o dime en donde leo más sobre esto. Se ve muy útil para simplificar mucho el trabajo de compilar un kernel…
La verdad es que para compilar un kernel solo necesitas amor para realizar tu tarea podes encontrar mucha informacion en el sitio de kernel.org alli ahi una seccion denominada newbies kernel …..Desde cero solo es cuestion de documentarce !!!!!!
zcully, si eres usuario ubuntu/debian, deberias de probar esto antes de compilar un kernel o algun modulo especifico:
sudo apt-get install linux-backports-modules-wireless-lucid-generic
En mas de una ocasión he tenido que compilar el último de alsa para algún portatil nuevo que todavía no reconocía la tarjeta por defecto el kernel. Pero he descubierto los backports que no son mas que lo último en modulo empaquetado en DEB, para que lo instalemos con un simple clik o comando:
sudo apt-get install linux-backports-modules-alsa-lucid-generic
y funcionaba la placa de sonido!!!
Saludos;
Excelente articulo, felicidades Claudio Concepción por el primer post, ahora bien, hay algo que no me queda muy claro, el tema de la imagen initrd, En Fedora/CentOS , se genera automáticamente en la ruta(supongo que la del boot), cosa que solo hay que editar grub o como va eso, a ver si me lo podrías aclarar, No quisiera tirarme a la piscina sin agua. :))
Primeramente, gracias por sus comentarios.
Como algunos dicen, hay otras maneras mucho más simples de instalar un kernel estable más reciente que el que pudo actualizarse en la distro usamos, son muy pocas las que logran esto porque sus ciclos de desarrollo son distintos.
Por otra parte, lo que se pretende lograr con este post es dar una idea general pero exacta de los pasos a seguir para hacer una compilación exitosa y también mostrar algo que con el tiempo ha pasado a otro plano precisamente por el soporte que propociona cada distribución.
yimb0, el make install genera la imagen y no necesariamente tenga que hacerla uno mismo, y lo mismo podría pasar para Debian/Ubuntu.
Un saludo para todos!
Yo agradezco su esfuerzo pero lo llevo intentando un buen rato para Linux Mint y todo son problemas… para mas inri según me dicen en un foro del tema, a quienes les remito su tutorial, al parecer tiene varias veces errores importantes en los comandos, que escribe seguidos a veces cuando debería haber varios Enters de por medio.
Solo lo digo para que sea mas cuidadoso en el futuro por favor y muchas gracias aún así por la intención.
Así es, al parecer se escaparon errores al editarlo. En el paso uno debería estar asi:
su -c ‘yum groupinstall “Development Tools”’
su -c ‘yum install ncurses-devel qt-devel unifdef’
En el paso 2:
cd /tmp
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.bz2
En el paso 3:
mkdir /usr/src/linux
tar -xjvf linux-2.6.36.tar.bz2 /usr/src/linux
cd /usr/src/linux
Muchas gracias a todos!
[...] Bueno, la gente de http://www.muylinux.com se vino con un post super interesante que habla de Cómo compilar el kernel Linux en Ubuntu, Fedora, y otras. [...]
como root:
-apt-get install aptitude
-aptitude install: libncurses5-dev, fakeroot, kernel-package, zlib1g-dev, build essential, gcc, wget bzip2, ncurses
-wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.1.6.tar.bz2
-MV –R /HOME/NOMBRE-DE-USUARIO/DESCARGAS/linux-3.1.6.tar.bz2/ /USR/SRC
CD /USR/SRC
-TAR –XVJF linux-3.1.6.tar.bz2
-cd linux-3.1.6
-make menuconfig
-save and load
-load and save
-exit
-save
-make-kpkg clean
-make-kpkg –initrd kernel_image kernel_headers
-cd ..
-dpkg –install LINUX IMAGE DPKG 3.1.6…..
-dpkg –install LINUX HEADERS DPKG 3.1.6…..
-reboot
en caso de obtener el error “lguest” Documentation hacer lo siguiente:
-cd linux 3.1 la version que sea
-cd Documentation
-mkdir lguest
-nano Makefile
(adentro de nano escribir):
-all:
-guardar , dar nombre de Makefile y salir
-Volver a compilar.
saludos, http://allenlinux.wordpress.com