Solución al error de modprobe por discrepancia de versión en el Kernel de Linux

Al gestionar módulos en un entorno Linux, uno de los errores más frecuentes al utilizar la herramienta modprobe es el siguiente:

modprobe: chdir(3.0.35-g6774ed9-dirty): No such file or directory

Este fallo indica que existe una inconsistencia entre la versión del kernel que se está ejecutando y la estructura de directorios dentro de /lib/modules/. El comando modprobe busca automáticamente los archivos de dependencias en una ruta que coincida exactamente con la cadena de versión devuelta por el sistema.

Diagnóstico del problema

Para identificar la raíz del conflicto, primero debemos verificar la versión activa del kernel mediante el comando:

uname -r
# Salida de ejemplo: 3.0.35-g6774ed9-dirty

Posteriormente, revisamos los directorios disponibles en el sistema de archivos:

ls /lib/modules/
# Salida de ejemplo: 3.0.35-2666-gbdde708

Si los nombres no coinciden exactamente, el cargador de módulos no podrá localizar los archivos .ko ni el archivo de dependencias modules.dep. Para solucionar esto, es necesario realizar una instalación correcta de los módulos desde el código fuente del kernel.

Compilación de módulos del sistema

Dentro del directorio raíz del código fuente de su kernel, puede proceder con la compilación. Existen dos enfoques principales:

  • Compilación total: Procesa todos los módulos configurados en el .config.
make modules
  • Compilación selectiva: Útil para ahorrar tiempo si solo se requiere un controlador específico (por ejemplo, drivers de red).
make M=drivers/net/wireless/ modules

Instalación en la ruta del sistema

Una vez finalizada la compilación, se deben desplegar los archivos en el destino correspondiente.

Instalación por defecto

Si se ejecuta el comando de instalación de forma simple, los módulos se ubicarán en /lib/modules/$(KERNELRELEASE)/ del sistema anfitrión:

sudo make modules_install

Instalación en una ruta personalizada

En el desarrollo de sistemas embebidos, es habitual instalar los módulos en una ruta temporal o directamente en el sistema de archivos del objetivo (rootfs):

export DESTINO_ROOTFS=~/proyecto/rootfs
make modules_install INSTALL_MOD_PATH=$DESTINO_ROOTFS

Verificación de la estructura generada

Tras completar la instalación, el sistema generará una jerarquía organizada dentro del directorio de la versión correspondiente. Un ejemplo de la estructura resultante sería:

$ ls -R ~/proyecto/rootfs/lib/modules/3.0.35-g6774ed9-dirty
kernel/   modules.alias      modules.dep      modules.symbols
build/    modules.builtin    modules.order    source/

# Los archivos binarios (.ko) se ubican bajo la subcarpeta kernel/
$ find kernel/ -name "*.ko"
kernel/drivers/usb/gadget/g_mass_storage.ko
kernel/fs/nls/nls_utf8.ko
kernel/net/wireless/cfg80211.ko

El archivo modules.dep es crítico, ya que contiene el mapa de dependencias que permite a modprobe cargar módulos adicionales requeridos de forma automática. Si este archivo no existe, puede intentar generarlo manualmente en el sistema objetivo utilizando el comando depmod -a.

Etiquetas: linux-kernel modprobe kernel-modules embedded-linux make

Publicado el 6-10 16:27