我只是好奇,有沒有什麼方法可以確定是否加載/安裝了特定的模塊。如何確定是否在Linux內核中加載了特定的模塊
$ lsmod列出了所有模塊(加載了設備驅動程序)。
是否有任何方法檢查或返回true/false的命令布爾輸出,如果輪詢模塊名稱。例如。如果keyboard.o存在,則返回true,否則返回false。我需要此提示來完成我的驅動程序自動刷新程序。
PS:嘗試過modinfo。我在測試DUT中使用了busybox客戶端,所以你可以給modinfo以外的其他選擇嗎?
我只是好奇,有沒有什麼方法可以確定是否加載/安裝了特定的模塊。如何確定是否在Linux內核中加載了特定的模塊
$ lsmod列出了所有模塊(加載了設備驅動程序)。
是否有任何方法檢查或返回true/false的命令布爾輸出,如果輪詢模塊名稱。例如。如果keyboard.o存在,則返回true,否則返回false。我需要此提示來完成我的驅動程序自動刷新程序。
PS:嘗試過modinfo。我在測試DUT中使用了busybox客戶端,所以你可以給modinfo以外的其他選擇嗎?
不知道是否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-26 15:51:19
只需要注意:'modinfo'方法似乎實際上並不適用於_loaded_檢查(如在問題標題中)。無論模塊是否加載,它都會顯示信息。 – BeeOnRope 2016-11-14 18:26:07
的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
!/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
儘管您的答案看起來不錯,但您應該包括一點解釋。 ..明碼可能不錯,但代碼*和*解釋更好 – Barranka 2014-05-15 21:05:11
更好的想法是創建一個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
的--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
。
問題:需要root和當你爲$ MODULE輸入廢話時,它聲稱$ MODULE已加載。 – Nobody 2016-11-15 16:05:15
@Nobody它不需要在我的系統上安裝root。 – jpath 2017-12-03 13:13:02
噢,對不起,我只是一半的權利(或者說是四分一半的權利,對你的評論選民感到羞恥)。在Debian中,modprobe不在普通用戶的$ PATH中,所以只複製並粘貼你的命令只能作爲root用戶。但是,當以完整路徑調用modprobe時,它對普通用戶是可執行的,只有實際的插入操作失敗,所以你的解決方案原則上工作。我仍然認爲查詢/ proc/modules更加eleg螞蟻,但這是一個品味問題。如果我低估了你的回答,我會立即撤消投票(但我沒有)。 – Nobody 2017-12-03 13:30:07
我寫了這個:
MODULE=snd_aloop # for example
test -n "$(grep -e "^$MODULE " /proc/modules)" && echo "Loaded" || echo "Not loaded"
它會檢查/proc/modules
。如果在那裏提到模塊,則假定它已被加載,否則不會。
其他人似乎對我來說太長了(另一個短的需要根,這不)。當然,它只是寫出了已經提到的「替代品」。
注意:modprobe
接受除/proc/modules
中列出的主要模塊名稱以外的某些模塊名稱變體。例如加載snd-aloop
的作品,但該模塊被命名爲snd_aloop
,並在/proc/modules
中列出,當使用rmmod
時,這也是唯一可以使用的名稱。
您可能希望匹配'「^ $ MODULE \>」',以確保您不僅僅匹配模塊名稱的一部分。 – jpath 2017-12-03 16:23:54
你有權訪問grep嗎? – 2012-03-26 16:02:06
這個問題有點模棱兩可。你是否試圖檢查驅動程序是否加載到內存或安裝在系統上? modinfo將有助於後者,但不是前者。 – presto8 2013-07-16 22:31:30