MODULES.CONF

Section: File Formats (5)
Updated: 07 December 1999
IndexJM Home Page
 

名前

modules.conf - カーネルモジュールのロードに対する設定ファイル 

説明

modprobe(8) (およびdepmod(8)) の動作は、設定ファイル/etc/modules.confによって変更できる (このファイルは無くてもよい)。

設定ファイルは行単位で解釈される。
全ての空行と、'#' 文字以降の行末までは無視される。
行末が '\' になっている行は次の行に継続する。
残りは指定行 (directive) であり、 すべて以下のフォーマットのいずれかに従う:

 [add] above module module_list alias alias_name result [add] below module module_list define VARIABLE WORD depfile=A_PATH else elseif EXPRESSION endif if EXPRESSION include PATH_TO_CONFIG_FILE insmod_opt=GENERIC_OPTIONS_TO_INSMOD install module command ... keep [add] options module MODULE_SPECIFIC_OPTIONS path=A_PATH path[TAG]=A_PATH generic_stringfile=A_PATH pcimapfile=A_PATH isapnpmapfile=A_PATH usbmapfile=A_PATH parportmapfile=A_PATH ieee1394mapfile=A_PATH pnpbiosmapfile=A_PATH [add] probe name module_list [add] probeall name module_list prune filename post-install module command ... post-remove module command ... pre-install module command ... pre-remove module command ... remove module command ... persistdir directory_name

各指定行に与える引数の解釈では、シェルのメタキャラクタが有効になる。 すなわち、ワイルドカードやコマンドのバッククォートといった、 シェルでの技が利用できる。

 path[misc]=/lib/modules/1.1.5?/local path[net]=/lib/modules/`uname -r`/net

危険:ユーザーが指定した入力にシェル展開を適用するのは 大きなセキュリティ上のリスクがある。 modutils は信頼できるデータに対してのみシェルコマンドのメタ展開を行う。 基本的にこれは設定ファイルのデータのみを展開することを意味する。 modutils では、ユーザーは modprobe を (自分自身の設定ファイルを指定して) root 権限で実行することはできない、と仮定している。 ユーザーからの入力を指定して modutils を root 権限で起動するプログラム (カーネルを含む) は、正確に一つだけのユーザー入力パラメータを渡し、 かつセーフモードに設定しないと、ローカルで root を奪取される危険がある。 セーフモードの詳細についてはmodprobeを参照のこと。

各指定は複数回繰り返してもよい。 指定によっては、前にaddを置くこともできる。これがないと、指定した module_list が以前の module_list を置き換えるが、 これがあると module_list が以前の module_list に追加される 

記法 (SEMANTICS)

A_PATHはターゲットへの完全なパス名である。`uname -r``kernelversion`.といったシェルのメタキャラクタをA_PATHに用いてもよい。
これらの 2 つのコマンドは、 (modprobedepmodのような) ユーティリティの内部でも、 現在のカーネルのリリースとバージョン (それぞれ 2.2.3 や 2.2 など) を表すものとして認識されている。

WORDは空白文字以外からなるシーケンスである。 もし ' や " や ` が文字列にあると、 対応する ', ", ` にマッチするまでの全ての文字 (空白文字も) がその文字列に含まれることになる。 全てのWORDは、その後メタキャラクタのルールにしたがって展開される。 展開した結果が二つ以上のワードになった場合は、 結果のうち最初のワードだけが用いられる。

EXPRESSION は以下のいずれかである。

WORD compare_op WORD
compare_op は ==, !=, <, <=, >=, > のいずれかである。 両 WORD が文字列として比較される。
-n WORD compare_op WORD
compare_op は ==, !=, <, <=, >=, > のいずれかである。 両 WORD が数値として比較される。
WORD
WORD の展開に失敗するか、 展開した結果が "0" (zero), "false", "" (empty) のいずれかであれば、展開結果の値は FALSE となる。 それ以外の場合は展開結果の値は TRUE となる。
-f FILENAME
FILENAME が存在するかどうかのテスト。
-k
"autoclean" が有効になっているかどうか (すなわちカーネルから呼ばれたかどうか) のテスト。
! EXPRESSION
式の否定も式である。
 

文法 (SYNTAX)

以下に有効な指定について説明する。
define VARIABLE WORD
putenv(VARIABLE=WORD)を実行する。この指定は変数の作成・変更のいずれも行える。 変数は環境に作られるので、 現在のセッションで実行される全てのコマンドから利用できる。
depfile=A_PATH
依存関係ファイルへのパス。 これはdepmodによって作成され、modprobeによってモジュールとその依存モジュールを探すために利用される。 通常はデフォルトの値を用いるべきである。以下を参照のこと。
if EXPRESSION
EXPRESSIONTRUEと解釈されたら、else, elseif, endifのいずれかにマッチするまでの全ての指定行が実行される。FALSEと解釈されたら、それらの指定行は無視される。if行は、内部の最大値である 20 までネストできる。
注意:path指定行を条件式内部で処理することは避けて欲しい。modprobeには「賢い頭脳」が組み込まれているので、path指定行の条件処理は、単に混乱を生むだけである。ほんとです。
else
これより前でのif または elseif指定行での式の評価がFALSEであり、elseがあれば、ここまでの指定行は無視され、 これ以降endifまでの指定行が処理される。
elseif EXPRESSION
これより前に置かれたif または elseifでの式評価の結果がFALSEで、ここでの式評価の結果がTRUEであれば、次にelseif, else, endifのいずれかが現れるまでの指定行が処理される。
endif
これは設定ファイルにおける条件処理を制御するif, elseif, elseのチェインを終了させる。

 if EXPRESSION any config lines elseif EXPRESSION any config lines else any config lines endif

elseelseifは無くてもよい。

include PATH_TO_CONFIG_FILE
別々のプラットフォームや設定を一つの設定ファイルで扱うのは、 非常に複雑になる場合がある。ifの条件によってinclude指定行を用いれば、この取り扱いは簡単になる。
insmod_opt=GENERIC_OPTIONS_TO_INSMOD
insmod に (他では指定できないような) 特殊なオプションが必要な場合は、 このオプションで起動の度にそれらを追加することが可能である。 特殊な状況を除いて、 通常は insmod の標準的なデフォルトのオプションを変更する必要はない。
keep
このワードがpathの記述を含む行の前に置かれた場合は、 デフォルトのパスのセットは保存され、それに追加される。 これがない場合の通常の振舞いでは、 パスのセットが設定ファイルで置き換えられる。
path=A_PATH
path[TAG]=A_PATH
A_PATH引数はモジュールを探すディレクトリの追加分を指定する。path指定行は、オプションのタグをとることができる。 これはそのモジュールの目的に関する情報を多少なりとも示し、 またmodprobeの動作をいくらか自動化する。 この "path" キーワードに追加されるタグは角括弧 [] で括られる。 タグがない場合は、 "misc" タグが指定されたかのように動作する。
非常に有用なタグとして、bootがある。これはブート時にロードしなければならないモジュールを 保有しているすべてのディレクトリをマークするために利用できる。
なおkeep指定行を使えば、path指定行によるデフォルトのパスの置き換えを防ぐことができる。
generic_stringfile=A_PATH
これは generic_string ファイルへのパスである。このファイルはdepmodによって作成され、モジュールからの文字列情報が必要な インストールスクリプトが利用する。 通常はデフォルトの値を用いるべきである。以下を参照のこと。
pcimapfile=A_PATH
これは pcimap ファイルへのパスである。このファイルはdepmodによって作成され、インストールスクリプトが pci デバイスをサポートするモジュールを検索する際に用いられる。 通常はデフォルトの値を用いるべきである。以下を参照のこと。
isapnpmapfile=A_PATH
これは isapnpmap ファイルへのパスである。このファイルはdepmodによって作成され、インストールスクリプトが ISA PNP デバイスをサポートするモジュールを検索する際に用いられる。 通常はデフォルトの値を用いるべきである。以下を参照のこと。
usbmapfile=A_PATH
これは usbmap ファイルへのパスである。このファイルはdepmodによって作成され、インストールスクリプトが USB デバイスをサポートするモジュールを検索する際に用いられる。 通常はデフォルトの値を用いるべきである。以下を参照のこと。
parportmapfile=A_PATH
これは parportmap ファイルへのパスである。このファイルはdepmodによって作成され、インストールスクリプトが parport デバイスをサポートするモジュールを検索する際に用いられる。 通常はデフォルトの値を用いるべきである。以下を参照のこと。
ieee1394mapfile=A_PATH
これは ieee1394map ファイルへのパスである。このファイルはdepmodによって作成され、インストールスクリプトが ieee1394 デバイスをサポートするモジュールを検索する際に用いられる。 通常はデフォルトの値を用いるべきである。以下を参照のこと。
pnpbiosmapfile=A_PATH
これは pnpbiosmap ファイルへのパスである。このファイルはdepmodによって作成され、インストールスクリプトが pnpbios デバイスをサポートするモジュールを検索する際に用いられる。 通常はデフォルトの値を用いるべきである。以下を参照のこと。
alias alias_name result
"alias" 指定行はモジュールに別名をつけるために用いる。 /etc/modules.conf に

 alias iso9660 isofs

のような行があれば、実際にはそのようなモジュールがなくてもmodprobe iso9660のように書くことができるようになる。
なお

 alias some_module off

という行は、modprobe にそのモジュールのロード要求を無視させる。 また

 alias some_module null

というエイリアスは、some_module への要求を常に成功させるが、 しかし実際にはそのモジュールはインストールされない。 これはabovebelow指定行で作成されるスタックのベースとして利用できる。

alias指定のレベルは深くなっても良い (訳注: alias の alias の alias... としてかまわない)。 全てのエイリアスは、 実際に物理的に存在しているモジュールを探すべく、再帰的に展開される。 エイリアスの実際の深さの限界は、おおよそ 1000 程度になっている。 これは以下のようなループを検知するためである。

 alias a b alias b a

aliasマッピングの最終的な結果がいずれのモジュールにもマッチしなければ、 modprobe はその結果に probe と probeall をマップする。 これらも成功しなければ、そのモジュールは見付からなかったことになる。 したがって以下のような指定は気が利いていると言える (devfs より)。

 alias /dev/sg* /dev/sg probeall /dev/sg scsi-hosts sg

モジュール A が実際に存在する場合にも、モジュール A をモジュール B への エイリアスとしてマップすることはできる。 しかしこれは誤解の元であるので推奨できない。 歴史的な理由から、カーネルのサウンドシステムには sound.o というモジュールがある。しかしサウンドの開発者たちも、 sound をユーザサウンドカード用モジュールへのエイリアスとしたい、 すなわち "alias sound sb" としたいことがあるかもしれない。 この要求をサポートし、 なおかつ「オプションをエイリアスに与えることが可能」 という定められた動作を維持するために、 modprobe はモジュール名のエイリアス展開を、 その名前が modules.dep に見付かった場合には行わない (見付からなければ展開する)。 これはエイリアスと実際のモジュールのあり得る全ての組み合わせに対して 期待された動作をするとは限らないので、 実際に存在するモジュールと同じ名前へのエイリアスは避けるべきなのである。

[add] probe name module_list
[add] probeall name module_list
これらの指定行はnamemodprobeのコマンドラインで要求されたモジュール名である場合に限って利用できる。 効果としては、nameへの要求があると、 module_list にあるモジュールが、 指定の順序で試される。二つの指定行の違いは、probeはモジュールの挿入が一度成功すればそこで試行を終了するのに対して、probeallはリストの最後まで続ける点にある。 終了ステータスは、いずれかのモジュールのインストールに 成功したかどうかを反映する。addが前に付加されると、新しいリストを前のリストに置き換えるのではなく追加する。
prune filename
インストールされているカーネルに対するモジュールディレクトリのトップには、 モジュールではないファイルがおかれている。 これらには modules.dep, modules.generic_string, modules.pcimap, modules.isapnpmap, modules.usbmap, modules.parportmap, modules.ieee1394map, modules.pnpbiosmap のほか、 カーネルソースツリーへのビルド用 symlink など、インストールプロセスが ビルドツリーから保存しておきたいと考えたファイルが含まれる。 これらに対してdepmodが "not an ELF file" という警告を発するのをやめさせるには、 これらのモジュールでないファイルが prune リストに入っていなければならない。depmodは組み込みの prune リストを持っており、これにはいかなるカーネルビルドに おいても存在するファイルが含まれているので、削除することはできない。 自分のファイルをこのモジュールディレクトリのトップに追加したら、 各filenameに対してprune宣言を加えると良い。注意: prune リストはpathのトップディレクトリをスキャンするとき、 かつそのディレクトリが標準的なサブディレクトリ名リスト以下、 高々一つのサブディレクトリしか含まない場合にしか (すなわちカーネルのインストールでビルドされた トップディレクトリのように見える場合にしか) 参照されない。pruneリストはpathのサブディレクトリには効力を持たない。
[add] options [-k] module [MODULE_SPECIFIC_OPTIONS]
エイリアスされた名前も含め、すべてのモジュール名はそれぞれ固有のoptions指定行を持つことができる。 エイリアスに対して指定されたオプションは、 より「基本的な」名前に対して指定されたオプションよりも高い優先度を持つ。 このルールはoptions指定行の衝突を解決する際に利用される。 コマンドラインで指定されたオプションは、最も高い優先度を持つ。 モジュール名の前に-kがあると、たとえmodprobeが autoclean オプション-kで実行されていた場合でも、モジュールは autoclean されなくなる。addが前に付加されると、新しいリストを前のリストに置き換えるのではなく追加する。aliasの結果が実際のモジュールでなければ、そのaliasのチェーンによって構成されたoptionsは、probe[all] を呼ぶ前に捨てられる。MODULE_SPECIFIC_OPTIONSのどれかにシェルにとって特別な文字 (スペース・コンマ・括弧) が含まれている場合には、そのオプションは '"..."' で括らなければならない。 '' は modules.conf の内部でオプションを区切り、 "" は オプションがシェルに渡されるときにそれを区切る。以下に例を示す。

 abc='"def,ghi jkl (xyz)"'

[add] above module module_list
この指定行は、あるモジュールのモジュールスタックの上に 他のモジュールセットを "pull in" するのに利用できる。 結果はlsmod(8) コマンドの出力で見ることができる。above指定行は依存関係がmodules.depファイルには記述できないほど複雑なような状況下で有用である。 これはpost-installおよびpre-remove指定行の最適化された場合であるとみなすことができる。 モジュールのインストールに失敗しても、modprobeの終了ステータスには影響しないことに注意。addが前に付加されると、新しいリストを前のリストに置き換えるのではなく追加する。
[add] below module module_list
この指定行は、あるモジュールのモジュールスタックの下に 他のモジュールセットを "push" するのに利用できる。 結果はlsmod(8) コマンドの出力で見ることができる。below指定行は依存関係がmodules.depファイルには記述できないほど複雑なような状況下で有用である。 これはpre-installおよびpost-remove指定行の最適化された場合であるとみなすことができる。 モジュールのインストールに失敗しても、modprobeの終了ステータスには影響しないことに注意。addが前に付加されると、新しいリストを前のリストに置き換えるのではなく追加する。

以下の指定行はモジュールのロード・アンロードの際に 特定のコマンドを実行したい場合に利用できる (指定しなくてもよい)。 エイリアスされたモジュール名に対してもこれらの指定は可能で、 エイリアス展開後のモジュール名に対する指定が他にあれば、 それらとともに適切な順序で実行される。

pre-install module command
指定したモジュールをインストールする前にcommandを実行する。below指定行も参照のこと。
install module command
指定したモジュールをインストールする際に、デフォルトのinsmodではなくcommandを実行する。
post-install module command
指定したモジュールをインストールした後にcommandを実行する。above指定行も参照のこと。
pre-remove module command
指定したモジュールを削除する前にcommandを実行する。above指定行も参照のこと。
remove module command
指定したモジュールを削除する際に、デフォルト (組み込み) のrmmodではなくcommandを実行する。
post-remove module command
指定したモジュールを削除した後にcommandを実行する。below指定行も参照のこと。
persistdir=directory_name
rmmodが永続モジュールパラメータを含むモジュールを削除する時、 (おそらく) 修正されたパラメータをdirectory_nameの下に保存する。modprobeが永続モジュールパラメータを含むモジュールをロードする時、 以前の値をdirectory_nameの下から探す。persistdirはモジュールがロードされた時に読み込み可能で、 モジュールがアンロードされた時に書き込み可能でなければならない。 デフォルト値は /var/lib/modules/persist である。 多くの Linux ディストリビューションはファイルシステムをマウントする前に モジュールをロードするが、これは永続データに関する問題を引き起こすかもしれない。 /var が別のパーティションにあって、モジュールがロードされてからマウントされる場合、insmodは永続データを読み込めない。 /var が別のパーティションにある場合には、二つの選択肢がある。
1)persistdirにルートパーティションのディレクトリ、 例えば /lib/modules/persist を指定する。 これはrmmodが実行されるときにルートパーティションが書き込み可能であることを仮定している。
2) ファイルシステム関係のモジュールを全て最初にロードし、 /var パーティションをマウントし、それから残りのモジュールをロードする。 これはファイルシステムに永続データがないことを仮定している。

 

デフォルトの設定

設定ファイル '/etc/modules.conf' がない場合や、 あるいは指定行の上書き変更がない場合には、 以下のデフォルトが用いられる。

 depfile=/lib/modules/`uname -r`/modules.dep generic_stringfile=/lib/modules/`uname -r`/modules.generic_string pcimapfile=/lib/modules/`uname -r`/modules.pcimap isapnpmapfile=/lib/modules/`uname -r`/modules.isapnpmap usbmapfile=/lib/modules/`uname -r`/modules.usbmap parportmapfile=/lib/modules/`uname -r`/modules.parportmap ieee1394mapfile=/lib/modules/`uname -r`/modules.ieee1394map pnpbiosmapfile=/lib/modules/`uname -r`/modules.pnpbiosmap path[boot]=/lib/modules/boot path[toplevel]=/lib/modules/`uname -r` path[toplevel]=/lib/modules/`kernelversion` path[toplevel]=/lib/modules/default path[toplevel]=/lib/modules persistdir=/var/lib/modules/persist

aliasoptions指定行に対しても一連のデフォルト設定がある。 このセットは継続的に拡張されているので、ここにはリストしない。 (現在の) デフォルトのセットは、/etc/modules.confファイルがないときにmodprobe -cコマンドを実行すれば閲覧できる。

全てのoptions指定行は、以下のようにモジュールに必要なオプションを指定する。

 modprobe de620 bnc=1

これらのオプションは/etc/modules.confファイルに与えられているオプションと、modprobeのコマンドラインによって上書きされる。

エイリアスされたモジュールにもoptions指定行は (されていないモジュールと) 同じように使うことができる。 これは例えばダミーのモジュールに便利である。

 alias dummy0 dummy options dummy0 -o dummy0
 

別の設定ファイル

歴史的な理由から、もし /etc/modules.conf が存在しないと、 modutils は代わりに /etc/conf.modules を読む。 しかしこの古い名前の利用は推奨できない。 /etc/modules.conf に置き換えるべきである。 このバージョンの modutils では、 /etc/conf.modules があると警告メッセージを発する。 以降のバージョンではエラーメッセージを出して モジュールのロードを行わないことになるだろう。 

関連項目

depmod(8),modprobe(8),insmod(8) 

著者

Bjorn Ekwall <bj0rn@blox.se>
Keith Owens <kaos@ocs.com.au>


関連キーワード

モジュール,modules,module,PATH,modprobe,path,command,インストール,リスト,list 

Index

名前
説明
記法 (SEMANTICS)
文法 (SYNTAX)
デフォルトの設定
別の設定ファイル
関連項目
著者

This document was created byman2html, using the manual pages.
Time: 15:49:14 GMT, July 11, 2021