MODULES.CONF
Section: File Formats (5)
Updated: 07 December 1999
Index
JM Home Page
roff page
名前
modules.conf - カーネルモジュールのロードに対する設定ファイル
このマニュアルについて
このマニュアルは、Linux Kernel 2.4 の時代に使われていた modutils
パッケージの設定ファイル modules.conf
の説明で、古いものです。現在ではたいていの場合、kmod
パッケージのユーティリティがモジュールの管理に使われており、
設定ファイルのマニュアルも modprobe.d と depmod.d
の二つに別れています。(2022/12/02, Linux JM Project)
説明
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 をユーザサウンドカード用モジュールへのエイリアスとしたい、
すなわち "alias sound sb" としたいことがあるかもしれない。
この要求をサポートし、
なおかつ「オプションをエイリアスに与えることが可能」
という定められた動作を維持するために、
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 があると警告メッセージを発する。
以降のバージョンではエラーメッセージを出して
モジュールのロードを行わないことになるだろう。
関連項目
depmod(8),
modprobe(8),
insmod(8)
著者
Bjorn Ekwall <bj0rn@blox.se>
Keith Owens <kaos@ocs.com.au>
Index
- 名前
-
- このマニュアルについて
-
- 説明
-
- 記法 (SEMANTICS)
-
- 文法 (SYNTAX)
-
- デフォルトの設定
-
- 別の設定ファイル
-
- 関連項目
-
- 著者
-
This document was created by
man2html,
using the manual pages.
Time: 03:33:40 GMT, December 05, 2022