¿QUÉ ES EL KERNEL? CÓMO COMPILARLO Y PORQUÉ

 

Linux_Kernel_2El kernel ó núcleo de linux se puede definir como el corazón del sistema operativo. Es el encargado de que el software y el hardware de la máquina puedan trabajar juntos.

Algunas de sus funciones son:

Administrar la memoria, administrar los tiempos del procesador, encargarse de gestionar el acceso a los periféricos y a otros elementos de nuestro equipo, etc…

Hasta que empezó el desarrollo de la serie 2.6 del núcleo, existieron dos tipos de versiones:

La versión de producción o estable, que era el resultado final de las versiones de desarrollo o experimentales y la versión de desarrollo o experimental, usada por los programadores para desarrollar nuevas caracteristicas, realizar correciones, etc… Éstas se clasificaban como inestables y no aconsejables sino era para ese uso.

Las versiones del núcleo se numeraban con 3 dígitos, de la siguiente forma:

AA.BB.CC

AA: Serie ó versión principal del núcleo.

BB: Versión en desarrollo ó estable, un número impar significaba que era de desarrollo, uno par, que    era estable.

CC: Revisiones dentro de una versión, correciones o pequeñas modificaciones.

Yo actualmente tengo instalada Debian 8 «jessie» y la version del kernel es la 3.16.0, pero la última versión estable actual es la 4.2.6, la cual la podeis encontrar en https://www.kernel.org, evidentemente todo evoluciona y el kernel también. Por citar algún dato, las versiones anteriores a la 2.4 no tenian soporte USB.

 

¿Por qué compilarlo?

Quizás se entienda mejor con un breve ejemplo, imaginemos que nuestra máquina no tiene controladoras IDE de discos, sólo SATA, o que conocemos perfectamente todo el hardware de la máquina, tarjestas de red, audio, etc…
A la hora de compilar un kernel «personalizado», ganamos en rapidez y evitamos consumir recursos innecesarios de nuestro equipo ya que el kernel o sus módulos correspondientes serán más pequeños.
Es decir, para que cargar el modulo IDE o meterlo dentro del núcleo sino se va a usar.
También puede pasar que queramos aprovechar nuevas características de las versiones más recientes, en fin las posibilidades son multiples.

 

¿Cómo compilarlo?

El kernel 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. Como he comentado antes, lo podemos descargar desde su web:

https://www.kernel.org

Bajaremos la versión indicada como «stable»

Una vez descargado tendremos que descomprimirlo, lo tradicional es hacerlo en el directorio /usr/src, sin embargo puedes hacerlo donde desees. /usr/src es el directorio donde se trabaja para todo lo referente con el kernel y los módulos.

«tar -Jxf linux-versión.tar.xz»

Si tuvieramos que instalar las xz-utils:

«apt-get install xz-utils» ó «dnf install xz-utils», «yum install ncurses» dependiendo de tu distribución, ya sea basada en Debian o Red Hat.

Luego necesitamos ingresar al directorio donde se descomprimió y desempaquetó el kernel para poder configurarlo y compilarlo:

«cd /usr/src/linux-versión»

Una vez dentro del directorio, necesitamos limpiarlo de todo archivo de configuración que tenga.

NOTA: Podemos obviar este paso para la primera vez que nos lo descarguemos, ya que este viene completamente listo para compilar, pero una vez que terminas la compilación si por cualquier razón quieres volver a compilarlo, no es necesario que tengas que descomprimirlo y desempaquetarlo de nuevo, puedes reutilizar ese mismo código y es allí cuando tienes que limpiar todos los archivos que se generaron con la compilación anterior.

Para «limpiar» las fuentes del kernel:

«make mrproper»

 

El kernel proporciona 3 métodos de configuración de sus parámetros:

«make config»

Es la opción menos recomendada ya que se hace desde terminal y tendrás que configurar cada una de ellas individualmente.

«make menuconfig»

Se hace desde una TUI (Terminal user interface) y para poder visualizar el menú de configuración es necesario tener instaladas las librerias «ncurses»:

Debian y derivadas:
«apt-get install ncurses»

Red Hat y derivadas:
«dnf install ncurses» ó «yum install ncurses»

«make xconfig» (para KDE) ó «make gconfig» (para Gnome)

Es la mejor solución por ser la más comoda, consiste en una pequeña aplicación con interfaz gráfica y menus desplegables que permite configurar todos los parámetros con clicks de ratón. Hay que tener en cuenta, que para poder visualizar el menú de configuración es necesario tener intaladas las librerias «QT» (para xconfig en KDE) o «GTK» (para gconfig en Gnome). El procedimiento es igual que hemos citado anteriormente para instalar cualquier paquete dependiendo de la distribución.

Una vez que tengas el interfaz de configuración lanzado verás que para cada parametro configurable del kernel hay 3 opciones:

Compilarlo incluyendolo en el kernel

Es la opción más recomendable para todas las funcionalidades básicas. Por ejemplo, soporte para la mayoría de los sistemas de ficheros o los drivers de las tarjetas de red, monitores, etc.
Hay que tener en cuenta que cuantas más opciones se compilen dentro del kernel mayor será éste y más recursos consumirá a la hora de cargarlo.

Compilarlo como módulo

Es la opción más recomendable para las funciones que solo se necesitan en determinadas ocasiones. Por ejemplo, dispositivos USB, sistemas de ficheros poco utilizados en linux, etc.

No compilarlo

De esta manera excluimos ciertas funcionalidades del sistema operativo. Por ejemplo si nuestra máquina solo dispone de controladora SATA, para que compilar soporte para dispositivos IDE.

 

Compilar el nuevo kernel:

«make»
Crea una imagen comprimida del Kernel

«make modules»
Compila los módulos del Kernel

«make modules_install»
Instala los módulos

«mkinitrd /boot/initrd-versión»
Crea un disco duro virtual de arranque

«make install»
Instala el Kernel

Por último, tendríamos que agregar las entradas correspondientes a nuestro gestor de arranque, en este caso GRUB:

/etc/default/grub y /etc/grub.d (Últimas versiones)

/boot/grub/grub.conf (Versiones anteriores)

Ahora solo queda reiniciar el ordenador y cuando GRUB nos pregunte que kernel escoger, arrancar con el que acabamos de compilar.

Saludos cordiales.

Fuentes:

https://www.kernel.org/

http://www.gnu.org/licenses/gpl-3.0.en.html

http://www.linuxfromscratch.org/lfs/view/development/chapter08/kernel.html

https://wiki.archlinux.org/index.php/Kernels/Compilation/Traditional

https://debian-handbook.info/browse/stable/sect.kernel-compilation.html

 

 

Deja un comentario