wachin / Compilando-un-Kernel-Real-Time

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Compilando un Kernel y personalizarlo en Linux

Porqué compilar un Kernel para personalizarlo?

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.

¿Qué versión de Kernel está instalado en mi Sistema Operativo?

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

Instalar dependencias

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.

Elegir la versión del código fuente del Kernel a Compilar

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.

Versión de Kernel elegido para buscar el Parche Real Time correcto

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)

Buscar el código fuente correcto para el mismo parque RT

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)

Resumen de Descarga

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

Aplicación del Parche RT

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

Usando el archivo de configuración de AV Linux

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:

https://github.com/wachin/AV-Linux-archivos-importantes/tree/master/AVL-MXE-2021.05.22-xfce4-openbox-i386.iso/usr/src/linux-headers-5.9.1-rt19avl1

Ahora poner allí mismo en la terminal:

make menuconfig

![](img/185048 make menuconfig.png)

y al ejecutar:

![](img/185049 menuconfig abierto.png)

VERIFICANDO SOPORTE EXFAT (OPCIONAL)

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 hacer ningún cambio en la configuración del Kernel

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)

ELEGIR LA VELOCIDAD DE COMPILACIÓN

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

Compinado el Kernel etiquetandolo

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:

img

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

Instalar el Kernel RT

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

About