* Imagenes de instalación de las versiones estables para Mageia y OpenMandriva.

OpenMandriva: Mageia (Mageia 9) 20/Agosto/2023 - Anuncio, Descargas.

Blogdrake recomienda descargar las imágenes de instalación (iso) vía torrent para evitar corrupción de datos, aprovechar mejor su ancho de banda y mejorar la difusión de las distribuciones.

Cómo compilar módulos con DKMS

Hola a todos,

Hoy uso un driver Hasta hace poco tiempo usé un driver propietario para mi tarjeta de red inalámbrica bcm4312, y cada vez que actualizaba el kernel, tenía que compilar nuevamente el módulo para la nueva versión, entonces me pregunté ¿es posible hacerlo con dkms?, y bueeee, aquí el resultado (que es válido para compilar cualquier módulo con DKMS).

1.- El Módulo
Para esta mini-guía, utilizaré el driver propietario de Broadcom para las tarjetas con chipset BCM4311, BCM4312, BCM4321 y BCM4322, que puede ser descargado en Broadcom Corporation - Broadcom 802.11 Linux STA driver, para este módulo en Mandriva Linux 2009 hay que realizar algunas modificaciones en el código fuente, esto se trató en el siguiente post: Drivers Linux para wifi Dell (Broadcom)

2.- Paquetes necesarios:

kernel-headers
kernel-source
dkms y sus dependencias.

Para instalar en Mandriva Linux, basta con poner en una consola como root:

urpmi dkms
urpmi kernel-desktop-latest
urpmi kernel-source-latest
urpmi kernel-headers

3.- Entendiendo a dkms
dkms (dynamic kernel module system), supone un sistema "independiente" del kernel que se instale para mantener actualizados tus módulos del sistema.

Para compilar un módulo usando dkms necesitamos lo siguiente:

a) El código fuente del módulo
b) Una estructura de directorios que "entienda" dkms
c) Un archivo dkms.conf por cada módulo debidamente configurado.

a) El código fuente ya lo obtuvimos de la página de Broadcom y en mi caso descargué un archivo llamado:

hybrid-portsrc-x86_64_5_10_27_6.tar.gz

b) La estructura de directorios sirve para almacenar las fuentes de forma ordenada y que dkms pueda acceder a ellas en caso de cambio de kernel o la primera compilación del módulo, por lo que las fuentes del módulo se deben almacenar en el directorio /usr/src cumpliendo con la siguiente norma:

/usr/src/nombre_del_módulo-versión_del_módulo/

en mi caso autentificado como root creo un directorio para almacenar mi módulo:

mkdir /usr/src/wl-5.10.27.6

luego copio el código fuente a la ruta anterior

cp /home/carpeta_donde_lo_bajaste/hybrid-portsrc-x86_64_5_10_27_6.tar.gz /usr/src/wl-5.10.27.6

me voy a la carpeta del módulo

cd /usr/src/wl-5.10.27.6

descomprimo

tar -xzvpf wl-5.10.27.6.tar.gz

y con esto ya tengo las fuentes dentro del directorio /usr/src/wl-5.10.27.6

c) El archivo dkms.conf en realidad son solo variables de entorno que le dirán al make y a dksm como actuar, acá toco las fundamentales, más info lo pueden ver en las manpages de dkms.

Archivo dkms.conf listo para usar:
------------

MAKE[0]="make -C /lib/modules/`uname -r`/build M=/var/lib/dkms/wl/5.10.27.6/build"
BUILT_MODULE_NAME[0]="wl"
DEST_MODULE_NAME[0]="wl"
DEST_MODULE_LOCATION[0]="/kernel/drivers"
PACKAGE_NAME="wl"
PACKAGE_VERSION="5.10.27.6"
REMAKE_INITRD="Y"
AUTOINSTALL="yes"

-----------
Lo primero que notamos es que delante de cada variable hay un corchete con un número, esto se utiliza por si compilas de un módulo a la vez (hay controladores propietarios que compilan más de 1), por lo que si tienes más de 1, tendrás que utilizar MAKE[0],MAKE[1]... MAKE[n-1], donde n es el número de módulos que vas a compilar.

En este caso es solo uno, y en varios casos así lo será

MAKE[n-1]= indica los parámetros que deben pasarse al comando make, en el caso de este driver propietario de Broadcom, esta línea está especificada en el archivo README.TXT como instrucción para su correcta compilación, en la gran mayoría de los casos solamente será necesario escribir "make", debido a que Broadcom fue bastante rasca en empaquetar este módulo y sus instrucciones, se tuvo que especificar manualmente la ruta en que se debería almacenar el módulo una vez compilado.

BUILT_MODULE_NAME y DEST_MODULE_NAME, como podrán adivinar es el nombre del módulo en la compilación y el nombre de destino, (se refiere al archivo .ko o ko.gz que se genera, en este caso se compila el módulo wl.ko).

DEST_MODULE_LOCATION, se refiere a qué ruta debe quedar el módulo referido al directorio /lib/modules/`uname -r` si te gusta el orden le pones otra carpeta mas idónea

PACKAGE_NAME, ¿con qué nombre te referiras a este paquete?, es el mismo nombre que le diste a la estructura de directorios ¿te acuerdas? modulo-version (en este caso wl)

PACKAGE_VERSION, igual que en el paso anterior, la versión del módulo, que debe ser igual a la que le pusiste al código fuente del módulo.

REMAKE_INITRD, ¿algo más que decir?, "Y" si quieres recompilar el INITRD, si no, pon cualquier otra cosa, o símplemente bórralo.

AUTOINSTALL, si pones "yes" le dices a DKMS que si hay algún cambio de kernel, instale el módulo automáticamente. (y es lo que más nos interesa ¿no?).

Y listo con el dkms.conf

Luego sólo debemos realizar 3 pasos:

1) Crear una estructura de archivos del módulo en el árbol de dkms

dkms add -m nombredelmodulo -v version

2) Compilar el módulo

dkms build -m nombremodulo -v version

3) Instalar el módulo

dkms install -m nombremodulo -v version

O si quieres, hacerlo en 1 solo paso , (ejemplifico con el modulo wl)

dkms add -m wl -v 5.10.27.6 && dkms build -m wl -v 5.10.27.6 && dkms install -m wl -v 5.10.27.6

Y listo!...

Luego cuando quieran actualizar a otro kernel, asegúrense antes de reiniciar con la nueva versión de haber instalado también las fuentes de este... y dkms se encargará del resto tendrás funcionando todo como siempre!.

Si quieren eliminar un módulo de dkms ejecuten:

dkms remove -m nombredelmodulo -v version --all

Saludos!