¿Qué es DKMS en Linux?

¿Qué es DKMS en Linux?
DKMS o soporte de módulo de kernel dinámico es un sistema que permite que los módulos discretos del núcleo se actualicen sin la necesidad de modificar todo el núcleo. Es un software gratuito bajo GPL V2 y escrito por el equipo de ingeniería Linux de Dell. DKMS se desarrolló inicialmente para que Dell Computer Corporation distribuya parches de software a sus clientes de manera bien definida.

DKMS tiene muchos beneficios para las comunidades de proveedores de servicios de Linux, E.gramo.:

  1. Desde el punto de vista del desarrollador del conductor, ayuda a agregar conductores que aún no están en el núcleo base. Además, los desarrolladores de controladores que deben hacer que los controladores de dispositivos actualizados disponibles para las pruebas y el uso común en una gran variedad de núcleos también se beneficien. Otra ventaja de DKM es que los desarrolladores pueden probar el código de su controlador en diferentes máquinas. De hecho, esto acelera el proceso de desarrollo del conductor.
  2. Desde el punto de vista del administrador del sistema, DKMS simplifica el proceso de instalación de actualizaciones del controlador del dispositivo al kernel activo sin agregar ningún cambio a él. Por lo tanto, no necesitan esperar la llegada de un nuevo núcleo.
  3. Las correcciones o parches de errores seleccionados se pueden implementar entre actualizaciones de gran tamaño.
  4. El nuevo hardware que requiere modificación en un solo módulo se puede integrar fácilmente. Nuevamente, esto se puede lograr sin probar por completo los nuevos núcleos.

¿Qué cubriremos??

Esta guía discutirá varias terminologías relacionadas con el núcleo y específicamente lo que es DKMS.

Una revisión rápida de las terminologías

¿Cuál es el núcleo de Linux??

Es la parte central de un sistema operativo Linux. Es la interfaz principal entre los procesos que se ejecutan en el sistema operativo y su hardware. Administra funciones importantes como gestión de memoria, gestión de procesos, administración de CPU, gestión del controlador de dispositivos y llamadas al sistema y gestión de seguridad.

Espacio del núcleo
El núcleo está oculto al usuario y trabaja en su propia área llamada espacio de kernel. El usuario interactúa con el núcleo utilizando las aplicaciones de usuario como el navegador de archivos, el navegador web, etc. Estas interacciones utilizan una construcción de programación específica llamada llamada del sistema.

Árbol de origen del núcleo
Tiene todo el código fuente para controladores de kernel y dispositivos. Consiste en muchos directorios y subdirectorios como Arch, bloque, cripto, incluir, init, lib, USR, etc.

Módulos de núcleo de Linux
Los módulos del núcleo de Linux son básicamente trozos de código. Estos se pueden agregar y eliminar del núcleo según el requisito. Pueden ser incorporados o cargables. El módulo del núcleo aumenta las funciones del núcleo sin requerir un reinicio del sistema. A diferencia de Microkernels, donde agregar nuevos componentes al núcleo requiere configurar y construir un nuevo núcleo, podemos cargar y descargar componentes o módulos del sistema operativo en tiempo de ejecución. Estos módulos son controladores de dispositivos, sistemas de archivos, etc.

Después de cargar un módulo, es como una pieza de código de núcleo. Tiene los mismos privilegios y deberes que un código de núcleo normal.

Definición de DKMS

Aquí hay un extracto de la definición de DKMS que encontré aquí:

"DKMS es un marco en el que la fuente del controlador del dispositivo puede residir fuera del árbol fuente del núcleo para que sea muy fácil reconstruir los módulos a medida que actualiza los kernels."

Vamos a elaborar lo anterior. El sistema DKMS es un árbol fuera del árbol de núcleo base en el suelo. Contiene la fuente del módulo y los binarios del módulo compilado. Como resultado de esta replicación, los módulos no están acoplados al núcleo. (Aunque los módulos no están completamente desacoplados).

Primero encontré el concepto DKMS cuando compré una computadora portátil HP e instalé Ubuntu 18.04 en él. Todo estaba funcionando bien excepto por mi wifi. Mi computadora portátil no pudo localizar ningún adaptador wifi. En la configuración, el menú wifi mostró un mensaje "No se encuentra el adaptador WiFi". Comencé a buscar foros en Internet y descubrí que muchas personas estaban experimentando el mismo problema. Encontré muchas soluciones que sugieren instalar archivos de encabezado, controladores y otros paquetes.

Simplemente seguí a ciegas esas guías sin saber realmente lo que realmente querían transmitir. De todos modos, esas guías me ayudaron, y de alguna manera trabajé wifi. Pero el problema era que cada vez que actualicé mi sistema Ubuntu, surgió el mismo problema, y ​​tuve que repetir los mismos pasos de recompilar los controladores descargados. Además, tengo que solucionar el problema de la señal baja cada vez después de instalar el controlador. Incluso instalé Windows OS, y para mi sorpresa, el wifi realmente funcionaba sin problemas. Pero tengo que usar Ubuntu para mi trabajo de todos modos. Así que decidí vivir con el parche temporal que obtuve antes.

DKMS viene al rescate

Una solución reciente que acabo de encontrar que no me importaba en el pasado usó la forma DKMS. En lugar de usar el hacer o hacer instalar Comando, DKMS realiza tres operaciones en el código fuente: Agregar, crear e instalar.

Usando DKMS

Para que funcione los DKMS, la fuente del módulo debe estar presente en el sistema donde estamos construyendo el módulo, y la ruta de ubicación debe ser como '/usr/src/-/' Y recuerde que este es el primer requisito de DKMS. Otro requisito es un archivo llamado 'DKMS.conf ', que guiará cómo construir e instalar un módulo. Y solo por mencionar, los DKM ya deberían instalarse en el sistema. Una vez que todo está en su lugar, podemos agregar un módulo al árbol DKMS.

Veamos estos pasos instalando un módulo de demostración 'Demo-V0.1.alquitrán.gz ' con DKMS. Estamos haciendo esta muestra es solo con el propósito de comprender cómo funciona DKMS. Después de extraer el archivo, necesitamos 'cd' dentro de eso:

# CD Demo-V0.1/

Ahora crea un DKMS.confusión Archivo que contiene las siguientes líneas:

Make = "make -c src/kerneldir =/lib/modules/$ kernelver/build"
Clean = "make -c $ kernel_source_dir m = $ dkms_tree/$ paquete_name/$ paquete_version/construye limpio"
Built_module_name = "demo"
Built_module_location = "src"
Paquete_name = demo
Paquete_version = 0.1
Remake_initrd = "sí"
Autoinstall = sí

Ahora que nuestro DKMS.confusión El archivo está listo, podemos agregar nuestro módulo de demostración como:

# DKMS ADD -M DEMO -V 0.1

La belleza de los DKM es que podemos especificar la versión del núcleo contra la cual queremos construir o módulo como se muestra aquí:

# DKMS Build -M demo -v 0.1 -k 5.13.0-27

Si no especificamos el núcleo, DKMS construirá el módulo con la versión actual del kernel.

Si todo va bien, ahora podemos instalar el módulo usando:

# DKMS install -m demo -v 0.1

Si actualizamos nuestro núcleo o cambiamos la arquitectura de hardware, un módulo debe ser reconstruido manualmente nuevamente. Con la ayuda de DKMS, este procedimiento se vuelve redundante a medida que los DKM construyen dinámicamente estos módulos de núcleo para cada núcleo presente en el sistema.

Conclusión

Herramientas como DKMS han ayudado mucho a administradores, desarrolladores de conductores y otros reducen la tarea de gestión del núcleo. Si bien a los usuarios finales no les importa cómo funciona el sistema subyacente hasta que se cumplan sus objetivos, DKMS permite a los desarrolladores y administradores centrarse en su trabajo.