Dennis Ninj
Dennis Ninj

Reputation: 919

How to determine if a specific module is loaded in linux kernel

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

Answers (10)

basfest
basfest

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

why so serious
why so serious

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

usretc
usretc

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

1000Gbps
1000Gbps

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

Mostafa Barmshory
Mostafa Barmshory

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

MeggyClay
MeggyClay

Reputation: 21

module list 

Returns:

Currently Loaded Modulefiles:
  1) /coverm/0.3.0        2) /parallel/20180222

Upvotes: 0

Nobody
Nobody

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

Julia Path
Julia Path

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

ronald
ronald

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

johnshen64
johnshen64

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

Related Questions