我很好奇有没有办法确定是否加载/安装了特定模块。
$ lsmod列出所有模块(加载了设备驱动程序)。
如果轮询模块名称,有没有办法检查或返回true / false布尔输出的命令。例如。如果keyboard.o存在则返回true,否则返回false。我需要这个提示来完成我的驱动程序自动刷新程序。
PS:试过modinfo。我在我的测试DUT中使用busybox客户端,那么除了modinfo之外你能给出一些替代方案吗?
答案 0 :(得分:20)
不确定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
答案 1 :(得分:20)
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
答案 2 :(得分:6)
如果已加载模块,则--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
位于/usr/sbin
,除非您是root用户,否则该$PATH
不在modprobe
。在这种情况下,您必须在上面用/usr/sbin/modprobe
代替dataFilter
。
答案 3 :(得分:6)
我写了这个:
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
时也是唯一可行的名称。
答案 4 :(得分:4)
更好的想法是创建一个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
答案 5 :(得分:3)
查找给定模块是否实际加载的简短方法:
cat /proc/modules | grep -c nfnetlink
输出
2
2
(两个)表示模块已加载。不带-c
的实际输出显示所有已加载的具有MODULENAME的模块--c
对包含MODULENAME的行进行计数。因此,如果您有0
(零)行作为输出,则模块不会加载
答案 6 :(得分: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
答案 7 :(得分:0)
module list
返回:
Currently Loaded Modulefiles:
1) /coverm/0.3.0 2) /parallel/20180222
答案 8 :(得分:0)
grep -wEq "^${module%.o}" /proc/modules
无论您要求 keyboard
还是 keyboard.o