DKMS, qué es y como se usa

Retomando el tema de los drivers Wi-Fi. Compilaste el driver wifi para el kernel, OK. Funciona, OK. Te has preguntado que pasaría si actualizas el kernel???

Actualizando el kernel, deja de funcionar el driver o los drivers que hayas compilado, pero… Y si quisiera instalar el driver de alguna manera que, aún actualizando, se mantenga activo y funcionando.

Ahí es donde entra DKMS…

Tomado de wikipedia:

Dynamic Kernel Module Support (DKMS) es un framework usado para generar módulos del núcleo Linux cuyas fuentes no suelen residir en el árbol fuente del núcleo Linux. DKMS habilita controladores de núcleo para ser automáticamente reconstruidos cuando un nuevo núcleo es instalado, lo que hace posible usar un nuevo núcleo inmediatamente, en lugar de esperar que módulos compatibles de terceras partes para ser liberado.

Investigando un poco, casi todos los drivers actuales, vienen con DKMS, sólo hay que leerse las instrucciones y seguirlas al pie de la letra, para que todo funcione como se espera.

Antes de proseguir debemos instalar dkms:

apt install dkms

Tomando como ejemplo el post anterior seguimos adelante. Descargándonos el código fuente del controlador RTL8812AU:

# cd /home/koratsuki/Downloads/
# git clone https://github.com/gordboy/rtl8812au.git
# mv rtl8812au-master /home/koratsuki/Temp/compile
# cd /home/koratsuki/Temp/compile/rtl8812au-master
# cat README.md

Debemos leer las instrucciones que hay en el archivo README.md. Y siguiendo esas líneas:

root@happyharry:/home/koratsuki/Temp/compile/rtl8812au-master# mkdir -p /usr/src/rtl8812au-5.2.20
root@happyharry:/home/koratsuki/Temp/compile/rtl8812au-master# cp * /usr/src/rtl8812au-5.2.20
root@happyharry:/home/koratsuki/Temp/compile/rtl8812au-master# dkms add -m rtl8812au -v 5.2.20

Creating symlink /var/lib/dkms/rtl8812au/5.2.20/source ->
                 /usr/src/rtl8812au-5.2.20

DKMS: add completed.
root@happyharry:/home/koratsuki/Temp/compile/rtl8812au-master# dkms build -m rtl8812au -v 5.2.20

Kernel preparation unnecessary for this kernel.  Skipping...

Building module:
cleaning build area...
'make' -j4 KVER=4.15.0-29deepin-generic KSRC=/lib/modules/4.15.0-29deepin-generic/build..................
cleaning build area...

DKMS: build completed.
root@happyharry:/home/koratsuki/Temp/compile/rtl8812au-master# dkms install -m rtl8812au -v 5.2.20

8812au:
Running module version sanity check.

Good news! Module version v5.2.20.2_28373.20180619 for 8812au.ko
exactly matches what is already found in kernel 4.15.0-29deepin-generic.
DKMS will not replace this module.
You may override by specifying --force.

depmod.....

DKMS: install completed.

Como podemos ver, DKMS crea una estructura con la cual, guardando el driver en /usr/src, compila el driver y prepara el sistema para que ante actualizaciones, sólo compile automaticamente el driver sin necesidad de intervencion por parte del usuario.

Nada difícil, como podemos ver… Y buscando en /lib/modules/4.15.0-29deepin-generic/kernel/drivers/net/wireless, vemos nuestro driver recién compilado.

Ahora con:

# modinfo 8812au

Podemos ver todas las propiedades del driver.

Hasta aquí el post. Espero les haya sido de ayuda.

2 comentarios de “DKMS, qué es y como se usa

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *