LKM(4) FreeBSD カーネルインタフェースマニュアル LKM(4)
名称
lkm − カーネルモジュールを動的にロードする機能 |
解説
動的にロードするカーネルモジュールを用いることにより、システム管理者は実 行中のシステムに動的に機能を加えたり取り除いたり出来ます。更に、この機能 によりソフトウェア開発者は自らの変更をテストする為に頻繁に再起動をかける 事を避けながらカーネルの新しい構成部品を開発することもできます。 多様なタイプのモジュールをシステムにロードすることが出来ます。後述するよ うに、定義されたモジュールのタイプが幾つかあり、これらのタイプ毎に予め決 められた方法でモジュールはシステムに付加されます。その上、一般的なタイプ もあって、このタイプについてはモジュールはそれ自体がローディングとアン ローディングを処理するものとします。 FreeBSD システムでは動的にロードするカーネルモジュールを広汎に利用してい て、大部分のファイルシステム、 NFS クライアントとサーバ、全てのスクリーン セーバ、そして iBCS2 や Linux エミュレータなどについて動的にロードする バージョンを提供しています。システムと共に配布されたモジュールは /lkm ディレクトリにあります。 lkm インタフェースを利用するには /dev/lkm デバイスに対して ioctl(2) シス テムコールを発行します。通常、動的にロードするカーネルモジュールに関わる 全ての操作は、 modload(8) と modunload(8) と modstat(8) のプログラムによ り処理されます。ユーザは直接 /dev/lkm に関与する必要は無い筈です。 |
モジュールのタイプ
システムコールモジュール システムコールは新しいシステムコールを lkm インタフェースを通してロードすることにより置き換えることが出来ます。全てのシステムコールを置き換えることが出来ますが、しかし ioctl(2) システムコールに関しては特に注意を払わなければなりません。何故なら、このシステムコールがモジュールのロードとアンロードに用いられているからです。 システムコールモジュールがアンロードされるときには、動的にロードされたモジュールにより置き換えられていたシステムコールはシステムコールテーブルの適正な位置に戻されます。 仮想ファイルシステムモジュール 仮想ファイルシステムは lkm インタフェースを通してロードできます。 デバイスドライバモジュール 新しいブロック型と文字型のデバイスドライバを LKM を用いて、システムにロードすることが出来ます。デバイスドライバをロードする場合の主要な問題はアクセスするデバイスに対応してドライバのデバイスノードが存在しなければならないことです。これらのデバイスノードを作成するには通常ドライバのロードが成功した場合に適切なプログラムを実行するよう modload(8) に指定する事により行います。 実行クラス イメージアクティベータ (image activator) としても知られています。実行クラスとは、これにより execve(2) システムコールが実行可能ファイルの形式を識別してメモリにロードできるような機構です。 雑モジュール 雑モジュールは、いまのところ明確に定義された、あるいは一般的となっている拡張のためのインタフェースがないモジュールです。ユーザは固有のローダを書かなければなりません。新しいモジュールのロード時およびアンロード時に、そのモジュールを有効化および無効化するために必要となるすべてのカーネルデータを、このローダが操作します。
関連ファイル
/dev/lkm
lkm インタフェースデバイス 関連項目 |
modload(8), modstat(8), modunload(8) |
バグ
モジュールが正しい初期化に失敗し、更にシステムがこの失敗を見つけることが 出来た場合には、システムは直ちにパニックによる再起動を行います。 システムの内部のインタフェースが変更された場合には、古いままのモジュール はしばしばこの変更を発見できないので、このようなモジュールはロードされた 時にしばしばクラッシュするかまたは不可解な機能不全を起こします。 |
作者
lkm の機能を最初に実装したのは Terrence R. Lambert
です。動的にロードする ファイルシステムを実装したのは |
歴史
この lkm 機能は SunOS 4.1.3 が実装した動的にロードするカーネルモジュール と機能が類似するように設計されています。 FreeBSD 2.0 January 17, 1996 FreeBSD 2.0 |