44

我只是好奇是否有任何方法可以确定是否加载/安装了特定模块。

$lsmod 列出所有模块(加载的设备驱动程序)。

如果轮询模块名称,是否有任何方法可以检查或返回真/假布尔输出的命令。例如。如果keyboard.o 存在,则返回true,否则返回false。我需要这个提示来完成我的驱动程序自动刷新程序。

PS:试过modinfo。我在我的测试 DUT 中使用了 busybox 客户端,所以你能提供一些除 modinfo 之外的替代方案吗?

4

9 回答 9

36

modinfo module方法对我来说效果不佳。我更喜欢这种类似于建议的替代方法的方法:

#!/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
于 2012-12-21T17:55:28.920 回答
26

不确定modinfo modname和检查$?是否对您有用,只是一个建议。

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

或者你也grep/proc/modules

于 2012-03-23T20:13:34.470 回答
12

如果模块已经加载,该--first-time标志会导致失败。modprobe--dry-run(或简写-n)标志结合使用是一个很好的测试:

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

编辑1:正如@Nobody 指出的,Loaded如果模块不存在,这也会打印出来。我们可以通过结合它来解决这个问题modinfo

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

编辑2:在某些系统modprobe上,除非您是root用户,否则/usr/sbin它不在。$PATH在这种情况下,您必须替换modprobe上述/usr/sbin/modprobe内容。

于 2015-05-18T19:50:43.153 回答
9

我写了这个:

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

它签入/proc/modules。如果那里提到了模块,则假定它已加载,否则不会。

其他的对我来说似乎太长了(另一个短的需要root,这不需要)。当然,它只是写出了已经提到的“替代品”。

注意:modprobe接受模块名称的一些变体,而不是/proc/modules. 例如加载snd-aloop工作,但是模块被命名并在使用时snd_aloop这样列出,这也是唯一可以工作的名称。/proc/modulesrmmod

于 2016-11-15T16:16:29.417 回答
5

更好的主意是创建一个 bash 函数:

#!/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
于 2014-09-27T08:16:55.633 回答
5

我查找给定模块是否实际加载的捷径:

cat /proc/modules | grep -c nfnetlink

哪个输出

2

2(TWO) 表示模块已加载。实际输出不-c显示所有已加载的带有 MODULENAME 的模块 --c计算包含 MODULENAME 的行。因此,如果您有0(零)行作为输出,则不会加载模块

于 2020-10-05T21:25:54.707 回答
2
 !/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
于 2014-05-15T20:27:48.020 回答
0
module list 

回报:

Currently Loaded Modulefiles:
  1) /coverm/0.3.0        2) /parallel/20180222
于 2019-10-22T04:15:06.820 回答
0
grep -wEq "^${module%.o}" /proc/modules

无论您要求keyboardkeyboard.o

于 2020-12-21T20:14:18.627 回答