/home/lucio.albenga.es

FreeBSD, resolviendo el error: KLD i915kms.ko depends on kernel - not available or version mismatch


Nota: Hace meses escribí y publiqué este artículo sólo en inglés, pero me he decidido a traducirlo ya que el contenido puede seguir siendo de utilidad para futuras versiones del sistema y/o para problemas similares.


Tras actualizar FreeBSD 14.1 a la versión 14.2 algunas personas sufrimos algunos problemas debido a que los módulos gráficos estaban compilados sólo para la versión 14.1. Uno de los problemas que me molestaban sobremanera era el no poder acceder a las terminales virtuales.

En este tutorial veremos paso por paso como resolví el problema y me quité de encima el error "KLD i915kms.ko depends on kernel - not available or version mismatch".

Primer intento

Lo primero que hice fue buscar en Internet y averigüé que era un problema que ya le había pasado a más gente. Muchos comentaban que la solución era volver a compilar el paquete drm-61-kmod desde el ports tree de FreeBSD, así que eso fue lo primero que intenté.

Siguiendo el manual de FreeBSD1, cloné el ports tree desde el repositorio git, compilé el paquete y lo instalé:

git clone --depth 1 https://git.FreeBSD.org/ports.git /usr/ports
cd /usr/ports/graphics/drm-61-kmod/
make
make install

El sistema me devolvió un mensaje diciéndome que ya tenía el paquete instalado y cómo reinstalarlo, así que ejecuté el comando make reinstall en la terminal, reinicié el sistema y crucé los dedos. No funcionó.

Seguí buscando información sobre el tema y encontré otro hilo en el que se comentaba que también había que recompilar el paquete drm-kmod, así que lo hice:

cd /usr/ports/graphics/drm-kmod/
make
make reinstall

Esto tampoco funcionó, por lo que decidí dejar de buscar y resolverlo por mi mismo (cosa que tendría que haber hecho desde el principio). Ejecuté el comando dmesg y ví el siguiente error: KLD i915kms.ko depends on kernel - not available or version mismatch. Sabía que el módulo estaba cargado así que me puse a buscar otros paquetes, especialmente los relacionados con el i915, que tal vez fuese necesario recompilar. En mi búsqueda encontré el paquete /usr/ports/graphics/gpu-firmware-kmod así que lo recompilé y reinstalé:

cd /usr/ports/graphics/gpu-firmware-kmod/
make
make reinstall

Reinicié el sistema y el error seguía ahí.

Segundo intento

Llegados a este punto pensé: "vale, puede que algo saliera mal por compilar los módulos en el orden equivocado o lo que fuere así que voy a volver a hacerlo". Empecé por desinstalar y limpiar las compilaciones previas de los módulos:

cd /usr/ports/graphics/gpu-firmware-kmod/
make deinstall
make clean

cd ../drm-61-kmod/
make deinstall
make clean

cd ../drm-kmod/
make deinstall
make clean

Volví a compilar los módulos. En esta ocasión empecé por el drm-kmod y averigüé que este paquete compila también el drm-61-kmod. Compilé el gpu-firmware-kmod, reinstalé los módulos y reinicié otra vez el sistema. Tras el reinicio, el comando dmesg seguía mostrando el mismo error.

Solución

Si bien estoy bastante verde con FreeBSD, llevo instalando, usando y administrando sistemas GNU/Linux desde los 90 así que supuse que la solución a ese error KLD i915kms.ko depends on kernel - not available or version mismatch seguramente se solucionaría recompilando el kernel del sistema y los módulos. De este modo todo estaría en la versión correcta.

Empecé clonando el repositorio con los fuentes del kernel de FreeBSD2:

git clone https://git.FreeBSD.org/src.git

Luego hice un checkout para la versión de FreeBSD 14.2 (en el momento en el que lo hice era la etiqueta release/14.2.0-p3):

git fetch --all --tags --prune
git checkout release/14.2.0-p3

Como no uso un kernel personalizado compilé e instalé el kernel GENERIC. Si utilizas un kernel personalizado ya sabes qué pasos tienes que dar para recompilarlo.

cd /usr/src
make buildkernel KERNCONF=GENERIC
make installkernel KERNCONF=GENERIC

Una vez compilado e instalado el kernel nuevo tocaba recompilar los módulos:

cd /usr/ports/graphics/gpu-firmware-kmod/
make deinstall
make clean

cd /usr/ports/graphics/drm-61-kmod/
make deinstall
make clean

cd /usr/ports/graphics/drm-kmod/
make deinstall
make clean
make
make install

cd ../drm-61-kmod/
make install

cd ../gpu-firmware-kmod/
make
make install

Después de esto reinicié el sistema y esta vez sí, todo estaba funcionando correctamente. ¡Misión cumplida!

Conclusión

Llevaba sin compilar un kernel alrededor de dos décadas y debo decir que toda la experiencia fue divertida y me retrotrajo a aquellos maravillosos años en los que tenías que recompilar el kernel Linux para que funcionara todo tu hardware. Es probable que haya una solución mejor para este problema pero esta a mi me ha funcionado.

Notas al pie de página: