Deseo compilar un Kernel y personalizarlo porque tengo un ordenador de pocos recursos y voy a compilar el Kernel desabilitando la Virtualización y otros para alijerar el Kernel
Este tutorial lo estoy haciendo en MX Linux 21, pero lo puede usar en cualquier Linux basado en Debian, y podría adaptarlo para Ubuntu u otro Linux.
Añadir el nombre del Mantenedor o Responsable a su Sistema para que se compile con ese nombre (Opcional)
Esta parte es totalmente opcional, no es necesario para compilar el Kernel, pero si lo hace una vez instalado el Kernel al revisarlo en Synaptic se verá allí su nombre y su correo, para hacerlo lo más fácil es hacer visibles a los archivos ocultos con Ctrl + H y darle clic derecho y abrir con algún editor de texto al archivo oculto:
.bashrc
![](img/20240123-224737 abrir con clic derecho.png)
en la siguiente imagen está abierto con Gedit:
![](img/20240123-225030 bashrc abierto.png)
y allí debe de poner lo siguiente:
DEBEMAIL="your.email.address@example.org" DEBFULLNAME="Firstname Lastname" export DEBEMAIL DEBFULLNAME
y cambiar con sus datos.
A mi me queda así:
![](img/20240123-225119 añadiendo los datos de usuario a bashrc.png)
ahora guardo y cierro el editor de texto y cierro sesión y vuelo a entrar en el ordenador.
Primero debe saber qué kernel trae su distrubución para tener una idea de qué Kernel debe compilar, pongo en la terminal:
uname -r
y me da:
5.10.0-20-amd64
entonces sé que si instalo una versión como esa debería de funcionar, o sea esto es para tener una idea
Debemos instalar las siguientes dependencias para poder compilarlo:
sudo apt-get install libncurses5-dev fakeroot wget xz-utils flex bison libssl-dev
Nota: Es posible que con el paso del tiempo se necesite alguna otra dependencia lo cual deberán de consultando con la información de error que les dé mientras lo compilan.
Ahora es necesario ver cual Kernel se podría instalar, y es necesario saber que en la siguiente página ellos tienen los Kernel con Soporte de Largo Plazo (LTS) y nos conviene usarlos pues los mantienen actualizados en cuantos a seguridad. Diríjase a:
Longterm release kernels https://www.kernel.org/category/releases.html
La siguiente captura de pantalla la hago con la fecha Enero 2024
![](img/20240123-230411 Kernel Releases 2024 Enero.png)
Nota: Si no sepan Inglés les aconsejo que la traduzcan en Google Traductor
Allí encuentro y copio la siguiente información:
Version Maintainer Released Projected EOL
6.6 Greg Kroah-Hartman & Sasha Levin 2023-10-29 Dec, 2026
6.1 Greg Kroah-Hartman & Sasha Levin 2022-12-11 Dec, 2026
5.15 Greg Kroah-Hartman & Sasha Levin 2021-10-31 Dec, 2026
5.10 Greg Kroah-Hartman & Sasha Levin 2020-12-13 Dec, 2026
5.4 Greg Kroah-Hartman & Sasha Levin 2019-11-24 Dec, 2025
4.19 Greg Kroah-Hartman & Sasha Levin 2018-10-22 Dec, 2024
entonces lo más seguro es que funcione una versión:
5.10 en adelante, porque esa está con la feha 2020.
Voy a usar una versión del Kernel:
5.10
entonces con esto en mente debo buscar un parche Real Time para esta versión, para esto me dirijo a:
Proyectos Real Time
https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt
allí entre toda la lista busco el número
5.10
y allí dentro busco un patch para la versión 5.10 y a esta fecha que hago este tutorial encuentro el más actual que es:
patch-5.10.109-rt65.patch.xz 07-Apr-2022 03:09 171K
y me descargo ese. Aquí pongo el enlace completo:
https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/5.10/patch-5.10.109-rt65.patch.xz
pero les explico que luego es muy posible que este enlace ya no esté disponible porque ellos generalmente andan haciendo actualizaciones (en los Kernel que están en continuo mantenimiento LTS)
Me dirijo a:
Linux Kernel
https://mirrors.edge.kernel.org/pub/linux/kernel/
allí dentro busco:
v5.x
y allí encuentro:
https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/
y allí dentro encuentro el código fuente que encaja con el parque:
linux-5.10.109.tar.xz 28-Mar-2022 08:03 115M
https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.10.109.tar.xz
Nota: Con el paso del tiempo este archivo ya no estará disponible porque lo actualizan en los Kernel LTS (cuando encuentran una vulnerabilidad la corrigen)
Haré un resumen de los enlaces para poner en la terminal y descargar. Le aconsejo que esto lo haga dentro de alguna carpeta:
Parche RT
wget -c https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/5.10/patch-5.10.109-rt65.patch.xz
Kernel
wget -c https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.10.109.tar.xz
Ubíquese en una terminal en el lugar donde está el parche y el código fuente:
patch-5.10.109-rt65.patch.xz linux-5.10.109.tar.xz
y ponga:
tar xJvf linux-5.10.109.tar.xz
cd linux-5.10.109
xzcat ../patch-5.10.109-rt65.patch.xz | patch -p1
Allí mismo ponga en la terminal:
wget https://github.com/wachin/AV-Linux-archivos-importantes/raw/master/AVL-MXE-2021.05.22-xfce4-openbox-i386.iso/usr/src/linux-headers-5.9.1-rt19avl1/.config
con esto colocamos allí el archivo oculto (para verlo aplaste Ctrl + H):
.config
que como hemos parchado el Kernel a RT habilita las siguientes configuraciones para convertirlo en un Kernel Real Time:
# Enabled CCONFIG_NO_HZ_IDLE
-> General setup
-> Timers subsystem
-> Timer tick handling (Full dynticks system (tickless))
(X) Idle dynticks system (tickless idle)
# Enabled CONFIG_HIGH_RES_TIMERS
-> General setup
-> Timers subsystem
[*] High Resolution Timer Support
# Enabled CONFIG_PREEMPT_RT
-> Processor type and features
-> Preemption Model (Fully Preemptible Kernel (Real-Time))
(X) Fully Preemptible Kernel (Real-Time)
# Enabled CONFIG_HZ_1000
-> Processor type and features
-> Timer frequency (1000 HZ)
(X) 1000 HZ
# Enabled CPU_FREQ_DEFAULT_GOV_PERFORMANCE
-> Power management and ACPI options
-> CPU Frequency scaling
-> Default CPUFreq governor
(X) performance
Sobre estas configuraciones información:
Configuración en .config | Descripción |
---|---|
CONFIG_NO_HZ_IDLE | Esta opción habilita un sistema inactivo sin señales: las interrupciones del temporizador solo se activarán según sea necesario cuando el sistema esté inactivo. Esto suele ser interesante para el ahorro de energía. |
CONFIG_HIGH_RES_TIMERS | Esta opción habilita la compatibilidad con el temporizador de alta resolución. Si su hardware no es compatible, esta opción solo aumenta el tamaño de la imagen del kernel. |
CONFIG_PREEMPT_RT | El conjunto de parches CONFIG_PREEMPT_RT lo mantiene un pequeño grupo de desarrolladores principales encabezado por Ingo Molnar. Este parche permite adelantarse a casi todo el kernel, con la excepción de unas pocas regiones de código muy pequeñas ("regiones críticas raw_spinlock"). Esto se hace reemplazando la mayoría de los spinlocks del kernel con mutexes que admiten la herencia de prioridad, así como también moviendo todas las interrupciones y las interrupciones de software a los subprocesos del kernel. Puede encontrar un RT_PREEMPT_HOWTO detallado en esta página. Paul McKenney ha escrito una buena descripción general de CONFIG_PREEMPT_RT que es una buena introducción a los cambios introducidos en el kernel por el parche CONFIG_PREEMPT_RT. Aquí se encuentra disponible una descripción general de los diversos componentes del parche CONFIG_PREEMPT_RT y su estado de fusión en el núcleo de la línea principal. |
CONFIG_HZ_1000 | 1000 Hz es la opción preferida para sistemas de escritorio y otros sistemas que requieren respuestas interactivas rápidas a eventos. |
CPU_FREQ_DEFAULT_GOV_PERFORMANCE | Esto establece la frecuencia de forma estática a la frecuencia más alta admitida por la CPU |
Ese archivo .config el cual tiene las configuraciones del Kernel de AV Linux del 2021 lo extraje de la ISO del mismo y lo subí a GitHub:
Ahora poner allí mismo en la terminal:
make menuconfig
![](img/185048 make menuconfig.png)
y al ejecutar:
![](img/185049 menuconfig abierto.png)
Yo utilizo particiones exFAT y si este Kernel no tiene soporte no me sirve, para verificar si tiene entro en:
File Systems ---> DOS/FAT/exFAT
y este Kernel si tiene
No es necesario hacer ningún cambio pues ese archivo .config ya tiene las configuraciones para el Kernel RT de AV Linux 2021
Presionaremos la tecla Tab o con la flecha derecha para ubicarnos en el menú:
Load
![](img/191103 llegar hasta load.png)
y dar Enter, y cuando dice Ok dar Enter otra vez
![](img/191212 dar enter en ok.png)
Ahora con Tab o flecha derecha llegar hasta Exit y dar Enter:
![](img/191320 llegar hasta exit y dar enter.png)
y enter en la nueva configuración:
![](img/191430 enter en la nueva configuracion.png)
Este paso es opcional, podemos exportar el nivel de concurrencia para la compilación (Concurrencia es la acción de concurrir distintos sucesos o cosas en un mismo lugar o tiempo), para esto existen las siguientes opciones dependiendo de la cantidad de procesadores que usted tenga, para esto hay una regla la de agregar el número uno al número de núcleos que tenga su procesador, ejemplo:
Si usted tenga 2 núcleos debe poner export CONCURRENCY_LEVEL=3
Si usted tenga 4 núcleos debe poner export CONCURRENCY_LEVEL=5
Así, mi laptop es una Dell Inspiron 1750 y tiene dos núcleos así que yo debo de poner así:
export CONCURRENCY_LEVEL=3
esto es para que la compilación no se demore mucho
Es posible Compilar el Kernel y ponerle una etiqueta como descripción, en el siguiente ejemplo en LOCALVERSION= está la etiqueta wachin:
make deb-pkg LOCALVERSION=-wachin KDEB_PKGVERSION=$(make kernelversion)-1
si se pone eso en la terminal con esa etiqueta será compilado el Kernel y eso aparecerá al final del nombre del deb
ahora pongo una imagen de lo que sale al poner el comando:
hay que esperar un buen rato hasta que termine la compilación, pueden ser horas
. . . . .
Bueno, ya se compiló, quizá se demoró unas 5 horas en compilar (depende del ordenador), ahora pongo una imágen de cómo me quedó
![](img/191531 Estos dos deb son el Kernel RT.png)
los dos deb:
linux-headers-5.10.109-rt65avl1-wachin_5.10.109-1_i386.deb linux-image-5.10.109-rt65avl1-wachin_5.10.109-1_i386.deb
Esos dos archivos deb son el Kernel, póngalos en una carpeta aparte e instalelos, abra una terminal allí y ponga:
sudo dpkg -i *.deb
y si desea los puede compartir en la Web
Si desea puede abrir Synaptic y buscar las palabras:
kernel image
o:
kernel header
y verá su nombre, su correo, y la etiqueta:
![](img/191532 Kernel con la etiqueta wachin.png)
make deb-pkg LOCALVERSION=-wachin KDEB_PKGVERSION=$(make kernelversion)-1
salir
BASADO EN:
Building realtime Linux for ROS 2 [community-contributed] — ROS 2 Documentation: Foxy documentation https://docs.ros.org/en/foxy/Tutorials/Building-Realtime-rt_preempt-kernel-for-ROS-2.html
System configuration [Linux-Sound] https://wiki.linuxaudio.org/wiki/system_configuration#do_i_really_need_a_real-time_kernel
Real-Time Linux | Toradex Developer Center https://developer.toradex.com/linux-bsp/real-time/real-time-linux/#preempt-rt-patch-set
Guide for Debian Maintainers https://www.debian.org/doc/manuals/debmake-doc/index.en.html Chapter 3. Tool Setups https://www.debian.org/doc/manuals/debmake-doc/ch03.en.html#email-setup