File: insmod.8

package info (click to toggle)
manpages-ja 0.5.0.0.20120606-1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 25,964 kB
  • sloc: perl: 161; makefile: 116
file content (299 lines) | stat: -rw-r--r-- 14,859 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
.\" Copyright (c) 1996 Free Software Foundation, Inc.
.\" This program is distributed according to the Gnu General Public License.
.\" See the file COPYING in the kernel source directory.
.\" $Id: insmod.8,v 1.5 2004/07/30 13:11:13 nakano Exp $
.\"
.\" Translated Sun Aug 15 10:54:37 JST 1999
.\"         by FUJIWARA Teruyoshi <fujiwara@linux.or.jp>
.\" Updated Thu 12 Oct 2000 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
.\" Updated Sun 28 Jan 2001 by Kentaro Shirakata <argrath@ub32.org>
.\"
.\" WORD: persistent data	永続データ
.\" WORD: prefix		プレフィックス
.\"
.TH INSMOD 8 "October 2, 2001" Linux "Linux Module Support"
.SH 名前
insmod \- ローダブルカーネルモジュールをインストールする
.hy 0
.SH 書式
.B insmod
[\-fhkLmnpqrsSvVxXyY] [\-e\ persist_name] [\-o\ module_name]
[\-O\ blob_name] [\-P\ prefix] module [\ symbol=value\ ...\ ]
.SH 説明
.B insmod
は実行中のカーネルにローダブルモジュールをインストールする。
.PP
.B insmod
は実行中のカーネルにモジュールをリンクし、
カーネルがエクスポートしているシンボルテーブルにある
全てのシンボルを解決しようとする。
.PP
ディレクトリや拡張子なしでモジュールファイル名を与えると、
.B insmod
は標準のデフォルトディレクトリ(複数)からモジュールを探す。環境変数
MODPATH を使って、このデフォルト値を上書きすることができる。
/etc/modules.conf のようなモジュール設定ファイルがあれば、
こちらの内容が MODPATH での指定を上書きする。
.PP
環境変数 MODULECONF によって、 /etc/modules.conf
(あるいは /etc/conf.modules (使わないほうが良い))
以外の設定ファイルを指定することもできる。
この環境変数は、上記の指定すべてより優先される。
.SS オプション
.TP
.I "-f --force"
実行中のカーネルのバージョンと、
モジュールに組み込まれているカーネルの対象バージョンが異なっても、
モジュールのロードを試みる。
これはカーネルバージョンチェックだけを無効にし、
シンボル名チェックには何の影響も与えない。
モジュールのシンボル名がカーネルのものと一致しない場合、
.I insmod
に強制的にモジュールをロードさせる方法はない。
.TP
.I "-h --help"
ヘルプ文章を表示する。
.TP
.I "-k --autoclean"
モジュールの auto-clean フラグを設定する。このフラグは
\fBkerneld\fP(8) が使用し、
一定期間(普通は 1 分)使われなかったモジュールを削除する。
.TP
.I "-L --lock"
同じモジュールを同時にロードすることを防ぐために、\fBflock\fR(2) を用いる。
.TP
.I "-m --map"
ロード時のメモリマップを標準出力に出力する。これにより、
カーネルパニックの際のモジュールのデバッグが容易になる。
より詳細なデバッグを可能にする。
デフォルトでは ksymoops シンボルを定義する。
このオプションは \-X/\-x オプションとは独立である。
.sp
ksymoops シンボルは、各ローダブルモジュールごとに、
約 260 バイトを余分に必要とする。カーネル空間がキツキツで、
ksyms を最小にしたいような場合を除き、
デフォルトのままにして詳しい Oops デバッグを有効にするほうが良い。
.TP
.I "-o \fRmodule_name\fI --name\fR=module_name\fI"
モジュールに明示的に名前をつける。
通常はロードするオブジェクトファイルの
basename に基づいた名前が用いられる。
.TP
.I "-O \fRblob_name\fI --blob\fR=blob_name\fI"
バイナリオブジェクトを
.I blob_name
のファイル名で保存する。
このファイルは カーネルにロードされ、セクション操作と再配置が行われた後の
状態を正確に表しているバイナリ blob (ELF ヘッダなし)である。
オブジェクトのマッピング情報を得るためには
.I -m
オプションが推奨される。
.TP
.I "-P \fRprefix\fI --prefix\fR=prefix\fI"
このオプションは SMP カーネルや bigmem カーネル向けの、
バージョン付きモジュールを使うときに利用できる。
これらのモジュールには、シンボル名に余分な prefix がつくからである。
カーネルがシンボルバージョンつきでビルドされると、
insmod は自動的に prefix を "get_module_symbol" か "inter_module_get" の定義から取得する
(モジュールをサポートする全てのカーネルにはこのどちらかが存在しなければならない)。
カーネルがシンボルバージョンを持たず、
しかしモジュールがシンボルバージョン付きでビルドされた場合は、
ユーザーは \-P を指定する必要がある。
.TP
.I "-e \fRpersist_name\fI --persist\fR=persist_name\fI"
モジュールの永続データを保存するファイル名を指定する。
これはモジュールがロードされた時に読み込まれ、
モジュールの実体がアンロードされた時に書き込まれる。
モジュールに永続データがない場合はこのオプションは暗黙に無視される。
永続データは
.I insmod
にこのオプションが指定された場合にのみ読み込まれる。
デフォルトでは
.I insmod
は永続データを処理しない。
省略記法として
.I -e
"" (空文字列) が指定されると、
.I insmod
.I persistdir
の値(
.BR modules.conf (5)
参照)の後ろに、モジュールのファイル名から末尾の \'.gz', \'.o' and \'.mod' を
取ったもの(そのモジュールが見つかったモジュール検索パスからの相対パス)が
指定されたものと解釈する。
.IR persistdir =
(つまり persistdir に 空フィールド)が指定されていると、
省略記法は暗黙に無視される。
.SS モジュールのパラメータ
一部のモジュールではロード時にパラメータを指定して、
動作を変えることができる。
このようなパラメータは I/O ポートや IRQ 番号であることが多い。
これらの数値はマシンごとに異なり、
しかもハードウェアから求めることができないからである。
.PP
2.0 系列のカーネル用に構築したモジュールでは、
全ての整数と文字ポインタシンボルはパラメータとして扱われ、
従ってその内容は変更されうる。
2.1 系列のカーネルからは、特定の値だけが変更されるように、
シンボルにはパラメータかどうかの印が明示的に付けられる。
また、ロード時に与えられた値をチェックするために、
追加の型情報が与えられる。
.PP
整数の場合には、全ての値は 10 進値、8 進値, 16 進値で
C 言語と同じように指定できる (17, 021, 0x11 等)。
配列の要素は、値をコンマで区切って並べることにより指定する。
値を省略することにより、要素を飛ばすことができる。
.PP
2.0 系列のモジュールでは、数字で始まらない値は文字列と解釈される。2.1
以降では、値を文字列と解釈するかどうかはパラメータの型情報によって判断する。
値が二重引用符(\fI"\fP)で始まる場合は、
エスケープシーケンスも含めて全て C 言語と同じように文字列として解釈される。
シェルのプロンプトで使う場合にはクォート自体もシェルが解釈するため、
保護しなければならない点に注意すること。
.SS GPL ライセンスのモジュールとシンボル
カーネル 2.4.10 からモジュールはライセンス文を含むことになり、
MODULE_LICENSE() によって定義されることになった。
いくつかの文字列は GPL 互換であると認識される。
それ以外のライセンス文字列だったり、そもそもライセンスがない場合は、
そのモジュールはプロプラエタリなものとして扱われる。
GPL 互換とされるライセンス文字列については
include/linux/module.h を参照すること。
.PP
カーネルが
.I /proc/sys/kernel/tainted flag
をサポートする場合は、
.I insmod
は GPL ライセンスを持たないモジュールのロード時に、
tainted (汚染) フラグを '1' と OR する。
カーネルが tainting をサポートしていると、
ライセンスのないモジュールがロードされる際には警告が発せられる。
警告は GPL 互換でない MODULE_LICENSE() を持つモジュールに対しては
(tainting をサポートしていない古いカーネルでも)、
常に警告が発せられる。
これによって、新しいモジュールが古いカーネルで利用されるときも、
警告は最小限になる。
.PP
.I insmod\ -f
(強制) モードでは、tainting をサポートするカーネルなら
tainted フラグが '2' と OR され、常に警告が発せられる。
.PP
カーネル開発者の中には、彼らのコードがエクスポートするシンボルは、
GPL 互換なライセンスのモジュールからしか利用できないようにしたい、
と考えている人たちがいる。これらのシンボルは
EXPOET_SYMBOL の代わりに EXPORT_SYMBOL_GPL でエクスポートされる。
カーネルや、別のモジュールによってエクスポートされた
GPL オンリーのシンボルは、GPL 互換なライセンスのモジュールからしか見えない。
これらのシンボルには、
/proc/ksyms において 'GPLONLY_' というプレフィックスが付く。
.I insmod
は GPL ライセンスのモジュールをロードするときは、
シンボルの 'GPLONLY_' プレフィックスを無視し、
通常のシンボル名の部分だけを参照する。
GPL オンリーのシンボルは
GPL 互換なライセンスを持たないモジュールに対しては利用可能とならない。
ライセンスを全く持たないモジュールに対しても同様である。
.SS KSYMOOPS 支援
モジュール利用時のカーネル Oops のデバッグを支援するため、
insmod はデフォルトではいくつかのシンボルを ksyms に追加する
.RB ( \-Y
オプションの説明を見よ)。
これらのシンボルの名前は
.BI __insmod_ modulename _
で始まる。
.I modulename
はシンボルを他と重ならないようにするために必要である。
同じオブジェクトを、別のモジュール名で複数回ロードするのは許されている。
現在定義されているシンボルは
.sp
.nf
__insmod_\fImodulename\fP_O\fIobjectfile\fP_M\fImtime\fP_V\fIversion\fP
.fi
.sp
.I objectfile
は、オブジェクトのロード元のファイルの名前である。
これによって
ksymoops がコードを正しいオブジェクトにマッチさせることが可能となる。
.I mtime
はそのファイルの最終修正タイムスタンプを 16 進で表したものである。
stat に失敗すると 0 になる。
.I version
はモジュールのコンパイル時に指定されたカーネルのバージョンで、
バージョンが取得できなければ \-1 となる。
.\"NAKANO ちょっと意訳気味ですけれども。
シンボル _O はモジュールヘッダと同じスタートアドレスになる。
.sp
.nf
__insmod_\fImodulename\fP_S\fIsectionname\fP_L\fIlength\fP
.fi
.sp
このシンボルは指定された ELF セクションの先頭に現れる。
現在は .text, .rodata, .data, .bss である。
これが現れるのは、セクションの長さが 0 以上の場合だけである。
.I sectionname
は ELF セクションの名前、
.I length
は各セクションの長さの 10 進表記である。
これらのシンボルにより、 ksymoops はシンボルが使えない場合でも
アドレスをセクションにマップできるようになる。
.sp
.nf
__insmod_\fImodulename\fP_P\fIpersistent_filename\fP
.fi
.sp
モジュールが永続データとしてマークされたパラメータを持ち、
永続データを保存するファイル名が有効な場合 (上述の
.I -e
参照) にのみ、insmod によって作成される。
.PP
モジュールにおけるカーネル Oops のデバッグにおける別の問題として、
/proc/ksyms と /proc/modules の内容が Oops とログファイル処理の間で
変わってしまう可能性がある。
この問題の処理を助けるため、
/var/log/ksymoops があると、insmod と rmmod は自動的に
/proc/ksyms と /proc/modules を /var/log/ksymoops
に `date\ +%Y%m%d%H%M%S` の prefix を付けてコピーする。
システム管理者は ksymoops に対して、
Oops のデバッグ時にどのスナップショットファイルを利用するか伝えることができる。
この自動コピーを無効にするスイッチは存在しない。
これを望まない場合は、 /var/log/ksymoops を作ってはならない。
このディレクトリを置くときには、所有者は root とし、
モードは 644 または 600 にして、
以下のスクリプトを一日一回程度実行すると良い。
このスクリプトは insmod_ksymoops_clean としてインストールされる。
.PP
.nf
  #!/bin/sh
  # Delete saved ksyms and modules not accessed in 2 days
  if [ -d /var/log/ksymoops ]
  then
	  set -e
	  # Make sure there is always at least one version
	  d=`date +%Y%m%d%H%M%S`
	  cp -a /proc/ksyms /var/log/ksymoops/${d}.ksyms
	  cp -a /proc/modules /var/log/ksymoops/${d}.modules
	  find /var/log/ksymoops -type f -atime +2 -exec rm {} \\;
  fi
.fi
.SH 関連項目
\fBrmmod\fP(8), \fBmodprobe\fP(8), \fBdepmod\fP(8), \fBlsmod\fP(8),
\fBksyms\fP(8), \fBmodules\fP(2), \fBgenksyms\fP(8), \fBkerneld\fP(8),
\fBksymoops\fP(kernel).
.SH 履歴
モジュール対応を誰が最初に考えたのかは不明である。
.br
Linux 用の最初のバージョンは Bas Laarhoven <bas@vimec.nl> が作成した。
.br
バージョン 0.99.14 は Jon Tombs <jon@gtex02.us.es> が作成した。
.br
Bjorn Ekwall <bj0rn@blox.se> が拡張を行った。
.br
元々の ELF 対応は Eric Youngdale <eric@aib.com> の助力によるものである。
.br
バージョン 2.1.17 への更新は Richard Henderson <rth@tamu.edu> が行った。
.br
modutil-2.2.* での拡張は 1999 年 3 月に Bjorn Ekwall <bj0rn@blox.se> が行った。
.br
ksymoops の補助は 1999 年 5 月に Keith Owens <kaos@ocs.com.au> が行った。
.br
メンテナ: Keith Owens <kaos@ocs.com.au>.