MODPROBE(8) | Linux Module Support | MODPROBE(8) |
名前¶
modprobe - ローダブルモジュールの高レベル管理
書式¶
modprobe
[-adnqv] [-C config] module [symbol=value ...]
modprobe [-adnqv] [-C config] [-t type]
pattern
modprobe -l [-C config] [-t type] pattern
modprobe -c [-C config]
modprobe -r [-dnv] [-C config] [module ...]
modprobe -Vh
このマニュアルについて¶
このマニュアルは、Linux Kernel 2.4 の時代に使われていた modutils パッケージの modprobe の説明で、古いものです。現在ではたいていの場合、 kmod パッケージの modprobe が使われています。(2022/12/02, Linux JM Project)
オプション¶
- -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/*
関連項目¶
セーフモード¶
実効 UID が 実 UID と異なる場合、 modprobe は入力を非常に慎重に扱う。 最後のパラメータは(たとえ'-'で始まっていても)モジュール名として扱われる。 一つのモジュール名だけが指定でき、"変数=値"の形のオプション指定は禁止される。 モジュール名は常に文字列として扱われ、セーフモードではメタ展開は行われない。 しかし、設定ファイルから読み込んだデータはメタ展開を行う。
modprobe がカーネルから起動された場合、実効 UID は実 UID と異なるかもしれない。 これはカーネルが 2.4.0-test11 以上の時に真となる。 理想的な世界では modprobe は カーネルが正しいパラメータだけを modprobe に渡すと信用することが出来た。 しかし高レベルカーネルコードは未検証のパラメータを直接ユーザーから modprobe に渡すので、 少なくとも一つのローカル root exploit が発生する。 それで、もはや modprobe はカーネルからの入力を信用しない。
modprobe は環境変数が以下の文字列しか含まない場合、 自動的にセーフモードとなる。
これは昔のカーネルのように実 UID と実効 UID が同じであっても、 カーネル 2.2 から 2.4.0-test11 までの カーネルから modprobe が起動されたことを検出する。
HOME=/
TERM=linux
PATH=/sbin:/usr/sbin:/bin:/usr/bin
ログ記録コマンド¶
/var/log/ksymoops ディレクトリが存在し、modprobe がモジュールを 読み込み・削除できるようなオプションを付けて起動されていた場合、 modprobe は実行したコマンドと返り値を /var/log/ksymoops/`date +%Y%m%d.log` のファイル名で記録する。 この自動ログ記録を停止するオプションはない。 もしこのような記録をさせたくなければ、 /var/log/ksymoops ディレクトリを作らなければよい。 もしディレクトリを作るなら、root が所有してモードは 644 か 600 にし、 毎日ぐらいのペースで insmod_ksymoops_clean を実行するべきである。
必要なユーティリティ¶
注意¶
modprobe に与えるパターンが (シェルによって解釈されずに) 意図通りに解釈されるようにするには、 パターンにエスケープが必要となることが多いだろう。
バグ¶
modprobe [ -V | --version ] は直ちに終了するべきである。 しかしながら、現在はバージョン情報を表示した後、 何もオプションが指定されなかったかのように振舞う。
著者¶
Jacques Gelinas (jack@solucorp.qc.ca)
Bjorn Ekwall (bj0rn@blox.se)
February 4, 2002 | Linux |