MODPROBE(8) | Linux Module Support | MODPROBE(8) |
名前
modprobe -ローダブルモジュールの高レベル管理書式
modprobe [-adnqv] [-C config] module [symbol=value ...]オプション
- -a, --all
- 最初にロードに成功した後に停止するのではなく、マッチしたモジュールを すべてロードする。
- -c, --showconfig
- 現在用いられている設定を表示する。
- -C, --config config
- 設定ファイルを /etc/modules.conf ではなく config にする。 ( /etc/modules.conf はなくてもよい)。環境変数 MODULECONF でも設定ファイルを /etc/modules.conf (あるいは推奨しないが /etc/conf.modules) から変更できる。
- 環境変数
- UNAME_MACHINE をセットすると、modutils は uname() システムコールの machine フィールドの代わりにこの変数の値を用いる。これは主に 32 ビットユーザー空間で 64 ビットモジュールをコンパイルする (またはその逆)場合に用いる。現在の modutils はモジュールに対する完全なクロスビルドモードに対応しておらず、ホストアーキテクチャの 32 ビット版と 64 ビット版を選択できるだけである。
- -d, --debug
- モジュールのスタックの内部表現に関する情報を表示する。
- -h, --help
- オプションの一覧を表示して直ちに終了する。
- -k, --autoclean
- ロード済みのモジュールに "autoclean"を設定する。カーネルが modprobe に足りない機能をモジュールとして提供するよう依頼するときに用いられる。 -k オプションを指定すると、自動的に -q オプションも有効になる。これらのオプションは自動的に insmod に送られる。
- -l, --list
- マッチするモジュールをリストする。
- -n, --show
- 実際には動作を行わず、何が行われるかを表示する。
- -q, --quiet
- insmod がモジュールのインストールに失敗しても報告しない。黙って他の可能性を試しながら通常のように継続する。このオプションは自動的に insmod に送られる。
- -r, --remove
- コマンドラインでモジュールが指定されればモジュール (のスタック) を削除する。されなければ autoclean を実行する。
- -s, --syslog
- 標準エラー出力にではなく syslog を経由してレポートする。このオプションは自動的に insmod に送られる。
- -t moduletype; --type moduletype
- 指定したタイプのモジュールだけを扱う。 modprobe は、ディレクトリパスに "/ moduletype/"をこの形で含むモジュールだけしか対象にしない。 moduletype にはディレクトリを複数の階層で指定しても良い。例えば " -t drivers/net"とすれば、 xxx/drivers/net/ およびそのサブディレクトリにあるモジュールだけを対象にする。
- -v, --verbose
- すべてのコマンドを、実行される通りに表示する。
- -V, --version
- modprobe のバージョンを表示する。
- 注意:
- モジュール名にはパス ('/') や末尾の '.o' を含めてはならない。例えば、 'slip' は modprobe に対する正当なモジュール名だが、これはコマンドラインと設定ファイルの両方に適用されるルールである。
説明
modprobe と depmodは、Linux のモジュール化されたカーネルを、あらゆるユーザー、管理者、ディストリビューションの作成者にとってより管理しやすいものにするために作成された。modprobe は Makefile に似た形式で依存関係を記述したファイルを用いる。これは depmod によって作成されるもので、あらかじめ定められたディレクトリツリーに置かれたモジュールのセットから、関連するファイル (群) を自動的にロードするためのものである。
modprobeはモジュールのセット (単一のモジュールであることも、依存関係にあるモジュールのスタックであることもある) のロードに用いられる。また、特定のタグがつけられたすべてのモジュールをロードするのにも用いられる。
modprobeはモジュールスタックに必要とされるベースモジュールを、依存関係を記述したファイル modules.dep の記述にしたがってすべてロードする。これらのモジュールのどれかをロードできないと、現在のセッションでロードされたモジュールスタックの全体が自動的にアンロードされることになる。
modprobeがモジュールをロードするやりかたは 2 種類ある。ひとつめ (プローブモード) は、 ( pattern で定義された) リストからモジュールをロードしようとする。モジュールがひとつロードできると、 modprobeはただちに停止する。これはイーサネットドライバのリストからモジュールをひとつロードするような場合に利用できるだろう。
もうひとつの方では、 modprobeはリストの すべてのモジュールをロードする。以下の「 例」の記述を参照のこと。
-rオプションをつけると、 modprobe は自動的にモジュールのスタックをアンロードする(" rmmod -r"と同様)。 " modprobe -r"とだけすると、使われていない autoload されたモジュールを削除すると同時に、設定ファイル /etc/modules.conf の記述にしたがって削除の前処理・後処理用のコマンドを実行する。
-l オプションと -tオプションを同時に指定すると、利用可能なすべてのモジュールのうち、特定のタイプのものだけが表示される。
-cオプションを指定すると、現在用いられている設定が表示される (デフォルト + 設定ファイル)。
設定
modprobe(と depmod)の動作は、設定ファイル /etc/modules.confによって変更できる (このファイルはなくてもよい)。このファイルに記述できる内容の詳細や、 depmodと modprobeが用いるデフォルトの設定に関しては modules.conf(5)を参照のこと。
モジュールがカーネルによって "autoload"された場合は、削除の前処理・後処理のコマンドは 実行されないことに注意。将来サポートされる予定の「永続型モジュール保存 (persistent module storage)」に期待して欲しい。
削除の前後処理の機能を用いたい場合は、 kerneld の autoload を使わないようにして、以下のような行を crontab に書きこむ必要がある (これは kmod システムによっても用いられる)。以下では autoclean を 2 分おきに行っている。
*/2 * * * * test -f /proc/modules && /sbin/modprobe -r
動作ルール
modprobeは、現在のカーネルリリース向けにコンパイルされたモジュールを含むディレクトリをまず最初に見る。そこにモジュールがなければ、 modprobeはカーネルバージョンに共通のディレクトリ (2.0, 2.2 など) を見る。そこにもモジュールがなければ、デフォルトのリリース以外のモジュールを含むディレクトリを見る。新しい Linux をインストールしたときは、モジュールをそのカーネルのリリース (とバージョン) に対応したディレクトリに移動すべきである。そしてこのディレクトリから「デフォルト」のディレクトリにシンボリックリンクをはるようにする。
新しいカーネルをコンパイルして" make modules_install"コマンドを実行すると、新しいディレクトリは作成するが、「デフォルト」のリンクは変更しない。
カーネルの配布に含まれないモジュールを入手したら、それは /lib/modules 以下のバージョンには依存しないディレクトリに配置するとよい。
以上がデフォルトの動作であるが、これは /etc/modules.conf の記述によって変更できる。
例
- modprobe -t net
- "net"という名前のディレクトリにあるモジュールのどれかひとつをロードする。どれかのモジュールのロードに成功するまで、各モジュールがひとつづつ試みられる。
- modprobe -a -t boot
- "boot"という名前のディレクトリにあるすべてのモジュールがロードされる。
- modprobe slip
- これを実行すると、 s1hc.o というモジュールがまだロードされていなければロードしようとする。 slip モジュールには s1hc モジュールの機能が必要だからである。この依存関係は、 depmodによって (これ以前に) 自動的に生成された modules.dep というファイルに記述されている。
- modprobe -r slip
- slip モジュールをアンロードする。 s1hc モジュールも自動的にアンロードする (ただし ppp のような他のモジュールによって利用されていない場合)。
ファイル
/etc/modules.conf( /etc/conf.modulesも使えるが推奨しない)
/lib/modules/*/modules.dep, /lib/modules/*
関連項目
depmod(8), lsmod(8), kerneld(8), ksyms(8), rmmod(8)セーフモード
実効 UID が実 UID と異なる場合、 modprobe は入力を非常に慎重に扱う。最後のパラメータは(たとえ'-'で始まっていても)モジュール名として扱われる。一つのモジュール名だけが指定でき、"変数=値"の形のオプション指定は禁止される。モジュール名は常に文字列として扱われ、セーフモードではメタ展開は行われない。しかし、設定ファイルから読み込んだデータはメタ展開を行う。modprobe がカーネルから起動された場合、実効 UID は実 UID と異なるかもしれない。これはカーネルが 2.4.0-test11 以上の時に真となる。理想的な世界では modprobe はカーネルが正しいパラメータだけを modprobe に渡すと信用することが出来た。しかし高レベルカーネルコードは未検証のパラメータを直接ユーザーから modprobe に渡すので、少なくとも一つのローカル root exploit が発生する。それで、もはや modprobe はカーネルからの入力を信用しない。
modprobe は環境変数が以下の文字列しか含まない場合、自動的にセーフモードとなる。
HOME=/
TERM=linux
PATH=/sbin:/usr/sbin:/bin:/usr/bin
これは昔のカーネルのように実 UID と実効 UID が同じであっても、カーネル 2.2 から 2.4.0-test11 までのカーネルから modprobe が起動されたことを検出する。
ログ記録コマンド
/var/log/ksymoops ディレクトリが存在し、 modprobe がモジュールを読み込み・削除できるようなオプションを付けて起動されていた場合、 modprobe は実行したコマンドと返り値を /var/log/ksymoops/`date +%Y%m%d.log` のファイル名で記録する。この自動ログ記録を停止するオプションはない。もしこのような記録をさせたくなければ、 /var/log/ksymoops ディレクトリを作らなければよい。もしディレクトリを作るなら、root が所有してモードは 644 か 600 にし、毎日ぐらいのペースで insmod_ksymoops_clean を実行するべきである。必要なユーティリティ
depmod(8), insmod(8)注意
modprobe に与えるパターンが (シェルによって解釈されずに) 意図通りに解釈されるようにするには、パターンにエスケープが必要となることが多いだろう。バグ
modprobe [ -V | --version ] は直ちに終了するべきである。しかしながら、現在はバージョン情報を表示した後、何もオプションが指定されなかったかのように振舞う。著者
Jacques Gelinas (jack@solucorp.qc.ca)February 4, 2002 | Linux |