我只是好奇是否有任何方法可以确定是否加载/安装了特定模块。
$lsmod 列出所有模块(加载的设备驱动程序)。
如果轮询模块名称,是否有任何方法可以检查或返回真/假布尔输出的命令。例如。如果keyboard.o 存在,则返回true,否则返回false。我需要这个提示来完成我的驱动程序自动刷新程序。
PS:试过modinfo。我在我的测试 DUT 中使用了 busybox 客户端,所以你能提供一些除 modinfo 之外的替代方案吗?
我只是好奇是否有任何方法可以确定是否加载/安装了特定模块。
$lsmod 列出所有模块(加载的设备驱动程序)。
如果轮询模块名称,是否有任何方法可以检查或返回真/假布尔输出的命令。例如。如果keyboard.o 存在,则返回true,否则返回false。我需要这个提示来完成我的驱动程序自动刷新程序。
PS:试过modinfo。我在我的测试 DUT 中使用了 busybox 客户端,所以你能提供一些除 modinfo 之外的替代方案吗?
该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
不确定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
如果模块已经加载,该--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
内容。
我写了这个:
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/modules
rmmod
更好的主意是创建一个 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
我查找给定模块是否实际加载的捷径:
cat /proc/modules | grep -c nfnetlink
哪个输出
2
那2
(TWO) 表示模块已加载。实际输出不-c
显示所有已加载的带有 MODULENAME 的模块 --c
计算包含 MODULENAME 的行。因此,如果您有0
(零)行作为输出,则不会加载模块
!/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
module list
回报:
Currently Loaded Modulefiles:
1) /coverm/0.3.0 2) /parallel/20180222
grep -wEq "^${module%.o}" /proc/modules
无论您要求keyboard
或keyboard.o