modulos modprobe lsmod compilar como comando cargar unix linux-kernel insmod

unix - modprobe - Cómo determinar si un módulo específico está cargado en el kernel de Linux



como cargar un modulo en linux (6)

Estoy curioso, hay alguna forma de determinar si un módulo en particular está cargado / instalado.

$ lsmod enumera todos los módulos (controlador de dispositivo cargado).

¿Hay alguna forma de verificar o un comando que devuelva un resultado booleano verdadero / falso si se sondea un nombre de módulo? por ej. si existe keyboard.o, devuelve true si no false. Necesito este consejo para completar mi programa de actualización automática del controlador.

PD: intentado modinfo. Estoy usando el cliente de busybox en mi prueba DUT, ¿puede dar otras alternativas además de modinfo?


El indicador de la primera --first-time hace que modprobe falle si el módulo ya está cargado. Esto, junto con la --dry-run (o la abreviatura -n ) hace una buena prueba:

modprobe -n --first-time $MODULE && echo "Not loaded" || echo "Loaded"

Edición 1: Como @Nobody señaló, esto también imprime Loaded si el módulo no existe. Podemos arreglar esto combinándolo con modinfo :

modinfo $MODULE >/dev/null 2>/dev/null && ! modprobe -n --first-time $MODULE 2>/dev/null && echo "Loaded" || echo "Not loaded"

Edición 2: en algunos sistemas, modprobe vive en /usr/sbin , que no está en $PATH menos que sea root. En ese caso, debe sustituir modprobe por /usr/sbin/modprobe en el /usr/sbin/modprobe anterior.


El método del modinfo module no funciona bien para mí. Prefiero este método que es similar al método alternativo propuesto:

#!/bin/sh MODULE="$1" if lsmod | grep "$MODULE" &> /dev/null ; then echo "$MODULE is loaded!" exit 0 else echo "$MODULE is not loaded!" exit 1 fi


La mejor idea es crear una función bash:

#!/bin/sh function checkModule(){ MODULE="$1" if lsmod | grep "$MODULE" &> /dev/null ; then echo "$MODULE is loaded!" return 0 else echo "$MODULE is not loaded!" return 1 fi } checkModule if $?; then #do somthing fi


Yo escribí esto:

MODULE=snd_aloop # for example test -n "$(grep -e "^$MODULE " /proc/modules)" && echo "Loaded" || echo "Not loaded"

Se comprueba en /proc/modules . Si el módulo se menciona allí, se supone que está cargado, de lo contrario no.

Los otros me parecieron demasiado largos (el otro corto requiere root, esto no lo hace). Por supuesto, se acaba de escribir lo que ya se mencionó como "alternativas".

Precaución: modprobe acepta algunas variantes de nombres de módulos distintos de los principales enumerados en /proc/modules . Por ejemplo, la carga de snd-aloop funciona, pero el módulo se llama snd_aloop y aparece como tal en /proc/modules y cuando se usa rmmod , también es el único nombre que funcionará.


No estoy seguro si modinfo modname y chequeando $? trabajará para usted, sólo una sugerencia.

/tmp$ sudo modinfo e1000 /tmp$ echo $? 0 /tmp$ sudo modinfo keyboard ERROR: modinfo: could not find module keyboard /tmp$ echo $? 1

alternativamente también grep /proc/modules


!/bin/sh # Module MODULE="scsi_dh_rdac" #Variables check if module loaded or not MODEXIST=/sbin/lsmod | grep "$MODULE" if [ -z "$MODEXIST" ]; then /sbin/modprobe "$MODULE" >/dev/null 2>&1 fi