Chapter 6. モジュールとそのパラメタ

SCSI 関連のモジュールはたくさんあります。中間と上位レベルのモジュール を次に挙げます。

最初の 3 つは、通常のドライバ名に「_mod」が付いている点に注意してください。 低レベルのドライバには、HBA の製造メーカーの名前またはその略称(例えば advansys)に加えて、主要な制御用チップのチップ番号が付くこともあります (例えば sym53c8xx は NCR 53c8?? 系のチップが載っている symbios のコントローラ)。

SCSI モジュールはすべて、中間レベルのドライバに依存しています。 SCSI の中間レベルドライバがカーネルに組み込まれておらず、かつ scsi_mod.o がロードされていない場合、 modprobe st のようなコマンドが 実行されると、 scsi_mod.o モジュールがロードされることになります。 おそらく他にも依存関係があるはずで、例えば modprobe sr_mod とすれば、CD-ROM のモジュールが(まだロードされていなければ)ロードするでしょう。 また、SCSI の中間レベルがモジュールなら、SCSI サブシステムのその他すべての ドライバもモジュールでなければいけません(これはカーネル構築の設定ツール で強制されます)。

modprobe <module_name> コマンドは、<module_name> をロードする場合、同時に <module_name> が依存しているモジュールすべてを 自動的にロードしようとします。 また、<module_name> を指定する際、末尾の「.o」拡張子は不要です。 なければそのように想定されます。 【訳註:modprobe のモジュール名指定には、パス ('/') や末尾の '.o' を含めては いけません。man modprobe してください】 insmod <module_name> も <module_name> をロードしよう としますが、そのモジュールが依存しているモジュールを先にロードしません。 モジュールをロードする規則、つまりあるモジュールがその他のモジュール を(適切なパラメタをつけた上で)どのようにロードするのかは、通常 /etc/modules.conf に記述してあります。(初期の Linux カーネルでは、このファイルを /etc/conf.modules と呼んで いたことに注意)。 このファイルの形式についてのさらに詳しい情報については、 man modules.conf してみてください。

どのモジュールにもコマンドラインで利用できるパラメタがあり、これは modinfo -p <module_name> コマンドを使って調べられます。

高レベルのドライバが初期化され、アクティブなホストが存在しない場合は、 中間レベルが「scsi_hostadapter」というモジュールをロードしようとします。 ここで「alias」を使うと、「scsi_hostadapter」と実際の低レベル(アダプタ) ドライバの名前とを結び付けられます。 例えば /etc/modules.conf に 「alias scsi_hostadapter aic7xxx」という行を置けば、aic7xxx モジュール がロードされます(既にアクティブな低レベルのドライバがなければ)。 [1]

モジュールのパラメタ(alias)である「scsi_hostadapter」と initrd ファイルシステム には特別な関係があります。さらに詳しいことは、 man initrdman mkinitrd してください。 [2]

Notes

[1]

ルートファイルシステムが、SCSI デバイスにあり、それを制御する低レベルの (アダプタ)ドライバが /etc/modules.conf に記述されて いる場合、ロードする順序に関する問題が生じます。ブートローダーが SCSI デバイス(たいていは(マスター)ブートレコード)から、最初にカーネル をどのように 持ってくるのか、という問題もあります。後者は通常システムの BIOS もしくはアダプタ・カードの BIOS が面倒をみています。

[2]

mkinitrd の使用例です。ルートパーティションが SCSI ディスク上にあり、これは Adaptec のコントローラ(aic7xxx ドライバが必要)に接続 されているとします。aic7xxx ドライバをモジュールとしてカーネルを構築した後、 カーネルイメージを通常の場所に置きます(おそらく /boot ディレクトリ)。次に「alias scsi_hostadapter aic7xxx」というような行が /etc/modules.conf ファイルにあることを確認します。 /boot ディレクトリから mkinitrd /boot/initrd-2.4.5.img 2.4.5 のようなコマンド ラインを実行してください(Linux カーネル 2.4.5 が構築してあると仮定)。 これで initrd-2.4.5.img が生成されるはずです。 /etc/lilo.conf には、下記のような項目を追加することに なるでしょう。

image=/boot/vmlinuz-2.4.5
    label=linux
    initrd=/boot/initrd-2.4.5.img
    read-only
    root=/dev/sda7
カーネルの設定では次のような内容を選択しておく必要があります。

CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
Documentation/initrd.txt も見てください。