Cómo compilar e instalar el último kernel de Linux desde la fuente

Acabo de terminar mi primera tarea para un curso sobre sistemas operativos avanzados. Y decidí documentar mi enfoque para construir el kernel de Linux desde la fuente e implementar mi propia llamada al sistema.

Hay una serie de blogs que ya le dicen cómo hacer esto, pero algunos de ellos están desactualizados y otros parecen innecesariamente complicados. Mi objetivo es presentar un enfoque sencillo para hacer esto, que con suerte debería ayudarlo a ahorrar mucho tiempo.

Compilar el kernel de Linux desde la fuente puede parecer una tarea abrumadora, incluso para alguien que se sienta bastante cómodo con las computadoras en general. También puede resultar muy irritante si no sigue las instrucciones adecuadas.

Entonces, aquí hay una guía para ayudarlo a través del proceso de construcción del kernel desde la fuente, ¡y es una guía que funciona! No tendrá que preocuparse por estropear su sistema o perder su tiempo.

¿Por qué compilar el kernel desde la fuente?

Si planea trabajar en las partes internas del kernel de Linux o cambiar su comportamiento, deberá volver a compilar el kernel en su sistema.

A continuación, se muestran algunos casos específicos en los que necesitará saber cómo trabajar con el código fuente del kernel:

  1. Quieres escribir un programa realmente genial de "Hola mundo". (Cada vez que implemente su propia llamada al sistema o modifique el código fuente del kernel, deberá volver a compilar el kernel para implementar los cambios)
  2. Desea habilitar funciones experimentales en su kernel que no están habilitadas de forma predeterminada (o deshabilitar las funciones predeterminadas que no desea)
  3. Desea depurar el código fuente del kernel, habilitar la compatibilidad con una nueva pieza de hardware o realizar modificaciones en sus configuraciones existentes
  4. ¡Estás haciendo un curso sobre sistemas operativos avanzados y no tienes más remedio que hacer esto!

En cada una de las situaciones anteriores, aprender a construir el núcleo desde la fuente será útil.

Lo que necesitarás

Un sistema operativo basado en Linux (probé esto en Ubuntu 14.04 LTS y las instrucciones escritas aquí son para lo mismo).

Deberá instalar algunos paquetes antes de comenzar. Utilice los siguientes comandos para el mismo.

sudo apt-get update
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc

También necesitará hasta al menos 12 GB de espacio libre en el disco, una conexión a Internet para descargar el código fuente y mucho tiempo (alrededor de 45 a 90 minutos).

Descarga y extracción de la última fuente del kernel

Para verificar su versión actual del kernel, abra la terminal y escriba:

uname -r

Vaya a kernel.org y descargue la última versión estable. En el momento de escribir esto, la última versión estable del kernel era 4.7.1, y me referiré a la misma en este artículo. (Nota: intente evitar descargar la fuente de otros sitios web)

Cambie al directorio donde se descargó el archivo y extráigalo usando:

tar xf linux-4.7.1.tar.xz

Cambie al directorio extraído de linux-4.7.1.

cd linux-4.7.1

Debe contener carpetas llamadas arch , fs , crypto , etc.

Configuración y compilación:

Antes de compilar el kernel, debemos configurar qué módulos se incluirán y cuáles se omitirán.

Hay muchas formas de hacerlo.

Una forma fácil y directa de hacer esto es copiar primero su archivo de configuración de kernel existente y luego usar 'menuconfig' para hacer cambios (si es necesario). Esta es la forma más rápida de hacerlo y probablemente la más segura.

cp /boot/config-$(uname -r) .config 
make menuconfig

Esta es la parte en la que podría terminar eliminando el soporte para un controlador de dispositivo o hacer algo por el estilo que eventualmente resultará en un kernel roto. Si no está seguro de realizar cambios, simplemente guarde y salga.

Nota: Una de las alternativas a menuconfig es una interfaz de línea de comandos interactiva accesible usando 'make config'. Esto te ayuda a configurar todo desde cero. No utilices esto. Se le harán más de mil preguntas de sí / no sobre la habilitación o deshabilitación de módulos, lo cual le prometo que no es para nada divertido. Probé esto una vez y de alguna manera me las arreglé para estropear las configuraciones del controlador de pantalla.

gconfig y xconfig son herramientas de configuración basadas en GUI alternativas que puede utilizar. No los he probado yo mismo. Para esto, necesitará usar make gconfig (o make xconfig ) en lugar de make menuconfig .

¡Ahora estamos listos!

Para compilar el kernel y sus módulos, usamos el comando make .

A esto le sigue el uso de make modules_install para instalar los módulos del kernel.

Finalmente, usamos make install para copiar el kernel y el archivo .config a la carpeta / boot y generar el archivo system.map (que es una tabla de símbolos usada por el kernel).

Estos tres pasos juntos suelen llevar mucho tiempo. Utilice el siguiente comando para realizar las tareas anteriores:

sudo make -j 4 && sudo make modules_install -j 4 && sudo make install -j 4

Nota: He utilizado la opción -j para especificar el número de núcleos que se utilizarán. Esto tiende a acelerar considerablemente el proceso. Puede usar nproc para verificar la cantidad de unidades de procesamiento disponibles. En mi caso, fueron 4 núcleos.

Idealmente, no debería necesitar privilegios de sudo, pero estaba teniendo problemas cuando no lo ejecuté con privilegios de sudo.

Pasos finales

Una vez que el kernel y sus módulos están compilados e instalados, queremos usar el nuevo kernel la próxima vez que arranquemos.

Para que esto suceda, necesitamos usar el siguiente comando:

update-initramfs -c -k 4.7.1 

Luego, use el siguiente comando, que busca automáticamente los kernels presentes en la carpeta / boot y los agrega al archivo de configuración de grub.

update-grub 

Ahora, reinicie el sistema y debería ver que el nuevo kernel se agrega a las entradas del cargador de arranque.

Si sigue las instrucciones, asumiendo que hay suficiente espacio disponible en el disco y que la configuración actual del kernel funciona bien, no debería encontrar ningún problema. Tenga en cuenta que siempre puede usar la versión anterior del kernel en caso de cualquier problema y volver a intentarlo todo.

El comando uname -r debería ahoramostrarle la versión actual del kernel que se está utilizando.

Una nota importante

Los pasos anteriores son necesarios para construir el kernel desde el código fuente, por primera vez. Una vez, esto se hace al menos una vez y una nueva imagen del kernel está lista, hacer cambios y escribir nuestros propios módulos es simple. Solo utilizará los pasos enumerados en Configuración y compilación cada vez que se implemente o configure algo nuevo de manera diferente.

Es decir, solo recuerda lo siguiente:

cp /boot/config-$(uname -r) .config
make menuconfig
sudo make -j 4 && sudo make modules_install -j 4 && sudo make install -j 4

Debo dar crédito a los siguientes recursos valiosos: fueron de gran ayuda con esta tarea: Ramkitech.com, askubuntu.com, kernel.org y cyberciti.biz