Mi Blog
Cómo compilar el Kernel de GNU/Linux en 10 pasos

Cómo compilar el Kernel de GNU/Linux en 10 pasos

 
(84 votos)

Compilar el Kernel Linux es una tarea casi indispensable si queremos optimizar al 100% el Kernel al hardware sobre el que correrá luego junto con las aplicaciones GNU. No es una tarea fácil, sobretodo dejar al 100% el Kernel optimizado para nuestro hardware, ya que seguramente obtengamos algunos Kernels Panic! antes de conseguir la configuración del Kernel acorde al hardware. Para un usuario doméstico, que solamente quiere usar el PC con GNU/Linux y despreocuparse de todos los posibles problemas, este tutorial queda descartado :)

Seguid leyendo y os enseñaré a compilar vuestro propio kernel a medida en 10 sencillos pasos...

⬇️ Compra en Amazon el hardware que utilizo ⬇️

🔥 ¡DESCÚBRELOS! 🔥

 

 

¿QUÉ ES UN KERNEL?

Linux comienza en 1991 como un proyecto personal del estudiante finlandés Linus Torvalds: crear un nuevo núcleo de sistema operativo libre. El núcleo (kernel) Linux resultante ha estado marcado por un crecimiento constante a lo largo de su historia. Desde el lanzamiento inicial de su código fuente en 1991, ha crecido de una pequeña cantidad de archivos C bajo una licencia que prohíbe la distribución comercial, a la versión 5.6 en 2020 con más de 33,14 millones de líneas de código fuente, sin contar comentarios,​ bajo la GNU General Public License v2.2​.

 

 

Linux es un kernel libre y abierto

 

 

1.- ELEMENTOS NECESARIOS PARA ESTE TUTORIAL

  • Un PC con GNU/Linux (Debian/Ubuntu preferiblemente)
  • Conexión a Internet

 

 

2.- INSTALAR LOS PRE-REQUISITOS (PASO 1)

Antes de comenzar la compilación del kernel y su personalización, deberemos tener instalados una serie de paquetes en el sistema. Para ello, si estamos en una distribución de tipo Debian/Ubuntu ejecutaremos e instalaremos los siguientes paquetes de una sola vez:

raul@debian:~$ sudo apt-get -y install build-essential libncurses-dev libncurses-dev flex bc bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf

 

 

3.- DESCARGAR CÓDIGO FUENTE DEL KERNEL (PASO 2)

Aunque la compilación se puede hacer con un usuario normal, yo tengo la manía (desde hace + de 20 años) de hacer todo el proceso directamente con root. Para ello, nos cambiaremos de usuario utilizado el siguiente comando:

raul@debian:~$ sudo su - root

 

 

Descargaremos la versión que queremos de kernel de su web oficial https://www.kernel.org/, en este caso descargaremos la versión 5.10.13. Copiaremos la dirección de descarga para descargarlo directamente en consola con wget.

Compilar Kernel LinuxDescargar Kernel

 

 

Con el link copiado, podremos descargarlo desde consola con el siguiente comando (también puede ser descargado gráficamente desde el navegador, por supuesto):

root@debian:~# wget "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.13.tar.xz"

4.- DESCOMPRIMIR EL FICHERO CON LAS FUENTES DEL KERNEL (PASO 3)

Ahora descomprimiremos el fichero del kernel con el siguiente comando y esperaremos que termine:

root@debian:~# tar avxf linux-5.10.13.tar.xz

 

 

5.- ENTRAR EN EL DIRECTORIO (PASO 4)

Ahora entraremos dentro del directorio creado al descomprimir el kernel:

root@debian:~# cd linux-5.10.13/

 

 

6.- COPIAR CONFIGURACIÓN DEL KERNEL ACTUAL (PASO 5)

Realizar la configuración desde 0 de las opciones es casi una opción "imposible" incluso para usuarios con nivel alto de conocimiento de GNU/Linux. Por eso, lo habitual es partir de una configuración funcional del kernel y a partir de ella ir eliminando elementos innecesarios o añadir aquellos que se necesitan. En este ejemplo, el kernel que estamos usando en Debian es 4.19.0-6-amd64 y lo que queremos hacer es compilar e instalar el 5.10.13:

root@debian:~$ uname -a
Linux debian 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64 GNU/Linux

  

 

Para copiar la configuración del kernel y sus módulos actuales, nos situaremos dentro del directorio del kernel que hemos bajado y ejecutaremos el siguiente comando. Con este comando tendremos un fichero llamado .config con la misma configuración del kernel que estamos usando ahora mismo: 

root@debian:~/linux-5.10.13# cp /boot/config-$(uname -r) .config

 

 

7.- CONFIGURAR EL KERNEL A NUESTRA MEDIDA (PASO 6)

Este paso sin suda es el mas importante de todos. Aquí es cuando seleccionamos que opciones queremos soporte nuestro kernel o cuales queremos que no. Cuales queremos integrar dentro del kernel o cuales queremos que estén como módulos.

Aunque hay varias formas de mostrar la configuración del kernel, la mas habitual esa usar "make menuconfig" desde un terminal, ya que su uso es muy cómodo, rápido y realmente sencillo de usar con las flechas , el tabulador y la barra espaciadora.

Por defecto, al lanzar "make menuconfig", leerá el fichero .config en el directorio de las fuentes del kernel. Por tanto, como ya hemos copiado el fichero del kernel actual (ver punto anterior) al fichero .config, tan solo debemos ejecutar el siguiente comando:

root@debian:~/linux-5.10.13# make menuconfig

Compilar Kernel LinuxPantalla principal de configuración del kernel

 

 

Por ejemplo, si queremos tener soporte de NTFS de escritura en particiones NTFS, deberemos navegar por los menús hasta encontrar la opción. En concreto, esta opción está en: File Systems ---> DOS/FAT/EXFAT/NT Filesystems:

Compilar Kernel LinuxActivar soporte escritura NTFS

 

 

Para activar la opción de escritura NTFS, debemos seleccionarlo y pulsar la tecla espaciadora. Existen 2 opciones (*=integrado en kernel o M=módulo). Si es algo que se va a usar muy de continuo, se recomienda integrarlo directamente en el kernel. Si es una característica que se va a usar de forma muy esporádica, se recomienda compilarlo como módulo. Hay que tener en cuenta que algunas opciones solamente deja integrado en el kernel ó como módulo. Una vez que hemos customizado nuestro kernel a medida, pulsaremos "save" y guardaremos la configuración como .config. Lo ideal es (la primera vez) dedicarle mucho tiempo a la customización del kernel, ya que posiblemente el 60-70% de los módulos a compilar, o las opciones a incluir dentro del kernel jamás vayamos a usarlas.

Otra de las diferencias de añadir una nueva opción como módulo o integrado en el kernel es que si lo integramos en el kernel, hay que recompilar todo si ó si. Si tenemos la opción de ponerlo como módulo, solamente habrá que recompilar los módulos e instalarlos, ahorrando así muchísimo tiempo de compilación.

Compilar Kernel LinuxIntegrar soporte de escritura NTFS en Kernel

 

 

Una vez que hemos realizado la configuración, es recomendable guardar la configuración con un nombre identificativo en algún lugar "seguro" por si tenemos que recuperar esas mismas configuración o sobre todo para cuando volvamos a compilar un kernel más nuevo. Por ejemplo, copiaremos la configuración así:

root@debian:~/linux-5.10.13# cp .config config-5.10.13-custom

 

 

8.- COMPILAR EL KERNEL (PASO 7)

Una vez tenemos nuestra configuración hecha, deberemos ejecutar el siguiente comando e ir a tomar un café, porque la compilación tarda bastante. Principalmente, la compilación se demora por la cantidad de módulos y opciones a compilar y por el hardware que estemos usando. Para compilar ejecutaremos lo siguiente:

root@debian:~/linux-5.10.13# make

 

 

9.- INSTALACIÓN DE LOS MÓDULOS (PASO 8)

Una vez finalizada la compilación del kernel y los módulos, es hora de instalar los módulos con el siguiente comando:

root@debian:~/linux-5.10.13# make modules_install

 

 

10.- INSTALACIÓN DEL KERNEL (PASO 9)

Tras instalar los módulos, instalaremos el kernel con el siguiente comando:

root@debian:/linux-5.10.13# make install
sh ./arch/x86/boot/install.sh 5.10.13 arch/x86/boot/bzImage \
System.map "/boot"
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 5.10.13 /boot/vmlinuz-5.10.13
run-parts: executing /etc/kernel/postinst.d/dkms 5.10.13 /boot/vmlinuz-5.10.13
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 5.10.13 /boot/vmlinuz-5.10.13
update-initramfs: Generating /boot/initrd.img-5.10.13
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 5.10.13 /boot/vmlinuz-5.10.13
Generando un fichero de configuración de grub...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Encontrada imagen de linux: /boot/vmlinuz-5.10.13
Encontrada imagen de memoria inicial: /boot/initrd.img-5.10.13
Encontrada imagen de linux: /boot/vmlinuz-4.19.0-6-amd64
Encontrada imagen de memoria inicial: /boot/initrd.img-4.19.0-6-amd64
hecho

 

 

11.- REINICIAR (PASO 10)

El último paso que queda es reiniciar y arrancar GNU/Linux y... cruzar los dedos! ... no querrás ver un Kernel Panic! :D Por eso te recomiendo no borrar los kernels antiguos y tener siempre varios kernels (aunque sean viejos) que funcionen correctamente.

 

ENJOY!


Acerca de Mi

RPF

Soy Ingeniero Téc. Industrial Mecánico, Administrador de Sistemas Informáticos, Desarrollador de Aplicaciones Informaticas Web, Técnico Superior en PRL, Experto en Energías Renovables... y trabajo actualmente como Senior DevOPS en HP SCDS.

Contactar conmigo

Dirección: León, España

E-Mail: Contactar

Web: https://www.raulprietofernandez.net

Skype: raul.lnx

APÚNTATE GRATIS

VIP RPF
Entra en la Comunidad VIP y consigue acceso a las descargas en PDF, Trucos y Videotutoriales ocultos y mucho más... ¡Muy Pronto!

Si haces login, serás automáticamente suscrito a mi lista de Newsletter. Siempre podrás borrarte cuando quieras.