¿Cómo enumerar todos los módulos de kernel cargables?

66

Estoy buscando algunos módulos de kernel para cargar i2c-devy i2c-bcm2708. Pero el modprobecomando regresa:

sudo modprobe i2c-dev
modprobe: module i2c-dev not found in modules.dep

¿Cómo puedo enumerar todos los módulos disponibles en el sistema? ¿En qué directorio se encuentran?

UserK
fuente
1
El núcleo no compiló este i2c-dev. No encontró este módulo. Los módulos del núcleo se encuentran / lib / modules / 'kernel-version' / drivers. Cuando buscas controladores de Linux.
Sorpresa
Puede verificar / boot / config-'kernel-version 'y leer este archivo de configuración. Debe saber qué módulos de Linux están cargados o modulares o durante la compilación del kernel no habilitó el módulo i2c-dev.
Sorpresa

Respuestas:

77
  • Por defecto modprobecarga módulos de subdirectorios ubicados en el /lib/modules/$(uname -r)directorio. Por lo general, todos los archivos tienen extensión .ko, por lo que puede enumerarlos con

    find /lib/modules/$(uname -r) -type f -name '*.ko'
    

    o, teniendo en cuenta los archivos comprimidos:

    find /lib/modules/$(uname -r) -type f -name '*.ko*'
    
  • Sin embargo, para cargar un módulo con éxito modprobenecesita sus dependencias enumeradas en el archivo /lib/modules/$(uname -r)/modules.dep(y una versión binaria correspondiente modules.dep.bin). Si algún módulo está presente en el sistema, pero no está en la lista, entonces debe ejecutar un comando depmodque generará tales dependencias e incluirá automáticamente su módulo a modules.depy modules.dep.bin.

  • Además, si el módulo se carga correctamente, aparecerá en la lista del archivo /proc/modules(también se accede mediante un comando lsmod).

jimmij
fuente
3
Los archivos de los módulos Redhat 7 están comprimidos en .xz (no estoy seguro si es debido a la versión del kernel o la versión del sistema operativo ... si alguien me lo puede aclarar), así que creo que es posible que no los encuentre con el comando find de jimmij. Usar en su lugar find /lib/modules/$(uname -r) -type f -name *.ko*
Pozinux el
1
@Pozinux Descubrí lo mismo aquí en Arch Linux en 4.13.10, que tiene el final.gz
Johann
1
@posinux: cuidado: el shell puede expandir *.ko*si tienes en tu directorio actual algún archivo que coincida. mejor escapar entre comillas simples: find /lib/modules/$(uname -r) -type f -name '*.ko*'
Olivier Dulac
10

Escriba modprobey presione la pestaña, la lista de autocompletar debe contener todos los módulos cargables

Martin Hansen
fuente
11
no funciona para algunos sistemas
avtomaton
5

Hay lsmodmando del kmodpaquete en Arch Linux lo enumera y muestra el estado de los módulos del núcleo que contiene otros comandos útiles tales como modinfo, rmmod modprobetambién.

Para l ist todos los binarios proporcionados por el paquete se puede escribir:

pacman -Ql kmod | grep /bin/ --color=always

, y también puede verificar el paquete o wner de un binario con pacman -Qo lsmod.


Qinterruptor es q uery paquetes instalados localmente (a diferencia Sde s ynchronize, es decir. para comprobar de forma remota).


fuente
2
Donde es importante resaltar que lsmodsolo muestra los módulos ya cargados. El autor de este hilo tuvo el problema de cargar un módulo que no estaba en el mapa de los módulos del núcleo cargables. Además, esta solución solo se aplica a archlinux. Lo que podría no ser la distribución del Autor y podría no resolver el problema para otros.
Akendo
@Akendo lsmodtambién está disponible en Ubuntu, al menos. Sin embargo, estoy de acuerdo en que esto no resuelve el problema de OP.
Melebius
2

Prefiero usar depmod. Con el comando:, depmod -av|grep MOD_NAMEsu sistema generará los módulos modules.dep / map y grep a través de él. El -vparámetro es importante para la verbosidad y -apara garantizar que todos los módulos posibles /lib/modules/se utilicen para el archivo modules.dep.

De esta manera, es posible garantizar que un módulo del núcleo solicitado se asigne al núcleo como cargable. Cuando el módulo del kernel deseado no aparece en la salida, sabe que el kernel no lo encontrará.

Akendo
fuente