Chapter 10. 低レベルのドライバ

低レベルの SCSI ドライバは、あまりにたくさんあるので、このドキュメントでは 詳しく説明しません。 かわりに、ここではさわりをざっと見ていき、読者の方がさらに情報を見つけられる ようにアドバイスします。

Linux カーネルの SCSI サブシステムのソースディレクトリ、 /usr/src/linux/drivers/scsi は出発点として適しています。 いくつかのドライバでは、README.<driver_name>という 「readme」ファイルに情報があります。その他のドライバも、各「.c」ファイル の先頭にたくさんの情報が書かれています。 この情報として、バージョン番号、変更履歴、カーネルブート時やモジュール ロード時のオプションなどが含まれる場合がよくあります。オプションに関する情報 は、様々な Linux ディストリビューションのインストールガイドにもあります。 ドライバのメンテナーが、Web サイトを立ち上げていて、そこに最新のバグフィックス 情報があるケースもあります。オフィシャルなメンテナーの方々は、 /usr/src/linux/MAINTAINERS ファイルに列挙してあります。 そこに挙がっていなければ、SCSI サブシステムのディレクトリにある、 該当する「.c」ファイルを見てください。古いドライバの中には、アクティブな メンテナーがいないものもあります。そのような場合は、linux-scsi ニュース グループに投稿すれば、助けてもらえるかもしれません (N1を参照)。

カーネルのソースツリーが提供するドライバの全体像を掴むには、カーネルの設定 プログラム(例えば cd /usr/src/linux; make menuconfig) のどれかを利用してください。それぞれのセクションに対応したヘルプ情報は、 1 つの(巨大な)ファイル、 /usr/src/linux/Documentation/Configure.help にあります。 ドライバは他の所からも取得できます。カーネル 2.2 系(もしくはそれ以前) 用に作成したドライバは、カーネル 2.4系では構築や動作ができる可能性はわずかです。 (プログラムの面からは、変更が必要なところは多いとはいえません)。ドライバに はバイナリ形式だけが利用可能なものもあるでしょう。この場合、提供者を信用 して、しっかり指示に従ってください。

低レベルのドライバは、2 種類あるエラー処理のどちらかをサポートできます。 古い方法は時代遅れとみなされており、新しい方法は「new_eh」と呼ばれています。 「new_eh」の長所は、独立したカーネルスレッドをホスト(「scsi_eh_<n>」と いう名前が付きます。<n> はホスト番号)単位で使用し、 エラーからの復旧機能を持たせている点にあります。どちらのエラー回復の方法も カーネル 2.2 系で利用可能でしたが、アダプタドライバで「new_eh」を使って いるものはほとんどありません。カーネル 2.4 系では、より多くのドライバが new_eh を使用しており、来たるカーネル 2.5 開発版では、旧式のエラー回復方法の 中間レベルにおけるサポートは打ち切りになります。

Drew Eckhardt 氏の SCSI-HOWTO ドキュメント(W7 を参照)では、低レベルの(アダプタの)ドライバについて、このドキュメント よりもさらに詳細に踏み込んでいます。ただ SCSI-HOWTO は、5 年も前のもの なので、その後の変更も多く、ドライバもさらに増えています。

scsi_debugという低レベルのドライバがあります。この ドライバは、コンピュータのメモリを利用して、複数の「direct access」デバイス (例えばディスク)をシミュレートします。カーネル 2.4.17 からは、 「ram disk」として動作します。Linux には色々な ram disk の実装がありますが (例えば ramfs)、scsi_debug は、設定上の問題で障害がある SCSI ドライバを 切り分けするのに役立つでしょう。scsi_debug.c にさらに 情報があります。