ここでは、ローダブルカーネルモジュールのサポート状況と SCSI との関係に ついて説明します。
ローダブルモジュールは、ユーザーやシステム管理者がカーネルのメモリーに ファイルをロードして、カーネルの能力を拡張することを可能にするものです。 ローダブルモジュールはハードウェアをサポートするドライバや、ファイル システムをロードするためによく使われます。
SCSI にとってモジュールはいくつかの利点があります。 ひとつは、多数のマシンを管理するシステム管理者が、すべてのマシンに 対して唯一のカーネルイメージを使用し、マシン特有のハードウェアを サポートするためにはカーネルモジュールをロードするといった使い方が できることです。
配布パッケージの作成者が、どのモジュールをロードするか問い合わせる スクリプトをブートフロッピー上に用意することもできます。 こうすれば、使われないドライバのためにメモリを浪費することはなくな りますし、存在しないハードウェアを検出しに行って他のハードウェアを おかしくしてしまう可能性も減らすことができます。
モジュールはラップトップコンピュータにも適しています。ラップトップ コンピュータはデスクトップマシンよりもメモリが少ないことが多く、 なるべくカーネルイメージを小さくして、必要に応じてモジュールをロード することができるからです。 また、モジュールによって PCMCIA SCSI カードのサポートも簡単になります。 カードが挿入/抜出される時にドライバをロード/アンロードできるからです。 [ 注意: 現在のところ、PCMCIA をサポートしているのは qlogic と 152x の ドライバです。]
最後に、カーネル開発者にとってドライバのデバッグやテストが簡単になるという 利点もあります。新しいドライバのテストのために、マシンをリブートする必要が ないからです (もちろん、ドライバのバグによってマシンがクラッシュしてしまう ことがなければ、の話ですが)。
モジュールには数々の利点がありますが、大きな制限もあります。 ルートディスクパーティションが SCSI デバイス上にある場合、ディスク アクセスに必要な SCSI ドライバをモジュールとしてロードすることは できません。 これは、システムがディスクからモジュールをロードする前に、ルート パーティションをマウントしなければならないからです。 ローダとカーネルを変更して、カーネルがルートファイルシステムをマウント する前にモジュールをロードできるようにしようと考えている人々がいます から、将来はこの制限もなくなることでしょう。
1.2.N シリーズのカーネルでは、SCSI カーネルモジュールは部分的に サポートされています。ハイレベル (ディスク、テープなど) のドライバは モジュールとして使用することはできませんが、ローレベル (1542、1522 など) のドライバは必要に応じてロード/アンロードすることができます。 ローレベルのドライバはロードされるたびに、まずそのドライバがサポート しているカードを探しに行きます。次に、見つかったカードそれぞれに対して、 SCSI バスがスキャンされ、内部データ構造がセットアップされて、デバイスが 使用できるようになります。
使わなくなったローレベルドライバは、アンロードすることができます。
マウント中のファイルシステムやオープン中のファイルなどについて使用中
カウンタが保持されているため、ドライバが管理しているデバイスを使って
いる間は rmmod
ユーティリティがデバイスが使用中であるという警告
を発し、ドライバはアンロードできないことに注意してください。
ドライバがアンロードされると、関連するデータ構造はすべて開放され、
システムはモジュールがロードされる前の状態に戻ります。
これは、ドライバはその後必要に応じて再びロードできるということを意味します。
1.3 シリーズのカーネルでは、SCSI ドライバは完全にモジュール化されています。 つまり、まったく SCSI をサポートしていないカーネルでブートした後に モジュールをロードすることによって SCSI をフルサポートすることもできる ということです。
お望みならば、SCSI ドライバの一部分をカーネルに組み込んでコンパイルし、 その他の部分を後でロードすることもできます。どの部分を実行時にロードするか、 どの部分をカーネルに直接リンクするかは、自由に選択することができます。
まったく SCSI をサポートしていないカーネルでブートした場合、まず
SCSI コアをカーネルにロードする必要があります。
これは scsi_mod
という名前のモジュールになっています。
このモジュールをカーネルメモリにロードするまでは、これ以外の SCSI
モジュールをロードすることはできません。
このモジュールにはローレベルドライバは含まれていませんから、
このモジュールをロードしても SCSI バスはスキャンされませんし、
SCSI ディスクやテープが使えるようにもなりません。
カーネルを構築する際 CONFIG_SCSI
に「y」と答えたのであれば、
このモジュールをロードする必要はありません。
この後は、あまり順番を気にせずに必要な機能を実現するモジュールを
ロードすることができます。使用中のモジュールがアンロードされて
しまうことを防ぐために、使用中カウンタによるインターロックがかかって
いるので、モジュールがビジーの場合には rmmod
からメッセージが
出力されます。
ディスク、CDROM、テープ、それに SCSI 汎用のハイレベルドライバは、 それぞれ「sd_mod」、「sr_mod」、「st」、「sg」という名前になっています。 ハイレベルドライバがロードされると、接続されたすべてのホストアダプタの デバイスリストが調べられ、サポートされているデバイスは自動的に有効に なります。
ローレベルドライバのモジュールとしての使い方は、 カーネル 1.2 でのモジュールのサポート を参照してください。 ローレベルドライバがロードされると、バスがスキャンされ、見つかった デバイスはハイレベルドライバによってサポートされているデバイスとして 認識できるかどうか調べられます。認識されたドライバは自動的にアタッチ され、活性化されます。