modules.conf - ファイルのフォーマットと規約の説明 - Linux コマンド集 一覧表
名前
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 つのコマンドは、
(
modprobe
や
depmod
のような) ユーティリティの内部でも、
現在のカーネルのリリースとバージョン (それぞれ 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"
-
式
EXPRESSION
が
TRUE
と解釈されたら、
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
else と elseif は無くてもよい。 - "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 への要求を常に成功させるが、 しかし実際にはそのモジュールはインストールされない。 これは above や below 指定行で作成されるスタックのベースとして利用できる。
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 をユーザサウンドカード用モジュールへのエイリアスとしたい、 すなわち "aliassoundsb" としたいことがあるかもしれない。 この要求をサポートし、 なおかつ「オプションをエイリアスに与えることが可能」 という定められた動作を維持するために、 modprobe はモジュール名のエイリアス展開を、 その名前が modules.dep に見付かった場合には行わない (見付からなければ展開する)。 これはエイリアスと実際のモジュールのあり得る全ての組み合わせに対して 期待された動作をするとは限らないので、 実際に存在するモジュールと同じ名前へのエイリアスは避けるべきなのである。 - "[add] probe name module_list"
- "[add] probeall name module_list"
- これらの指定行は name が modprobe のコマンドラインで要求されたモジュール名である場合に限って利用できる。 効果としては、 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
alias と options 指定行に対しても一連のデフォルト設定がある。 このセットは継続的に拡張されているので、ここにはリストしない。 (現在の) デフォルトのセットは、 /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 があると警告メッセージを発する。 以降のバージョンではエラーメッセージを出して モジュールのロードを行わないことになるだろう。
関連項目
著者
Bjorn Ekwall <bj0rn@blox.se> Keith Owens <kaos@ocs.com.au>