web-dev-qa-db-ja.com

特定のモジュールがLinuxカーネルにロードされているかどうかを確認する方法

特定のモジュールがロード/インストールされているかどうかを判断する方法があるのか​​興味があります。

$ lsmodはすべてのモジュールをリストします(デバイスドライバーがロードされます)。

モジュール名がポーリングされた場合、trueまたはfalseのブール出力を返すコマンドまたはコマンドを確認する方法はありますか。例えばkeyboard.oが存在する場合はtrue、そうでない場合はfalseを返します。ドライバーの自動更新プログラムを完了するには、このヒントが必要です。

PS:modinfoを試しました。テストDUTでbusyboxクライアントを使用しているので、modinfo以外の選択肢を提供できますか?

31
Dennis Ninj

かどうか分からない 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

22
johnshen64

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
22
basfest

私はこれを書いた:

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を使用する場合は、それだけが機能します。

8
Nobody

モジュールが既にロードされている場合、--first-timeフラグにより​​modprobeが失敗します。 --dry-run(または-nの省略形)フラグと組み合わせて、Niceテストを作成します。

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にはありません。その場合、上記の/usr/sbin/modprobemodprobeに置き換える必要があります。

7
jpath

より良いアイデアは、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
Mostafa
 !/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
1
ronald