Reputation: 919
I am just curious is there any way to determine if a particular module is loaded/installed.
$ lsmod lists all modules (device driver loaded).
Is there any way to check or a command that returns true/false boolean output if a module name is polled. For eg. if keyboard.o exists return true else false. I need this tip to complete my driver auto refresh program.
PS: tried modinfo. I am using busybox client in my test DUT so can you give some alternatives other than modinfo?
Upvotes: 66
Views: 167358
Reputation: 609
The modinfo module
method does not work well for me. I prefer this method that is similar to the alternative method proposed:
#!/bin/sh
MODULE="$1"
if lsmod | grep -wq "$MODULE"; then
echo "$MODULE is loaded!"
exit 0
else
echo "$MODULE is not loaded!"
exit 1
fi
Upvotes: 46
Reputation: 51
grep -q $pattern
against lsmod
or /proc/modules
, which are available on most systems and a standard "source of truth"
lsmod | grep -q $pattern
$ lsmod | grep -q msr
$ echo $?
0
$ lsmod | grep -q duediligencemuch
$ echo $?
1
Upvotes: 0
Reputation: 834
grep -wEq "^${module%.o}" /proc/modules
returns true (e.g. can be used in an if) whether you ask for keyboard
or keyboard.o
Upvotes: 0
Reputation: 1517
My short way to find if a given module is actually loaded:
cat /proc/modules | grep -c nfnetlink
which outputs
2
That 2
(TWO) means the module is LOADED. The actual output without -c
shows all loaded modules with MODULENAME - -c
counts the lines that contain MODULENAME. So if you have 0
(ZERO) lines as output then the module is not loaded
Upvotes: 9
Reputation: 2039
The better idea is to create a bash function:
#!/bin/sh
function moduleExist(){
MODULE="$1"
if lsmod | grep "$MODULE" &> /dev/null ; then
return 0
else
return 1
fi
}
if moduleExist "module name"; then
#do somthing
fi
Upvotes: 7
Reputation: 21
module list
Returns:
Currently Loaded Modulefiles:
1) /coverm/0.3.0 2) /parallel/20180222
Upvotes: 0
Reputation: 189
I wrote this:
MODULE=snd_aloop # for example
test -n "$(grep -e "^$MODULE " /proc/modules)" && echo "Loaded" || echo "Not loaded"
It checks in /proc/modules
. If the module is mentioned there, it's assumed to be loaded, otherwise not.
The others seemed too long to me (the other short one requires root, this does not). Of course it's just written out what was already mentioned as "alternatives".
Caution: modprobe
accepts some variants of module names other than the primary listed in /proc/modules
. For example loading snd-aloop
works, but the module is named snd_aloop
and is listed as such in /proc/modules
and when using rmmod
that's also the only name that will work.
Upvotes: 9
Reputation: 2366
The --first-time
flag causes modprobe
to fail if the module is already loaded. That in conjunction with the --dry-run
(or the shorthand -n
) flag makes a nice test:
modprobe -n --first-time $MODULE && echo "Not loaded" || echo "Loaded"
Edit 1: As @Nobody pointed out this also prints Loaded
if the module does not exist. We can fix this by combining it with modinfo
:
modinfo $MODULE >/dev/null 2>/dev/null &&
! modprobe -n --first-time $MODULE 2>/dev/null &&
echo "Loaded" || echo "Not loaded"
Edit 2: On some systems modprobe
lives in /usr/sbin
, which is not in the $PATH
unless you are root. In that case you have to substitute modprobe
for /usr/sbin/modprobe
in the above.
Upvotes: 19
Reputation: 21
!/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
Upvotes: 2
Reputation: 3884
not sure if modinfo modname
and checking $?
will work for you, just a suggestion.
/tmp$ sudo modinfo e1000
/tmp$ echo $?
0
/tmp$ sudo modinfo keyboard
ERROR: modinfo: could not find module keyboard
/tmp$ echo $?
1
alternatively you also grep /proc/modules
Upvotes: 30