Compilando Kernel de AV Linux en MX Linux 21 de (32 bits y 64 bits)

Requerimiento importante:

Necesita 40 GB de espacio libre en disco

Compilados exitosamente 

El siguiente Kernel lo pude compilar correctamente:

https://github.com/wachin/linux-avl/releases/tag/v5.6.10-rt5-avl1

este no se me ha colgado:


para instalar guardelos en alguna carpeta y abra una terminal allí y ponga:

sudo dpkg -i *.deb

Después de instalado reinicie el ordenador e ingrese en el grub con ese Kernel buscandolo en las configuraciones avanzadas del Kernel

 Lo estoy probando y hasta el momento me funciona bien, los siguientes son los pasos que hice para compilarlo:


Este Kernel de AV Linux trabaja muy bien con bajas latencias y no me da xruns (ruidos al grabar en las condiciones que yo lo uso), para mi es mejor que el Kernel de Ubuntu Studio, y sobre esto puede leer la siguiente entrada:

xruns en Ubuntu Studio 18.04 con qjackctl a 44100 de frecuencia de muestreo, a 128 cuadros por periodo para estereo mix
https://facilitarelsoftwarelibre.blogspot.com/2022/04/xruns-en-ubuntustudio-con-qjackctl-a-44100-y-freq-muestreo-a-128-cuadros-por-periodo.html

 

Nota: A la fecha 2022 me enteré que encontraron un problema en los Kernel de Linux versiones del 5.10-rc1 al 5.14.15 y por eso ha sido descontinuado el desarrollo del Kernel original de AV Linux desarrollado por Trulan debido a la dificultad de mantenimiento, puede leerlo aquí:

Se ha descontinuado el Repositorio del Kernel de AV Linux (debido a vulnerabilidad encontrada y dificultades de mantenimiento)
https://facilitarelsoftwarelibre.blogspot.com/2022/04/se-ha-descontinuado-el-repositorio-del-kernel-de-avlinux.html


¿Cuál es la razón de compilar el Kernel de AV Linux?

Para mi es porque no hay en 32 bits y ese kernel es muy bueno trabajando en bajas latencias pues no me da xrun (no produce ruidos en muy bajas latencias), así que estos son los pasos que hice y que le podrían servir para compilarlo en algún otro Sistema Operativo basado en Debian o Ubuntu y usarlo a ver cómo le va

Nota: También se puede compilar en 64 bit.


Cuando vaya a compilar el Kernel entre en el Kernel Original del Sistema Operativo

Escribo este título pues puede que haya la posibilidad de que usted haya ya compilado algún Kernel y lo esté usando, o usando algún otro de algún otro lado, pero no, deben usar siempre el Kernel que vino en su Sistema Operativo. Si usted no haya instalado en su Sistema Operativo Linux algún Kernel de algún otro lado omitan esto.


Dependencias

Ahora si continuemos, debemos instalar las siguientes dependencias para poder compilarlo:

sudo apt-get install gcc build-essential libncurses5-dev fakeroot wget xz-utils flex bison libssl-dev autoconf automake cmake dwarves openssl libelf-dev libudev-dev libpci-dev libiberty-dev bc python3-sphinx lzop lzma lzma-dev libmpc-dev u-boot-tools gettext


¿Cuál Código fuente del Kernel en Tiempo Real (RT) descargar?

Como noción previa para poder buscar el código fuente en la dirección de GitHub donde están los códigos fuentes del Kernel Real Time de AV Linux debemos saber que las palabras kernel-rt y preempt-rt significan lo mismo, podemos leerlo en una publicación de Red Hat:

Working with the real-time kernel for Red Hat Enterprise Linux | Enable Sysadmin
https://www.redhat.com/sysadmin/real-time-kernel


a la cual traduciendola:

Un kernel en tiempo real no es necesariamente superior o mejor que un kernel estándar. En cambio, cumple con diferentes requisitos comerciales o del sistema. Es un kernel optimizado diseñado para mantener baja latencia, tiempo de respuesta consistente y determinismo. A modo de comparación, un kernel RHEL estándar se centra en las operaciones orientadas al rendimiento y la programación justa de tareas. El kernel en tiempo real también se conoce como kernel-rt o preempt-rt.

La forma más sencilla de identificar un kernel en tiempo real es ejecutar el comando uname -r en la terminal y luego buscar la palabra clave rt en la versión del kernel. Si falta rt, entonces el sistema usa el kernel estándar.

El siguiente resultado es un ejemplo:

#uname -r
3.10.0-1127.10.1.rt56.1106.el7

Descarga

Descargar el código fuente desde (allí buscar alguna versión de las tantas que la cual queramos instalar):

https://github.com/musical-chairs/linux/tags


En este tutorial usé yo el siguiente código fuente v5.0.21-rt16-avl4 el cual lo compilé en MX Linux 19 (que está basado en Debian 10 Buster):

https://github.com/musical-chairs/linux/releases/tag/v5.0.21-rt16-avl4


y la versión de MX Linux 19 la descargué desde:

https://sourceforge.net/projects/mx-linux/files/Old/

y exactamente la versión MX Linux 19.4 que yo me descargue vino con el Kernel 4.19 así que pienso que la versión del Kernel a compilar debería ser una versión lo más cercana a esta para esta version de Sistema Operativo, como también podría ser:


Nota: También he compilado con estas mismas instrucciones a la versión del Kernel AV Linux v4.16.12-rt5-avl1:

https://github.com/musical-chairs/linux/releases/tag/v4.16.12-rt5-avl1


después de descargado hay que descomprimirlo:


 y abrir una terminal dentro del código fuente

Nota: He compilado varios de esos Kernel y un par de ellos no tenían soporte para particiones exFAT (y yo hago el uso de dos particiones así), pero estos kernel indicados si tienen soporte para exFAT.


Añadir el nombre del Mantenedor o Responsable a su Sistema para que se compile con ese nombre (Opcional)

Esto es totalmente opcional, no es necesario para compilar el Kernel

Para hacer esto ponga en una terminal lo siguiente (teniendo instalado Gedit u otro editor pero debe cambiar el nombre en la terminal):

gedit ~/.bashrc 

allí debe llegar hasta abajo y con enter hacerse un espacio::


 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í:

 

ahora cierro Gedit y reinicio el ordenador. Con esto una vez instalado el Kernel al revisarlo en Synaptic se verá allí su nombre y su correo.


Copiar la configuración del Kernel de AV Linux a nuestra Compilación

Para lo siguiente debe estar ubicado en una terminal en el lugar donde está el código fuente de la carpeta descomprimida del kernel. Necesitamos poner el archivo .config desde el sistema operativo de AV Linux y para esto he copiado archivos importantes de AV Linux y creado un repositorio en Github y uno de ellos es el archivo de configuración para el Kernel. Ponga en la terminal lo siguiente:

wget -c 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

aquí una imagen:


 

y si activamos el ver los archivos ocultos, ejemplo en Thunar con Ctrl + H vemos ahora el archivo:


ahora poner lo siguiente allí mismo:

make menuconfig

 

aparece así:

 

Explicación de la ayuda.- Allí dice en inglés:

Arrow keys navigate the menu.  <Enter> selects submenus ---> (or empty submenus ----). 
Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes, <M> modularizes features.
Press <Esc><Esc> to exit, <?> for Help, </> for Search.  Legend: [*] built-in  [ ] excluded
<M> module  < > module capable

Cuya traducción significa:

Las teclas de flecha se usan para navegar por el menú. <Enter> selecciona submenús ---> (o submenús vacíos ----).
Las letras resaltadas son teclas de acceso rápido. Presionar <Y> incluye, <N> excluye, <M> modulariza características.
Presione <Esc><Esc> para salir, <?> para Ayuda, </> para Buscar. Leyenda: [*] incorporado [ ] excluido
<M> módulo < > compatible con módulo
Nota: Una de las cosas importantes que dice es que para entrar en alguna opción que tenga sub opciones dar Enter, y para salir Esc dos veces.

El consejo que les doy es que no usen la tecla "Espacio" pues esa es para cambiar las opciones, y usted podría sin querer cambiar algo del Kernel y luego no sabría que cambió. Exepto que sepa lo que estuviera haciendo.


Verificar las configuraciones del Kernel

Verifiquemos si está todo correcto pues habremos cargado la configuración del Kernel de AV Linux:


Verificar las configuraciones Real Time
Debe ver si están las siguientes marcadas 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
 -> General setup  -> Preemption Model (Fully Preemptible Kernel (Real-Time))
   (X) Fully Preemptible Kernel (Real-Time) o (depende de la versión del Kernel):  # 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
 
Para facilidad de entender qué es lo que se hace les pongo unas capturas de pantalla:
 
Verificando 
# Enabled CCONFIG_NO_HZ_IDLE
 
 
 
Verificando 
# Enabled CONFIG_PREEMPT_RT

esta opción es una de las más importantes, como ven en este Kernel 5.0.10 al cual pertenece la captura de pantalla la opción "Full Preemptible Kernel (RT)" si está disponible pero no está marcada, por lo que hay que marcarla con la tecla barra espaciadora:



así mismo deben verificar las otras. Si alguna no estuviera correcta allí si deben usar la tecla Espacio para marcarla, una vez aplastada la tecla Espacio se irá automáticamente a la opción anterior, pero pueden volver a entrar para verificar, y para salir hay que dar dos veces Esc.
 
 
Sobre estas configuraciones pongo la siguiente información:

Configuración en .configDescripción
CONFIG_NO_HZ_IDLEEsta 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_TIMERSEsta 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_RTEl 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_10001000 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_PERFORMANCEEsto establece la frecuencia de forma estática a la frecuencia más alta admitida por la CPU


Nota: Es posible que alguna de estas opciones en algunas versiones de los Kernel no aparezcan o no aparezcan con el mismo nombre.

Verificar el soporte exFAT, y añadirlo si no tiene

Podemos verificar si tiene o no soporte para el Sistema de Archivos exFAT que en mi caso yo uso particiones con ese formato para compartir archivos entre Widnows y Linux pues tengo dual boot

Como ejemplo en el siguiente Kernel:

v4.16.12-rt5-avl1
https://github.com/musical-chairs/linux/releases/tag/v4.16.12-rt5-avl1

Verifiquemos así (los pasos para llegar aquí están indicados arriba) damos Enter en:

File systems


y buscamos bastante abajo, debería de decir:

DOS/FAT/EXFAT/NT Filesystems

pero no dice eso sino que dice:

DOS/FAT/NT Filesystems

 


en este caso ese Kernel no tiene soporte para exFAT

Esto también se lo puede ver al extraer el contenido:



 y buscar en la carpeta:

fs

que significa file system, y allí buscar la carpeta:

exfat

que en este caso no hay:



Kernels que tampoco tienen soporte exFAT:
Los siguientes:

v5.0.10-rt7avl2


v5.0.10-rt7avl2

v5.0.19-rt11-avl2
 
 

Añadiendo soporte exFAT a un Kernel 5.0

Siguiendo estas instrucciones:
 
exfat-linux.- exFAT filesystem module for Linux kernel 

Nota: Para un Kernel más antiguo, ejemplo un Kernel 4.9.326 que a esta fecha 12 de marzo de 2024 todavía está en el "MX Instalador Paquetes" de MX Linux:


habría que buscar el controlador del sistema de archivos una versión anterior, lo cual está en:


allí habría que intentar con uno de los desarrolados antes, es mas o menos pensar en que fecha fueron desarrolados ambos (el Kernel y el controlador) para que funcione.

Añadiendo el soporte del sistema de archivos exFAT a un Kernel 5.0.x

Nota: Si quiera añadir el soporte exFAT a un Kernel antiguo vea la siguiente entrada.

Para añadir el soporte exFAT clonar en la carpeta "fs" que está dentro del código fuente del Kernel, entrar en una terminal:
 
cd fs
 
aquí dejo una captura de pantalla para entender mejor: 




allí poner:
 
git clone https://github.com/arter97/exfat-linux exfat
 
Ahora, desde nuestro Administrador de archivos entrar en la carpeta que hemos clonado dentro de la carpeta fs, o sea entrar en:

exfat

y dentro borrar la carpeta:

debian

retroceder un directorio antes de exfat y estar en la carpeta fs
 
y modificar el archivo:
 
fs/Kconfig
 
abrirlo con algún editor de texto:
 
 
y editar:

menu "DOS/FAT/NT Filesystems"
 
añadiendo y que quede así:
 
menu "DOS/FAT/EXFAT/NT Filesystems"
 
y en
 
 source "fs/fat/Kconfig"
 source "fs/ntfs/Kconfig"
 
añadir y debe quedar así:
 
source "fs/fat/Kconfig"
source "fs/exfat/Kconfig"
source "fs/ntfs/Kconfig" 
 
así como muestra la siguiente carpeta:
 

 
 
guardar y cerrar 

y modificar el archivo:
 
fs/Makefile

abrir con un editor de texto y en:

 obj-$(CONFIG_FAT_FS)        += fat/
 obj-$(CONFIG_BFS_FS)        += bfs/
 
 
Nota: Para que pueda encontrar esa parte fácilmente sólo busque: "obj-$(CONFIG_FAT_FS)"
 
añadir y debe quedar así:
 
obj-$(CONFIG_FAT_FS)        += fat/
obj-$(CONFIG_EXFAT_FS)        += exfat/
obj-$(CONFIG_BFS_FS)        += bfs/

así como muestra la siguiente captura de pantalla:
 

 
guardar y cerrar
 
Si estaba en:
 
make menuconfig

salga de allí dando Esc dos veces para ir a la opción anterior, y así hasta salir
 
ahora si poner otra vez (este comando no ponerlo en el directorio fs porque allí no funciona):
 
make menuconfig
 
Verificar en :
 
File systems --> DOS/FAT/NT Filesystems --> exFAT filesystems support
 
 
a continuación le dejo unas explicaciones con imágenes:
 

 al marcar exFAT como módulo aparecerán automáticamente otras opciones
 
 

Sigamos con el tutorial

Ahora si, seguimos con el Kernel 5.0.21 (si estaba usando otro siga con el de usted), presionaremos la tecla Tab o con la flecha derecha para ubicarnos en el menú Load:


y aparece así y dar Enter:

 
Ahora con Tab o flecha derecha llegar hasta Exit:


y dar Enter y repetir varias veces hasta que aparezca:

Nota: También se puede más rapido con Esc varias veces

y ahora aparece así en la terminal:


ELEGIR LA VELOCIDAD DE COMPILACIÓN (OPCIONAL)

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í yo debo de poner así:

export CONCURRENCY_LEVEL=3

ejemplo me quedó así:

 

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 avlinux:

make deb-pkg LOCALVERSION=-avlinux KDEB_PKGVERSION=$(make kernelversion)-1


si se pone eso en la terminal con esa etiqueta será compilado el Kernel y eso aparecerá en el deb. 

Pero yo quiero que aparezca mi Nick Name o apodo, para eso pondré así:

make deb-pkg LOCALVERSION=-wachin KDEB_PKGVERSION=$(make kernelversion)-1

Debe ser sin ningún espacio.

ahora pongo una imagen de lo que sale al poner el comando:

 

y ahora si a 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


 ya fueron generados automáticamente los deb, y para instalarlos sugiero hacer lo siguiente

 

INSTALACIÓN DE LOS DEB DEL KERNEL

Fueron generados cuatro deb, y para la instalación sólo necesitamos dos así que lo mejor es que cojamos esos dos y los pongamos a parte

En el administrador de archivos, en este caso estoy usando Thunar irme atrás (pues estaba dentro de la carpeta del código fuente):

 


allí seleccionar los tres siguientes deb y cortarlos:



Nota: Hay un error en la explicación de la imagen de arriba, no son tres, sino son dos

así:



 

y pegarlos dentro de otra carpeta



así:



y allí con clic derecho abrir una terminal e instalarlos:

sudo dpkg -i *.deb

 



en la instalación aparecen unos mensajes, al menos aquí en MX Linux 19 pero no pasa nada

Requerimientos en MX Linux 21 recién instalado

Cuando usted recién haya instalado MX Linux 21 en un ordenador debe instalar:

sudo apto install gcc

para poder instalar el Kernel desde los deb que ha sido compilado, pues sino no se podrá instalar


Actualizar el Grub

Ahora es necesario actualizar el Grub porque si no lo hace no aparecerá disponible el Kernel al iniciar el ordenador 

sudo update-grub


luego reiniciar

 

Eligiendo el Kernel RT

A la entrada seleccionar el Kernel, para eso elija la Opción Avanzada:


allí está el Kernel compilado:


 además abajo se ve el otro que compilé e instalé:

quería probar los dos puesto que mi laptop Dell Inspiron 1750 tiene una tarjeta lectora de Memorias SD y saben en ambos Kernel funciona bien, que bueno (es que a veces esa tarjetal lectora no funciona en algún Kernel y sin ella no puedo usarla y para mi es imprescindible)



Informe de Kernel compilados 

 

En MX Linux 21 

No pude compilar a:

https://github.com/musical-chairs/linux/releases/tag/v4.16.12-rt5-avl1

https://github.com/musical-chairs/linux/releases/tag/v5.0.7-rt5avl1

https://github.com/musical-chairs/linux/releases/tag/v5.0.10-rt7avl2


Compilados exitosamente

El siguiente Kernel lo pude compilar correctamente:

https://github.com/wachin/linux-avl/releases/tag/v5.6.10-rt5-avl1

este me va mejor, no se me ha colgado:


guardelos en alguna carpeta y abra una terminal allí y ponga:

sudo dpkg -i *.deb

Después de instalado reinicie el ordenador e ingrese en el grub con ese Kernel buscandolo en las configuraciones avanzadas del Kernel

 Lo estoy probando y hasta el momento me funciona bien

Dios les bendiga


BASADO EN:

8.10. Compiling a Kernel
https://debian-handbook.info/browse/stable/sect.kernel-compilation.htm

Linux Kernel compilation – Phoenix
https://nongin.wordpress.com/tag/linux-kernel-compilation/ 

module - How to fix: fatal error: openssl/opensslv.h: No such file or directory in RedHat 7 - Stack Overflow
https://stackoverflow.com/questions/46008624/how-to-fix-fatal-error-openssl-opensslv-h-no-such-file-or-directory-in-redhat

"Error fatal: openssl / opensslv.h: no existe tal archivo o directorio" compilando mitmproxy
https://qastack.mx/ubuntu/797351/fatal-error-openssl-opensslv-h-no-such-file-or-directory-compiling-mitmproxy

Compiling the kernel 5.11.11 - Ask Ubuntu
https://askubuntu.com/questions/1329538/compiling-the-kernel-5-11-11
https://askubuntu.com/a/1329625/145772
eso era para evitar el error:


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

3.1. Email address
Various Debian maintenance tools recognize your email address and name to use by the shell environment variables $DEBEMAIL and $DEBFULLNAME.
Let’s setup these packages by adding the following lines to ~/.bashrc [7].

Add to the ~/.bashrc file.

DEBEMAIL="your.email.address@example.org"
DEBFULLNAME="Firstname Lastname"
export DEBEMAIL DEBFULLNAME}

Comentarios