  Linux SCSI HOWTO
  Drew Eckhardt, <drew@PoohSticks.ORG>
  (linuxdoc-sgml への変換は Dieter Faulbaum
  <faulbaum@bii.bessy.de>)
  v2.30, 30 August 1996
  日本語への翻訳、および SGML タグの打ち直し
  水原 文 <mizuhara@acm.org> (1〜4章、6〜7章、10章〜11章担当)
  中野 武雄 <nakano@apm.seikei.ac.jp> (5章・8章〜9章担当)
  1997年4月7日

  注意: この文書はかなり以前に書かれたものなので、いまどきの Linux 環境
  にはあてはまらない箇所があります。 (JF Project)
  ______________________________________________________________________

  目次

  1. はじめに
  2. よくある問題
     2.1 不安定なシステム
     2.2 カーネルコマンドライン
     2.3 SCSI デバイスがすべての ID に反応する
     2.4 SCSI デバイスがすべての LUN に反応する
     2.5 エラーフリーのはずのデバイスにセンスエラーが起こる
     2.6 ネットワーク機能を組み込んだカーネルが動かない
     2.7 デバイスは検出されるが、アクセスできない
     2.8 SCSI システムがロックアップする
     2.9 カーネルの設定と再構築
     2.10 0 以外の LUN が使えない

  3. バグレポート
     3.1 メッセージの取得
     3.2 panic() の位置を特定する

  4. カーネルモジュール
     4.1 一般的な情報
     4.2 カーネル 1.2.N でのモジュールのサポート
     4.3 カーネル 1.3.N でのモジュールのサポート

  5. ホストアダプタ
     5.1 サポートされている／いないハードウェア
        5.1.1 配布カーネルに含まれているドライバ
        5.1.2 MCA
        5.1.3 アルファ版のドライバ
        5.1.4 修正をすれば動作するドライバ
           5.1.4.1 NCR53c8x0/7x0
        5.1.5 多分動作しない SCSI ホスト
        5.1.6 絶対に動作しない SCSI ホスト
        5.1.7 複数のホストアダプタ
     5.2 よくある問題
        5.2.1 SCSI がタイムアウトしてしまう
        5.2.2 BIOS 依存のボード自動検出ルーチンが失敗する
        5.2.3 メモリマップ方式の I/O を用いたボードの障害
        5.2.4 アルファ版のドライバでブートフロッピーを作ってブートさせると 「kernel panic : cannot mount root device」というメッセージ が出る
        5.2.5 標準カーネルに入っていないドライバをインストールするには
        5.2.6 パッチのないドライバをインストールするには
        5.2.7 Compaq のシステムで PCI のボードが動かない
        5.2.8 PCI の SCSI システムが %d Hosts というメッセージを 出した後にハングアップします。
     5.3 Adaptec 152x、151x、1505、282x、Sound Blaster 16 SCSI / SCSI Pro、 Gigabyte、その他 AIC 6260/6360 を用いた製品 (標準)
        5.3.1 可能な設定
        5.3.2 自動検出
        5.3.3 自動検出の設定変更
        5.3.4 アップデートによって解決された問題
        5.3.5 定義可能なパラメータ
     5.4 Adaptec 154x、AMI FastDisk VLB、DTC 329x (標準)
        5.4.1 可能な設定
        5.4.2 自動検出
        5.4.3 自動検出の設定変更
        5.4.4 注意
        5.4.5 アップデートによって解決された問題
        5.4.6 よくある問題
     5.5 Adaptec 174x
        5.5.1 可能な設定
        5.5.2 自動検出
        5.5.3 自動検出の設定変更
        5.5.4 注意
        5.5.5 よくある問題
     5.6 Adaptec 274x、284x (標準) 294x (アルファ版)
        5.6.1 可能な設定
        5.6.2 自動検出の設定変更
        5.6.3 注意
     5.7 Always IN2000 (標準)
        5.7.1 可能な設定
        5.7.2 自動検出
        5.7.3 自動検出の設定変更
        5.7.4 よくある問題
     5.8 BusLogic MultiMaster ホストアダプタ
        5.8.1 サポートされているアダプタ
        5.8.2 BT-948/958/958D インストールの注意
        5.8.3 BusLogic の広報用メーリングリスト
     5.9 BusLogic FlashPoint ホストアダプタ
     5.10 EATA: DPT SmartCache、SmartCache Plus、SmartCache III、 SmartCache IV、SmartRAID (標準)
        5.10.1 サポートされているボード
        5.10.2 可能な設定
        5.10.3 自動検出
        5.10.4 メーリングリスト
        5.10.5 /proc/scsi サポート
        5.10.6 よくある問題
        5.10.7 注意
     5.11 TMC-1800、TMC-18C30、TMC-18C50、TMC-36C70 のうちのどれかのチップ を使っている Future Domain の 16x0
        5.11.1 可能な設定
        5.11.2 自動検出
        5.11.3 自動検出の設定変更
        5.11.4 アップデートによって解決された問題
        5.11.5 注意
     5.12 NCR5380 汎用 / T130B (標準)
        5.12.1 可能な設定
        5.12.2 自動検出
        5.12.3 自動検出の設定変更
        5.12.4 よくある問題
        5.12.5 アップデートによって解決された問題
        5.12.6 注意
     5.13 NCR53c8xx (標準)
        5.13.1 可能な設定
        5.13.2 自動検出
        5.13.3 アップデートによって解決された問題
        5.13.4 よくある問題
        5.13.5 注意
     5.14 Seagate ST0x/Future Domain TMC-8xx/TMC-9xx (標準)
        5.14.1 可能な設定
        5.14.2 自動検出
        5.14.3 自動検出の設定変更
        5.14.4 アップデートによって解決された問題
        5.14.5 よくある問題
        5.14.6 定義可能なパラメータ
     5.15 PAS16 SCSI (標準)
        5.15.1 可能な設定
        5.15.2 自動検出
        5.15.3 自動検出の設定変更
        5.15.4 定義可能なパラメータ
        5.15.5 よくある問題
     5.16 Trantor T128/T128F/T228 (標準)
        5.16.1 可能な設定
        5.16.2 自動検出
        5.16.3 自動検出の設定変更
        5.16.4 定義可能なパラメータ
        5.16.5 よくある問題
     5.17 Ultrastor 14f (ISA)、24f (EISA)、34f (VLB) (標準)
        5.17.1 可能な設定
        5.17.2 自動検出
        5.17.3 自動検出の設定変更
        5.17.4 よくある問題
     5.18 Western Digital 7000 (標準)
        5.18.1 可能な設定
        5.18.2 自動検出
        5.18.3 よくある問題
     5.19 AM53/79C974 (アルファ版)
        5.19.1 可能な設定
     5.20 qlogic (標準)
  6. ディスク
     6.1 対応している (いない) ハードウェア
     6.2 よくある問題
        6.2.1 「シリンダが 1024 よりも多い」というメッセージ
        6.2.2 /dev/hd* にパーティションが切れない
        6.2.3 リムーバブルメディアドライブからメディアを排出できない
        6.2.4 SCSI ディスクから LILO でブートできない
        6.2.5 fdisk が以下のようなメッセージを出力する
        6.2.6 ブリッジボードに複数のドライブが接続されているのに、 ひとつのドライブしか検出されない。
        6.2.7 スワップ時にシステムがハングする
        6.2.8 Conner の CFP1060S ディスクの内容が壊れる
     6.3 デバイスファイル
     6.4 パーティションの作成
     6.5 ディスクのジオメトリ

  7. CDROM
     7.1 対応している (いない) ハードウェア
     7.2 よくある問題
        7.2.1 CDROM がマウントできない
        7.2.2 CDROM が排出できない。
        7.2.3 オーディオ CD が演奏できない
        7.2.4 workman や xcdplayer がうまく動かない
        7.2.5 CD ROM チェンジャの2番目以降のドライブが動作しない
     7.3 デバイスファイル

  8. テープ
     8.1 対応している (いない) ハードウェア
     8.2 よくある問題
        8.2.1 ブート時にテープドライブが認識されない
        8.2.2 複数のファイルを含んだテープが正しく読み取れない
        8.2.3 圧縮が失敗する
        8.2.4 他のシステムとテープでのデータのやり取りができない
        8.2.5 「No such device」というエラーメッセージが出る
        8.2.6 読み込みには密度を指定できるのに、書き込みではできない
        8.2.7 テープの頭出しをすると全ての SCSI デバイスがフリーズしてしまう
     8.3 デバイスファイル

  9. 汎用デバイス
     9.1 対応しているハードウェア
     9.2 よくある問題
     9.3 デバイスファイル

  10. 購入の手引き
     10.1 転送のタイプ
     10.2 スキャッタ/ギャザ
     10.3 メールボックスインターフェース
     10.4 バスのタイプ
     10.5 複数のデバイス
     10.6 SCSI-I、SCSI-II、SCSI-III、FAST および WIDE オプションなどについて
     10.7 ドライバ機能の比較
     10.8 ボードの比較
     10.9 まとめ

  11. マイナー番号の割り当て

  ______________________________________________________________________

  1.  はじめに

  この文書はフリーです。再配布、変更は Free Software Foundation 発行の
  GNU General Public License (バージョン2またはそれ以降)にしたがって行う
  ことができます。

  この文書は有用であることを目指して配布されていますが、何の保証もありま
  せん。商用性、あるいは特定の目的への適合性は暗黙にも保証されていませ
  ん。詳細については、GNU General Public Licence を参照してください。

  GNU General Public Licence は、この文書に付随して配布されているはずで
  す。もし付随していなかった場合には、 Free Software Foundation, Inc.,
  675 Mass Ave, Cambridge, MA 02139, USA. まで連絡してください。

  もしこの文書を出版する場合には、最新のバージョンに関して筆者
  <drew@PoohSticks.ORG> に問い合わせてくださるようお願いします。もし古い
  バージョンが出版されてしまうと、私は新しいバージョンに答えが載っている
  質問をユーザーから受けることになりますし、それは出版する側にもうれしく
  ないことだろうと思うのです。また、フリー配布を行っているサイトや、競合
  するパッケージや製品に関する記述を改変しないようにお願いします。

     重要:
        ``バグレポート'' セクションに記述された手順に従わないバグレポー
        トや問い合わせは無視されます。

  この文書は、Linux カーネル 1.2.10 およびそれ以降のアルファコードに実装
  された Linux の SCSI サブシステムについて説明しています。これ以前のリ
  ビジョンの SCSI コードはサポートされていませんし、実装されているドライ
  バや性能、利用できるオプションなどに関して大きく異なっていることがあり
  ます。

  linux-scsi メーリングリストに参加すれば、より詳しい情報を得ることがで
  きます。参加するには、本文に以下のように書い
  て、majordomo@vger.rutgers.edu にメールを送ってください。

       subscribe linux-scsi

  メーリングリストから脱退するには、本文に以下のように書いて、同じアドレ
  スへメールを送ってください。

       unsubscribe linux-scsi

  メーリングリストに参加すると、以下のアドレスにメールが送れるようになり
  ます。

       linux-scsi@vger.rutgers.edu

  この文書はあまりユーザーフレンドリーではありませんし、不正確な記述や、
  書き落としていることもあるでしょう。これらの問題を解決するために何か建
  設的なコメントがあれば、私にメールしてください。

  2.  よくある問題

  このセクションでは、よくある問題について説明します。ここに質問の答えが
  見つからなかったら、お使いのホストアダプタやデバイスのセクションも調べ
  て見てください。

  2.1.  不安定なシステム

  再現性のないエラーが発生する場合、ケーブルや終端に問題があることが多い
  のです。

  最近の NCR チップを採用した製品などには、ディジタルフィルタリングやア
  クティブシグナルネゲーションなどの機能を持っているものがあり、これらは
  ケーブルにはそれほど敏感ではありません。

  例えば Adaptec の 154xC や 154xCF、それに 274x など、それ以外の製品は
  ケーブルに非常に敏感で、他のシステムでは問題なく動作するケーブルでも動
  かないことがあります。

  もう一度繰り返します。一部のホストアダプタはケーブルやターミネーターの
  問題に非常に敏感なので、問題が起こった時にはまずケーブルやターミネー
  ターを調べてみてください。

  問題を最小限にするため、以下のようなケーブルを使うべきです。

  1. SCSI-II 準拠をうたっていること。

  2. 特性インピーダンスが 132 オームであること。

  3. インピーダンスの不整合を避けるために、すべてのケーブルを同じメー
     カーのもので揃えること。

  4. アンフェノールなどの有名メーカーの製品であること。

       訳注: SCSI-2 規格では、同期転送を行なう場合のケーブルのイン
       ピーダンスは 90オームから132オームと規定されています。
       SCSI-2 規格は  <ftp://ftp.symbios.com/pub/stan-
       dards/io/x3t10/drafts/scsi2/> にあります。

  ターミネータが接続されるケーブルの両端に十分な電力を供給するため、ター
  ミネータパワーは SCSI バス上のすべてのデバイスから電流の逆流を防止する
  ダイオードを通して供給されなくてはなりません。バスが短絡された場合の損
  傷を防ぐため、TERMPWR はヒューズなどの電流制限デバイスを通して供給され
  なければなりません。

       訳注: SCSI-2 規格では、すべてのイニシエータデバイスはターミ
       ネーターパワーを供給しなければならないと規定されていますが、
       ターゲットデバイスは供給しなくてもよいことになっています。

  複数のデバイスや外部ケーブル、あるいは FAST SCSI 2 を使用する場合に
  は、 SCSI バスの両端にアクティブターミネータを使う必要があります。

  アクティブターミネータについての詳しい情報は、 Comp.Periphs.Scsi の
  FAQ (tsx-11 <ftp://tsx-11.mit.edu>  の pub/linux/ALPHA/scsi にありま
  す) を参照してください。

  2.2.  カーネルコマンドライン

  この文書の中で「カーネルコマンドライン」について言及することがありま
  す。

  カーネルコマンドラインとは、LILO : プロンプトに対してイメージ名の後
  に、あるいは LILO 設定ファイルの append フィールドに指定するオプション
  群のことです。 LILO 設定ファイルは LILO .14 以降では /etc/lilo.conf、
  それ以前のバージョンでは /etc/lilo/config にあります。

  プロンプトを表示させるには、LILO でブートし、起動中に Alt か Ctrl、ま
  たは Shift キーのいずれかを押して下さい。以下のプロンプトが表示されま
  す。

       :

  ここで、ブートするカーネルイメージを選択します。また次のように ? を入
  力すると、カーネルイメージのリストが表示されます。

       :?

       ramdisk floppy harddisk

  選択したコマンドラインオプションでカーネルをブートするには、カーネル名
  の後にオプションのリストをスペースで区切って入力し、最後にリターンキー
  を押せば良いのです。

  オプションは以下の形式で指定します。

       variable=valuelist

  valuelist は単一の値、あるいはスペースを含まない値のリストをコンマで区
  切ったものです。ルートデバイスは例外ですが、それ以外の値は10進または16
  進で指定する数値です。

  例えば、ブート時に認識されない Adaptec 1520 のクローンを持ったシステム
  で Linux をブートするには次のようにします。

       :floppy aha152x=0x340,11,7,1

  ブート時にこれらの値を入力するのが面倒ならば、次の例のように、 LILO 設
  定ファイルの append オプションに指定することも可能です (LILO .13 以降
  が必要です)。

       append="aha152x=0x340,11,7,1"

  2.3.  SCSI デバイスがすべての ID に反応する

  この現象は、そのデバイスがコントローラと同じ ID を持っていることが原因
  です。(コントローラの ID は普通は 7 ですが、ボードによっては違う ID を
  使っている場合があります。例えば Future Domain のボードには 6 を使って
  いるものがあります。)

  ジャンパーの設定を変更してください。

  2.4.  SCSI デバイスがすべての LUN に反応する

  そのデバイスのファームウェアがバグっています。

  暫定的な解決方法として、以下のカーネルコマンドラインオプションを試して
  みてください。

       max_scsi_luns=1

  これでうまくいったら、カーネルソースの drivers/scsi/scsi.c の
  blacklist 変数にある、バグありデバイスのリストにそのデバイスを追加し、
  その情報を Linus Torvalds <Linus.Torvalds@cs.Helsinki.FI> にメールして
  下さい。

  2.5.  エラーフリーのはずのデバイスにセンスエラーが起こる

  この問題は、質の悪いケーブルや不適当なターミネータによって引き起こされ
  ることがあります。

  ``不安定なシステム'' を参照してください。

  2.6.  ネットワーク機能を組み込んだカーネルが動かない

  多くのネットワークドライバの自動検出ルーチンはレジスタへの書き込みを行
  なうため、SCSI ドライバの動作と干渉することがあります。

  2.7.  デバイスは検出されるが、アクセスできない

  カーネルによって SCSI デバイスは検出されるが、アクセスすることができな
  い。 mkfs /dev/sdc とか tar xvf /dev/rst2 などのコマンドが失敗する。

  そのデバイスに対するスペシャルファイルが /dev にないのでしょう。

  Unix のデバイスにはブロックデバイスとキャラクタデバイスの区別があり、
  それぞれのデバイスはメジャーデバイス番号とマイナーデバイス番号で区別さ
  れます。ブロックデバイスはバッファキャッシュを通してアクセスされます
  が、キャラクタデバイスはバッファキャッシュを通さずにアクセスされます。
  メジャーデバイス番号は、使用されるドライバを表します。例えばメジャー番
  号 8 のブロックデバイスは SCSI ディスクを表します。マイナーデバイス番
  号は、そのドライバを通してどのユニットがアクセスされるかを表します。例
  えばメジャー番号 4、マイナー番号 0 のキャラクタデバイスは最初の仮想コ
  ンソールを表し、マイナー番号 1 は次の仮想コンソールを表す、といった具
  合です。しかし、この方法でデバイスをアクセスすることは、「すべてはファ
  イルとして表現される」という Unix/Linux のメタファにそぐわないため、
  キャラクタデバイスとブロックデバイスのスペシャルファイルが /dev の下に
  作成されており、例えば3番目の SCSI ディスクは /dev/sdc、最初のシリアル
  ポートは /dev/ttyS0 としてアクセスできるようになっています。

  スペシャルファイルを作成するには、MAKEDEV スクリプトを使うのが普通で
  す。/dev に cd し、作成したいデバイスを指定して次のように MAKEDEV を実
  行して下さい (root で)。

        ./MAKEDEV sdc

       訳注: パッケージによっては MAKEDEV はスクリプトではなく、バ
       イナリコードになっている場合もあります。

  ワイルドカードも使える「はず」です。

        ./MAKEDEV sd\*

  これによってすべての SCSI ディスクデバイスが作成される「はず」
  (/dev/sda から /dev/sdp までと、それぞれに対して 15個のパーティション
  が作成されるはず) です。

        ./MAKEDEV sdc\*

  これによって /dev/sdc 自身と /dev/sdc 上の15個のパーティションすべてが
  作成される「はず」です。

  カギカッコつきで「はず」といったのは、これが標準的な Unix の振舞いだか
  らです。インストールされている MAKEDEV スクリプトがこのように振舞うと
  は限りませんし、作成するデバイスの数が制限されているかもしれません。

  MAKEDEV では望む結果が得られない場合、mknod コマンドを使って手動でデバ
  イスファイルを作成する必要があります。

  各種 SCSI デバイスのデバイス種別 (ブロックデバイスかキャラクタデバイス
  か)、メジャーデバイス番号、マイナーデバイス番号は ``デバイスファイル''
  に示してあります。

  mknod コマンドの書式は次の通りです。 root で実行して下さい。

       mknod /dev/device b|c major minor

  以下は実行例です。

       mknod /dev/sdc b 8 32
       mknod /dev/rst0 c 9 0

  2.8.  SCSI システムがロックアップする

  ここに書かれている情報はごく限られたものです。使用しているホストアダプ
  タの項も参照してください。ここに書かれている以外の解決法が書かれている
  かもしれません。

  複数のデバイスが同時にアクセスされる時にロックアップすると思われる場合
  には、デバイスのメーカーに連絡して、ファームウェアをバージョンアップす
  ることで問題が解決できないか聞いてみるのがいいでしょう。可能な場合に
  は、SCSI ケーブルを換えてみたり、別のシステムで試してみてください。ま
  た、ディスクのバッドブロックや、マザーボードの DMA 処理 (DMA を行なう
  ホストアダプタの場合) が原因となっていることも考えられます。この種の問
  題には、他にも多くの原因が考えられます。

  同一バス上の複数のデバイスが同時にアクセスされる時にロックアップすると
  思われる場合もあります。同時に複数のコマンド処理を行なえるホストアダプ
  タを使用している場合、この値を 1 に減らして様子を見てください。バス上
  に低速のテープドライブや CDROM がある場合、これは現実的な解決とはなら
  ないでしょう。

  2.9.  カーネルの設定と再構築

  カーネルメモリはページングされないので、使用しない SCSI ドライバは貴重
  なメモリを消費してしまい、小さなシステムではメモリ不足の悪化にもつなが
  ります。

  したがって、使用するシステム向けにチューンアップしたカーネルを構築し、
  必要なドライバだけがインストールされるようにします。

       cd /usr/src/linux

  現在とは違うルートデバイス、あるいは 80x25 VGA 以外のディスプレイを使
  いたい場合で、ブートフロッピーに書き込みを行なう場合には、makefile を
  編集して

       ROOT_DEV =

  および

       SVGA_MODE =

  以上の行にルートデバイスあるいはディスプレイの指定を行ないます。

  パッチを当てた場合、すべてのファイルが再構築されるようにしたい場合があ
  ります。そのためには以下のように入力します。

       make mrproper

  mrproper の結果がどうであれ、

       make config

  として、コンフィギュレーションに関する質問に答えて下さい。それから

       make depend

  を実行し、最後に

       make

  を実行します。終了したら、lilo を設定し直すか、以下のようにしてブート
  フロッピーの作成を行ないます。

       make zdisk

  2.10.  0 以外の LUN が使えない

  SCSI デバイスにはまともに LUN をサポートしていないものが多く、 0 以外
  の LUN にアクセスしようとしたとき SCSI バスをロックさせるなどの悪さを
  します。

  そのため、最近の Linux カーネルはデフォルトでは 0 以外の LUN を見に行
  かないようになっています。0 以外の LUN を使うためには、 max_scsi_luns
  command コマンドラインオプションを使うか、 CONFIG_SCSI_MULTI_LUN オプ
  ションを指定してカーネルを再コンパイルする必要があります。

  普通は LILO コマンドラインに以下のように指定すればいいはずです。

       max_scsi_luns=8

  この変更を行なっても、マルチ LUN デバイスが正しく検出されないことがあ
  ります (SCSI から MFM、RLL、ESDI、SMD などへのブリッジボードに多くみら
  れます)。これは drivers/scsi/scsi.c 中の scan_scsis() にある、以下の
  コードのせいです。

  /* Some scsi-1 peripherals do not handle lun != 0.
     I am assuming that scsi-2 peripherals do better */
  if((scsi_result[2] & 0x07) == 1 &&
     (scsi_result[3] & 0x0f) == 0) break;

  このコードを削除すれば、うまく行くはずです。

  3.  バグレポート

  Linux の SCSI 開発者たちは、古いコードを取っておいているとは限りませ
  ん。したがって、リリースされた最新の Linux カーネル以外では
  (MCC、SLS、 Yggdrasil などのパッケージは最新カーネルから1つから12個も
  古い場合があります) 問題解決が不可能な場合があります。ですから、バグレ
  ポートを送る前に、リリースされた最新のカーネルでもその問題が起こるかど
  うか確かめて下さい。

  カーネルをバージョンアップした後でも、またこの文書をよく読んだ後でも、
  まだバグが存在すると信じられる場合には、Linux メーリングリストの SCSI
  チャネルにバグレポートを送ってください。ここには Linux SCSI ドライバの
  作成に協力している多くの人々が参加しています。

  バグレポートには、ハードウェア構成、ブート時に Linux が表示する正確な
  メッセージ、エラーが発生する場合、それにエラーが存在するソースコードの
  位置など、なるべく多くの情報を書いてください。 ``メッセージの取得'' や
  ``<tt>panic()</tt> の位置を特定する'' に記述されている手続きに従ってく
  ださい。

  最大限の情報が提供されないと、開発者が問題を誤って診断したり、他の問題
  を修正することがより重要だと判断することになってしまうかもしれません。

  要するに、我々がバグを再現させることができない場合、どこがおかしいのか
  を具体的に指摘してくれなければ、バグを修正することはできないということ
  です。

  3.1.  メッセージの取得

  カーネルメッセージロギングシステムを実行していない場合:

  /proc ファイルシステムがマウントされていることを確かめてください。

       grep proc /etc/mtab

  /proc ファイルシステムがマウントされていなければ、マウントしてくださ
  い。

       mkdir /proc
       chmod 755 /proc
       mount -t proc /proc /proc

  カーネルのバージョンとメッセージをログファイルにコピーします。

       cat /proc/version > /tmp/log
       cat /proc/kmsg >> /tmp/log

  1秒から2秒後に CNTRL-C を打ってください。

  ロギングシステムを実行している場合、適当なログファイル (ログファイルの
  情報は /etc/syslog.conf にあります) を覗くか、 dmesg コマンドを使用し
  てください。

  Linux が起動していない場合、DOS 上でフロッピーディスクをフォーマットし
  てください。RAM ドライブではなく、ルートディスケットを直接マウントする
  パッケージを使っている場合には、ルートとしてマウントされるドライブ以外
  で読み書き可能なディスケットを用意するか、 ramdisk ブートオプションの
  使用が必要であることに注意して下さい。

  Linux をパッケージのブートフロッピーからブートします。できればシングル
  ユーザモードで RAM ドライブをルートとしてマウントしてください。そし
  て、

       mkdir /tmp/dos

  とし、さっきフォーマットしたディスケットを挿入し、マウントしてくださ
  い。

       mount -t msdos /dev/fd0 /tmp/dos

  あるいは

       mount -t msdos /dev/fd1 /tmp/dos

  とします。

  ログファイルをフロッピーにコピーします。

       cp /tmp/log /tmp/dos/log

  DOS フロッピーをアンマウントします。

       umount /tmp/dos

  そして Linux をシャットダウンします。

       shutdown now

  リブートして DOS を起動し、好みの通信ソフトを使ってログファイルをメー
  ルしてください。

  3.2.  panic()  の位置を特定する

  他の Unix と同じように、Linux は致命的なエラーが生じるとカーネルの
  panic() 関数を呼び出します。他の Unix とは違って、Linux はコアをスワッ
  プあるいはダンプデバイスにダンプして自動的にリブートすることはありませ
  ん。その代わり、ユーザが手で書き写すことができるように有用なステート情
  報のサマリが表示されます。

       Unable to handle kernel NULL pointer dereference at virtual address c0000004
       current->tss,cr3 = 00101000, %cr3 = 00101000
       *pde = 00102027
       *pte = 00000027
       Oops: 0000
       EIP:    0010:0019c905
       EFLAGS: 00010002
       eax: 0000000a   ebx: 001cd0e8   ecx: 00000006   edx: 000003d5
       esi: 001cd0a8   edi: 00000000   ebp: 00000000   esp: 001a18c0
       ds: 0018   es: 0018   fs: 002b   gs: 002b   ss: 0018
       Process swapper (pid: 0, process nr: 0, stackpage=001a09c8)
       Stack: 0019c5c6 00000000 0019c5b2 00000000 0019c5a5 001cd0a8 00000002 00000000
              001cd0e8 001cd0a8 00000000 001cdb38 001cdb00 00000000 001ce284 0019d001
              001cd004 0000e800 fbfff000 0019d051 001cd0a8 00000000 001a29f4 00800000
       Call Trace: 0019c5c6 0019c5b2 0018c5a5 0019d001 0019d051 00111508 00111502
                   0011e800 0011154d 00110f63 0010e2b3 0010ef55 0010ddb7
       Code: 8b 57 04 52 68 d2 c5 19 00 e8 cd a0 f7 ff 83 c4 20 8b 4f 04
       Aiee, killing interrupt handler
       kfree of non-kmalloced memory: 001a29c0, next= 00000000, order=0
       task[0] (swapper) killed: unable to recover
       Kernel panic: Trying to free up swapper memory space
       In swapper task - not syncing

  EIP: 行の16進数 (この場合 19c905) を書き留め、
  /usr/src/linux/zSystem.map を探してこのアドレス以下で最も大きな数字を
  見つけてください。

       0019a000 T _fix_pointers
       0019c700 t _intr_scsi
       0019d000 t _NCR53c7x0_intr

  これによってどの関数を実行中に panic() が呼ばれたかが分かります。この
  関数を含むソースファイルをデバッグオプションつきでコンパイルし直すか、
  /usr/src/linux/Makefile を編集して -g オプションを CFLAGS の定義に追加
  してカーネル全体をコンパイルし直してください。

       #
       # standard CFLAGS
       #

  つまり、次の行を

       CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe

  このように変更します。

       CFLAGS = -g -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe

  カーネルを再構築します。

       make clean
       make

  /etc/lilo.conf にエントリを作成してカーネルをブートできるようにしま
  す。

       image = /usr/src/linux/zImage
       label = experimental

  そして root で LILO を再実行するか、ブートフロッピーを作成します。

       make zImage

  リブートし、エラー発生時の EIP を記録します。

  script がインストールされている場合、これを起動して以下のデバッグの記
  録をタイプスクリプトファイルに記録しておくのが良いでしょう。
  次のように gdb を実行します。

       gdb /usr/src/linux/tools/zSystem

  そして次のように入力します。

       info line *<your EIP>

  例えば以下のように。

       info line *0x19c905

  これに対して gdb は次のような情報を出力します。

       (gdb) info line *0x19c905
       Line 2855 of "53c7,8xx.c" starts at address 0x19c905 <intr_scsi+641&>
          and ends at 0x19c913 <intr_scsi+655>.

  この情報を記録して下さい。それから以下のように入力します。

       list <line number>

  次のような出力が得られるでしょう。

  (gdb) list 2855
  2850    /*      printk("scsi%d : target %d lun %d unexpected disconnect\n",
  2851                host->host_no, cmd->cmd->target, cmd->cmd->lun); */
  2852            printk("host : 0x%x\n", (unsigned) host);
  2853            printk("host->host_no : %d\n", host->host_no);
  2854            printk("cmd : 0x%x\n", (unsigned) cmd);
  2855            printk("cmd->cmd : 0x%x\n", (unsigned) cmd->cmd);
  2856            printk("cmd->cmd->target : %d\n", cmd->cmd->target);
  2857            if (cmd) {;
  2858                abnormal_finished(cmd, DID_ERROR << 16);
  2859            }
  2860            hostdata->dsp = hostdata->script + hostdata->E_schedule /
  2861                sizeof(long);
  2862            hostdata->dsp_changed = 1;
  2863        /* SCSI PARITY error */
  2864        }
  2865
  2866        if (sstat0_sist0 & SSTAT0_PAR) {
  2867            fatal = 1;
  2868            if (cmd && cmd->cmd) {
  2869                printk("scsi%d : target %d lun %d parity error.\n",

  quit と入力して gdb から抜けます。

  上の情報も記録してください。開発者のカーネルがあなたのカーネルと違って
  いる場合に役立つコンテキスト情報が得られます。

  4.  カーネルモジュール

  ここでは、ローダブルカーネルモジュールのサポート状況と SCSI との関係に
  ついて説明します。

  4.1.  一般的な情報

  ローダブルモジュールは、ユーザーやシステム管理者がカーネルのメモリーに
  ファイルをロードして、カーネルの能力を拡張することを可能にするもので
  す。ローダブルモジュールはハードウェアをサポートするドライバや、ファイ
  ルシステムをロードするためによく使われます。

  SCSI にとってモジュールはいくつかの利点があります。ひとつは、多数のマ
  シンを管理するシステム管理者が、すべてのマシンに対して唯一のカーネルイ
  メージを使用し、マシン特有のハードウェアをサポートするためにはカーネル
  モジュールをロードするといった使い方ができることです。

  配布パッケージの作成者が、どのモジュールをロードするか問い合わせるスク
  リプトをブートフロッピー上に用意することもできます。こうすれば、使われ
  ないドライバのためにメモリを浪費することはなくなりますし、存在しない
  ハードウェアを検出しに行って他のハードウェアをおかしくしてしまう可能性
  も減らすことができます。

  モジュールはラップトップコンピュータにも適しています。ラップトップコン
  ピュータはデスクトップマシンよりもメモリが少ないことが多く、なるべく
  カーネルイメージを小さくして、必要に応じてモジュールをロードすることが
  できるからです。また、モジュールによって PCMCIA SCSI カードのサポート
  も簡単になります。カードが挿入/抜出される時にドライバをロード/アンロー
  ドできるからです。 [ 注意: 現在のところ、PCMCIA をサポートしているのは
  qlogic と 152x のドライバです。]

  最後に、カーネル開発者にとってドライバのデバッグやテストが簡単になると
  いう利点もあります。新しいドライバのテストのために、マシンをリブートす
  る必要がないからです (もちろん、ドライバのバグによってマシンがクラッ
  シュしてしまうことがなければ、の話ですが)。

  モジュールには数々の利点がありますが、大きな制限もあります。ルートディ
  スクパーティションが SCSI デバイス上にある場合、ディスクアクセスに必要
  な SCSI ドライバをモジュールとしてロードすることはできません。これは、
  システムがディスクからモジュールをロードする前に、ルートパーティション
  をマウントしなければならないからです。ローダとカーネルを変更して、カー
  ネルがルートファイルシステムをマウントする前にモジュールをロードできる
  ようにしようと考えている人々がいますから、将来はこの制限もなくなること
  でしょう。

  4.2.  カーネル 1.2.N でのモジュールのサポート

  1.2.N シリーズのカーネルでは、SCSI カーネルモジュールは部分的にサポー
  トされています。ハイレベル (ディスク、テープなど) のドライバはモジュー
  ルとして使用することはできませんが、ローレベル (1542、1522 など) のド
  ライバは必要に応じてロード/アンロードすることができます。ローレベルの
  ドライバはロードされるたびに、まずそのドライバがサポートしているカード
  を探しに行きます。次に、見つかったカードそれぞれに対して、 SCSI バスが
  スキャンされ、内部データ構造がセットアップされて、デバイスが使用できる
  ようになります。

  使わなくなったローレベルドライバは、アンロードすることができます。マウ
  ント中のファイルシステムやオープン中のファイルなどについて使用中カウン
  タが保持されているため、ドライバが管理しているデバイスを使っている間は
  rmmod ユーティリティがデバイスが使用中であるという警告を発し、ドライバ
  はアンロードできないことに注意してください。ドライバがアンロードされる
  と、関連するデータ構造はすべて開放され、システムはモジュールがロードさ
  れる前の状態に戻ります。これは、ドライバはその後必要に応じて再びロード
  できるということを意味します。

  4.3.  カーネル 1.3.N でのモジュールのサポート

  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 でのモ
  ジュールのサポート'' を参照してください。ローレベルドライバがロードさ
  れると、バスがスキャンされ、見つかったデバイスはハイレベルドライバに
  よってサポートされているデバイスとして認識できるかどうか調べられます。
  認識されたドライバは自動的にアタッチされ、活性化されます。

  5.  ホストアダプタ

  この章では Linux でサポートされている各種のホストアダプタに対して、そ
  れぞれのホストアダプタに固有の情報を示します。

  5.1.  サポートされている／いないハードウェア

  5.1.1.  配布カーネルに含まれているドライバ

  Adaptec 152x、Adaptec 154x (DTC 329x のボードも動くようですが、サポー
  トの対象にはなっていません)、 Adaptec 174x、Adaptec 274x/284x (294x を
  利用するには新しいバージョンのドライバが必要です)、 BusLogic
  MultiMaster ホストアダプタ、EATA-DMA および EATA-PIO プロトコルを使う
  ボード (DPT PM2001、PM2011、PM2012A、PM2012B、PM2021、PM2022、PM2024、
  PM2122、PM2124、PM2322、PM2041、PM2042、PM2044、PM2142、PM2144、PM2322、
  PM3021、PM3122、PM3222、PM3224、PM3334、それに加えて
  NEC、AT&T、SNI、AST、Olivetti、および Alphatronix などのメーカーのボー
  ドのいくつか)、 Future Domain 850、885、950、および同社の他のシリーズ
  (ただし 840、841、880、881 のボードは適当なパッチを当てないと動作しま
  せん)、 Future Domain 16x0 (チップが TMC-1800、TMC-18C30、または
  TMC-18C50 のもの)、 NCR53c8xx、PAS16 の SCSI ポート、Seagate ST0x、
  Trantor の T128/T130/T228 ボード、 Ultrastor 14F、24F および
  34F、Western Digital 7000。

  5.1.2.  MCA

  MCA のカードのうち、上にあるサポートされているカードと互換性のあるもの
  (つまり Adaptec 1640 と BusLogic 640) は動作します。

  5.1.3.  アルファ版のドライバ

  アルファ版のドライバの多くが以下のサイトに置かれています。

       <ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi>

  5.1.4.  修正をすれば動作するドライバ

  5.1.4.1.  NCR53c8x0/7x0

  NCR53c8xx のドライバは開発されていますが、このドライバは NCR53c700、
  NCR53c710、NCR53c720 のチップに対してそのままでは適用できません。これ
  らのチップを動作させるには以下のような修正が必要です。修正の難易度につ
  いても示しています。

  訳注: カーネル 2.0.27 では、すでにこれらのチップはサポートさ
  れているようです。

     NCR53c720 (簡単)
        カードの検出部分の変更、初期化の変更、'810 のレジスタアドレスを
        '7xx 用にマッピングするためのコードの変更。

     NCR53c710 (簡単)
        カードの検出部分の変更、初期化の変更 (以上はアセンブラソースの変
        更)、'810 のレジスタアドレスを '7xx にマッピングするためのコード
        の変更、IID 割り込みを扱うための割り込みハンドラを INTFLY 命令か
        らそのエミュレーションに変更。

     NCR53c700, NCR53c700-66 (非常に困難)
        検出部分の変更、初期化の変更、 NCR のコードを DSA を使わないよう
        に変更、 Linux 本体のコードを変更し、コンテキストスイッチを扱え
        るようにする。

  5.1.5.  多分動作しない SCSI ホスト

  パラレル->SCSI アダプタ全部、 Rancho の SCSI ボード、ジャンク品の SCSI
  カード。 Buslogic の FlashPoint ボード (BT-930/932/950 など) もまだサ
  ポートされていません。

  5.1.6.  絶対に 動作しない SCSI ホスト

  Adaptec と非互換で NCR53c8xx を使用していない DTC のボード (3270、
  3280 など)。CMD の SCSI ボード。

  DTC/CMD からプログラムに必要な情報をもらうには、秘密保持契約を結ぶ必要
  があります。これはつまり Linux のドライバを書いても、そのドライバを公
  開できない、ということになります。秘密保持契約に従えばソースは公開でき
  ませんから、これは GPL に反します。また GPL に従う場合はソースを公開し
  なければなりませんから、これは秘密保持契約に反することになります。

  もしこれら以外のサポートされていないハードウェアを動かしたければ、選択
  肢は二つあります。一つはあなた自身がドライバを書くことです (Eric
  Youngdale と私は Linux の SCSI ドライバに関する技術的な質問には通常喜
  んでお答えします)。もう一つはドライバの作成を依頼することです (個人で
  の利用の場合には契約料金が高く付きすぎるでしょうが)。

  5.1.7.  複数のホストアダプタ

  ホストアダプタの中には、一台のシステムで同じ形式のアダプタを複数使うこ
  とができるものがあります ( ``購入の手引き: ドライバ機能の比較'' を見て
  ください)。同じ形式のアダプタを一つのホストで複数使う場合は、通常最も
  低いアドレスのものが scsi0 になり、その次が scsi1... のようになりま
  す。

  種類の違うホストアダプタなら、どんな場合でも複数のアダプタを同時に使う
  ことが可能です。ただしアドレスが競合していないことが条件です。 SCSI コ
  ントローラは drivers/scsi/hosts.c の中の builtin_scsi_hosts[] 配列の順
  番で検索されます。現在の順番は以下の通りです。

       BusLogic, Ultrastor 14/34F, Ultrastor 14F,, Adaptec 151x/152x, Adaptec
       154x, Adaptec 174x, AIC7XXX, AM53C974, Future Domain 16x0, Always
  IN2000, Generic NCR5380, QLOGIC, PAS16, Seagate, Trantor T128/T130,
  NCR53c8xx, EATA-DMA, WD7000, debugging driver.

  ほとんどの場合 (Buslogic と Adaptec のドライバの両方を使っていない場
  合) には、このエントリを入れ替えることで、検索の順番を都合の良いように
  変えることができます。例えば新しい SCSI ホストをシステムに追加したとき
  に、元からのデバイス名を変更したくない場合などがあるでしょう。

  5.2.  よくある問題

  5.2.1.  SCSI がタイムアウトしてしまう

  割り込みがちゃんと有効になっているか、他のボードとの IRQ、DMA、 IO ア
  ドレスなどの競合が起こっていないかを確認してください。

  5.2.2.  BIOS 依存のボード自動検出ルーチンが失敗する

  もしお使いの SCSI アダプタが以下のどれかの場合:

       Adaptec 152x, Adaptec 151x, Adaptec AIC-6260, Adaptec AIC-6360, Future
       Domain 1680, Future Domain TMC-950, Future Domain TMC-8xx, Trantor
       T128, Trantor T128F, Trantor T228F, Seagate ST01, Seagate ST02, West-
       ern Digital 7000

  そしてアダプタがブートアップの時に検出されない場合、すなわち

       scsi : 0 hosts

  や

       scsi%d : type

  といったようなメッセージがシステムにインストールされている (サポート対
  象の) SCSI アダプタそれぞれに対して表示されない場合は、自動検出のルー
  チンがそのボードを知らないために問題が起こっているものと考えられます。

  BIOS を使って自動検出を行うドライバでは、BIOS が有効になっている必要が
  あります。よく調べてください。またほかの機器の BIOS と競合していないか
  もチェックしてください。

  ボードのシグネチャや BIOS のアドレスがドライバに登録されているものと違
  う場合も自動検出は失敗します。

       訳注: シグネチャとは、BIOS の先頭部分に書き込まれている情報
       のことです。

  BIOS がインストールされている場合は、DOS と DEBUG を使ってボードのシグ
  ネチャを調べてください。

  例えば 0xc8000 にあるボードに対しては、DOS から

       debug
       d c800:0
       q

  として、結果を ASCII で Linux メーリングリストの SCSI チャネルに送って
  ください。メッセージの長さとベースアドレス (この場合 0xc8000) からのオ
  フセットも同時に送ってください。メッセージは完全に正確でなければなりま
  せん。またテキストには 16 進と ASCII の両方が含まれる必要があるでしょ
  う。

  BIOS がインストールされていない場合、そしてお使いのドライバが Adaptec
  152x、 Trantor T128、 Seagate のどれかである場合は、コマンドラインやコ
  ンパイル時に検出を強制するように設定を変更することができます。

  お持ちの SCSI カードに対応した節をご覧になってください。 ``不安定なシ
  ステム'' も見てください。

  5.2.3.  メモリマップ方式の I/O を用いたボードの障害

  (Trantor T128 と Seagate のボードが該当します。 Adaptec、 NCR5380 汎
  用、PAS16、Ultrastor のボードには該当しません。)

  この問題は、メモリマップされた I/O ポートが誤ってキャッシュされている
  ときによく起こります。 BIOS 設定で、ボードの占有するアドレス空間を
  キャッシュ不可に設定してください。

  これができない場合は、キャッシュを全てオフにしてください。

  ボードのアドレスをマニュアルで設定する場合は、Linux に必要なのは 16バ
  イトセグメントの値 (マニュアルにはたいていこちらが書いてあります) では
  なく、実際のアドレスであることに注意してください。

  つまり 0xc8000 が正しい値であり、 0xc800 では正しく動作しません。後者
  では恐らくメモリの内容が破壊されてしまうでしょう。

  5.2.4.  アルファ版のドライバでブートフロッピーを作ってブートさせると
  「kernel panic : cannot mount root device」というメッセージ が出る

  カーネルのバイナリイメージを (フロッピーにコピーする前／した後に) 編集
  する必要があります。 2 バイトのフィールド (リトルエンディアンに注意)
  をいくつか修正すれば、お使いのシステムで動くようになります。

  1. オフセット 502 バイト目にあるデフォルトのスワップデバイスの指定を
     0x00 0x00 にセットします。

  2. オフセット 504 バイト目にあるラムディスクのサイズはブートフロッピー
     のサイズ (キロバイト単位) にする必要があります。つまり 5.25 インチ
     の場合は 1200、 3.5 インチの場合は 1440 です。

  バイト表現では以下のようになります。

  3.5" : 0xA0 0x05
  5.25" : 0xB0 0x04

  3. オフセット 508 バイト目にはルートデバイスを設定します。これは 0x00
     0x00 にしておきます (ブートデバイスがルートデバイスとなります)。

  dd か rawrite を用いてファイルをディスクに書き込んでください。そのディ
  スクを A: のフロッピードライブに入れ、「ルートディスクを入れるように」
  というプロンプトが出るのを待って、お使いの配布パッケージのルートフロッ
  ピーを入れてください。

  5.2.5.  標準カーネルに入っていないドライバをインストールするには

  まずドライバの作者が使っているバージョンのカーネルを手に入れる必要があ
  ります。バージョンの情報は恐らくドライバと同時に配布されているドキュメ
  ントに記述があるでしょう。

  最新のものを含め、様々なバージョンのカーネルは

       <ftp://nic.funet.fi/pub/OS/Linux/PEOPLE/Linus>

  にあります。名前は linux-version.tar.gz となっているはずです。

  これらは tsx-11 <ftp://tsx-11.mit.edu> などの多くのサイトにもミラーさ
  れています。

  ソースを手に入れたら /usr/src へ移動し、古い Linux のソースを削除しま
  しょう。バックアップとして残したい場合は以下のようにします。

       mv linux linux-old

  アーカイブを展開します。

       gunzip < linux-0.99.12.tar.gz | tar xvfp -

  パッチを当てます。パッチファイルで記述されているファイル名は、ファイル
  システムの適当なディレクトリを基準として、そこからの相対パスで記述され
  ています。パッチファイル中の出力ファイルの行を調べる (^--- を grep す
  れば表示されます) ことで、この基準ディレクトリがどこかわかります。例え
  ば

       --- ./kernel/blk_drv/scsi/Makefile

       --- ./config.in Wed Sep  1 16:19:33 1993

  のような行がパッチファイルにあったら、基準ディレクトリは
  /usr/src/linux です。

  ドライバのソースを適当な場所に展開します。アーカイブの中身を見るには以
  下のようにします。

       tar tfv patches.tar

  展開したファイルは必要な場所に移動します。 SCSI のドライバファイルは
  /usr/src/linux/kernel/drivers/scsi に置く必要があります。

  パッチファイル中の基準ディレクトリに移動して以下のようにタイプすること
  でパッチが当たります。

       patch -p0 < patch_file

  パッチファイル中のファイル指定における、最初の方のディレクトリを無視す
  るように指定することもできます。例えば

       --- linux-new/kernel/blk_drv/scsi/Makefile

  のような指定がパッチファイル中にあり、これを /usr/src/linux 以下のファ
  イルにパッチ当てしたい場合は、まず /usr/src/linux に cd してから

       patch -p1 < patches

  と打ち込みます。これで linux-new は無視されます。

  パッチ当てが終わったら、失敗したパッチがないか調べてください。パッチが
  失敗すると # という拡張子がついたファイルができているはずです。

       訳注: 普通この拡張子は .rej ですが、patch のコンパイル時のオ
       プションによって、 # になることもあります。

       find /usr/src/linux/ -name "*#" -print

  このようなファイルが存在したら、その中身を見てください。もしかしたら単
  に RCS の識別子が違っているだけかもしれません。この場合は無害ですから
  無視してかまいません。それ以外の場合は、手でパッチ当てをする必要がある
  かもしれません。diff ファイルの形式とパッチ当てに関してはこの文書の範
  囲外です。

  ``カーネルの設定と再構築'' もご覧になってください。

  5.2.6.  パッチのないドライバをインストールするには

  ときにはドライバの作者が自分の書いたドライバの .c や .h ファイルへの
  パッチを提供していない場合もあります。またパッチ元のカーネルのバージョ
  ンが古すぎて、うまくパッチが当たらない場合もありえます。

  1. 拡張子が .c や .h などのファイルを /usr/src/linux/drivers/scsi へコ
     ピーします。

  2. 設定オプションに追加します。

     /usr/src/linux/config.in を編集して

       *
       * SCSI low-level drivers
       *

  以下のセクションに、使用するドライバの設定変数をブール値で追加します。
  例えば以下のようになるでしょう。

       bool 'Always IN2000 SCSI support' CONFIG_SCSI_IN2000 y

  3. Makefile にエントリを追加します。

     /usr/src/linux/drivers/scsi/Makefile を編集して、以下のような行を追
     加します。

       ifdef CONFIG_SCSI_IN2000
       SCSI_OBS := $(SCSI_OBJS) in2000.o
       SCSI_SRCS := $(SCSI_SRCS) in2000.c
       endif

  これらの行は Makefile 中の

       scsi.a: $(SCSI_OBJS)

  の行の前に置きます。指定行の .c のファイルには先ほどコピーした .c の
  ファイルを、.o のファイルには .c のファイルの拡張子を .o に置き換えた
  ものを書きます。

  4. エントリポイントを加えます。

     /usr/src/linux/drivers/scsi/hosts.c を編集して、ヘッダファイルのた
     めの #include 行を追加します。設定ファイルに加えた CONFIG_SCSI の値
     によってプリプロセッサの処理を変更できるようにしておくと良いでしょ
     う。例えば、

       #ifdef CONFIG_SCSI_GENERIC_NCR5380
       #include "g_NCR5380.h"
       #endif

  などの行の後に、以下のような行を加えることになります。

       #ifdef CONFIG_SCSI_IN2000
       #include "in2000.h"
       #endif

  次に Scsi_Host_Template のエントリを scsi_host[] 配列に追加する必要が
  あります。 .h ファイルを見てみると例えば以下のような #define 行がある
  はずです。

       #define IN2000 {"Always IN2000", in2000_detect, \
           in2000_info, in2000_command,    \
           in2000_queuecommand,            \
           in2000_abort,                   \
           in2000_reset,                   \
           NULL,                           \
           in2000_biosparam,               \
           1, 7, IN2000_SG, 1, 0, 0}

  このマクロを scsi_hosts[] 配列に追加します。設定ファイルで定義したシン
  ボルによってプリプロセッサの動作を制御できるようにしておきましょう。

  つまり

       #ifdef CONFIG_SCSI_GENERIC_NCR5380
               GENERIC_NCR5380,
       #endif

  のような行の後に、追加するエントリを以下のように書くわけです。
       #ifdef CONFIG_SCSI_IN2000
               IN2000,
       #endif

  ``カーネルの設定と再構築'' の章も見てください。

  5.2.7.  Compaq のシステムで PCI のボードが動かない

  Compaq のシステムの多くでは PCI デバイスを検出するための 32 ビット拡張
  BIOS がメモリにマップされています。メモリレイアウトが特殊なために、
  Linux では この BIOS をアクセスすることができません。 Linux は (サポー
  トされているはずの) PCI SCSI ボードの検出に失敗すると、以下のような
  メッセージが出力されます。

       pcibios_init: entry in high memory, unable to access

  以下のファイルを手に入れてください。

       <ftp://ftp.compaq.com/pub/softpaq/sp0921.zip>

  これは自己解凍型のアーカイブで、BIOS32 のコードを再配置するためのプロ
  グラムが入っています。

       訳注: この zip ファイルを unzip すると、exe サフィックスを
       持った自己解凍型のアーカイブができます。

  5.2.8.  PCI の SCSI システムが %d Hosts  というメッセージを 出した後に
  ハングアップします。

  PCI のシステムの中には、BIOS 中で割り込みを禁止し、再び割り込みを可能
  にせずに呼び出し元に制御を返してしまうものがあります。以下のパッチでな
  おるはずです。

  --- bios32.c.orig       Mon Nov 13 22:35:31 1995
  +++ bios32.c    Thu Jan 18 00:15:09 1996
  @@ -56,6 +56,7 @@
   #include <linux/pci.h>

   #include <asm/segment.h>
  +#include <asm/system.h>

   #define PCIBIOS_PCI_FUNCTION_ID        0xb1XX
   #define PCIBIOS_PCI_BIOS_PRESENT       0xb101
  @@ -125,7 +126,9 @@
          unsigned long address;          /* %ebx */
          unsigned long length;           /* %ecx */
          unsigned long entry;            /* %edx */
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__("lcall (%%edi)"
                  : "=a" (return_code),
                    "=b" (address),
  @@ -134,6 +137,7 @@
                  : "0" (service),
                    "1" (0),
                    "D" (&bios32_indirect));
  +       restore_flags(flags);

          switch (return_code) {
                  case 0:
  @@ -161,11 +165,13 @@
          unsigned char present_status;
          unsigned char major_revision;
          unsigned char minor_revision;
  +       unsigned long flags;
          int pack;

          if ((pcibios_entry = bios32_service(PCI_SERVICE))) {
                  pci_indirect.address = pcibios_entry;

  +               save_flags(flags);
                  __asm__("lcall (%%edi)\n\t"
                          "jc 1f\n\t"
                          "xor %%ah, %%ah\n"
  @@ -176,6 +182,7 @@
                          : "1" (PCIBIOS_PCI_BIOS_PRESENT),
                            "D" (&pci_indirect)
                          : "bx", "cx");
  +               restore_flags(flags);

                  present_status = (pack >> 16) & 0xff;
                  major_revision = (pack >> 8) & 0xff;
  @@ -210,7 +217,9 @@
   {
          unsigned long bx;
          unsigned long ret;
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__ ("lcall (%%edi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -221,6 +230,7 @@
                    "c" (class_code),
                    "S" ((int) index),
                    "D" (&pci_indirect));
  +       restore_flags(flags);
          *bus = (bx >> 8) & 0xff;
          *device_fn = bx & 0xff;
          return (int) (ret & 0xff00) >> 8;
  @@ -232,7 +242,9 @@
   {
          unsigned short bx;
          unsigned short ret;
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__("lcall (%%edi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -244,6 +256,7 @@
                    "d" (vendor),
                    "S" ((int) index),
                    "D" (&pci_indirect));
  +       restore_flags(flags);
          *bus = (bx >> 8) & 0xff;
          *device_fn = bx & 0xff;
          return (int) (ret & 0xff00) >> 8;
  @@ -254,7 +267,9 @@
   {
          unsigned long ret;
          unsigned long bx = (bus << 8) | device_fn;
  +       unsigned long flags;

  +       save_flags (flags);
          __asm__("lcall (%%esi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -273,7 +288,9 @@
   {
          unsigned long ret;
          unsigned long bx = (bus << 8) | device_fn;
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__("lcall (%%esi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -292,7 +309,9 @@
   {
          unsigned long ret;
          unsigned long bx = (bus << 8) | device_fn;
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__("lcall (%%esi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -303,6 +322,7 @@
                    "b" (bx),
                    "D" ((long) where),
                    "S" (&pci_indirect));
  +       restore_flags(flags);
          return (int) (ret & 0xff00) >> 8;
   }

  @@ -311,7 +331,9 @@
   {
          unsigned long ret;
          unsigned long bx = (bus << 8) | device_fn;
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__("lcall (%%esi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -322,6 +344,7 @@
                    "b" (bx),
                    "D" ((long) where),
                    "S" (&pci_indirect));
  +       restore_flags(flags);
          return (int) (ret & 0xff00) >> 8;
   }

  @@ -330,7 +353,9 @@
   {
          unsigned long ret;
          unsigned long bx = (bus << 8) | device_fn;
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__("lcall (%%esi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -341,6 +366,7 @@
                    "b" (bx),
                    "D" ((long) where),
                    "S" (&pci_indirect));
  +       restore_flags(flags);
          return (int) (ret & 0xff00) >> 8;
   }

  @@ -349,7 +375,9 @@
   {
          unsigned long ret;
          unsigned long bx = (bus << 8) | device_fn;
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__("lcall (%%esi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -360,6 +388,7 @@
                    "b" (bx),
                    "D" ((long) where),
                    "S" (&pci_indirect));
  +       restore_flags(flags);
          return (int) (ret & 0xff00) >> 8;
   }

  5.3.  Adaptec 152x、151x、1505、282x、Sound Blaster 16 SCSI / SCSI
  Pro、 Gigabyte、その他 AIC 6260/6360 を用いた製品 (標準)

  5.3.1.  可能な設定

  BIOS アドレス : 0xd8000, 0xdc000, 0xd0000, 0xd4000,
                  0xc8000, 0xcc000, 0xe0000, 0xe4000
  IO ポート     : 0x140, 0x340
  IRQ           : 9, 10, 11, 12
  DMA           : 使用していません
  IO            : ポートマップ方式

  5.3.2.  自動検出

  BIOS が入っているボードではだいたいうまく動作するようです。入っていな
  いボード (Adaptec 1510、Sound Blaster16 SCSI など) では、カーネルのコ
  マンドラインオプションかコンパイル時の設定変更が必要になります。

  5.3.3.  自動検出の設定変更

     コンパイル時
        PORTBASE、IRQ、SCSI_ID、RECONNECT、PARITY を適当な値に定義してく
        ださい。「定義可能なパラメータ」のところを参考にしてください。

     カーネルのコマンドライン

          aha152x=<PORTBASE>[,<IRQ>[,<SCSI-ID>[,<RECONNECT>[,<PARITY>]]]]

     SCSI-ID はホストアダプタの SCSI ID です。特に ID 7 が必要な他のデバ
     イスをつないでいない限り 7 にしておきましょう。

     I/O アドレスを 0x340 に固定し、IRQ 11、SCSI-ID 7、ディスコネクト/リ
     コネクトを許可するようにするには、以下のようなコマンドラインオプ
     ションを使うことになります。

          aha152x=0x340,11,7,1

  5.3.4.  アップデートによって解決された問題

  1. VLB のボードでドライバが動かない問題。これは 1.0.5 以前のカーネルの
     タイミングの問題でした。

  5.3.5.  定義可能なパラメータ

     AUTOCONF
        コントローラが報告してきた設定を使う (152x のみ)

     IRQ
        割り込みチャネルの設定変更 (9,10,11 or 12) (デフォルト 11)

     SCSI_ID
        AIC-6260 の SCSI ID の設定変更 (0-7) (デフォルト 7)

     RECONNECT
        ターゲットからのディスコネクト/リコネクトの設定を変更する (0 以
        外で許可、0 で禁止)

     DONT_SNARF
        ポートを登録しない (pl12 以下)

     SKIP_BIOSTEST
        BIOS シグネチャのテストを行わない (AHA-1510 または BIOS のない機
        器)

     PORTBASE
        ポートのベースアドレスを指定し、検出を行わない。

       訳注: カーネル 2.0.27 に付属のドライバでは、DONT_SNARF はな
       くなっています。また、PORTBASE は IOPORT に変更されていま
       す。

  5.4.  Adaptec 154x、AMI FastDisk VLB、DTC 329x (標準)

  5.4.1.  可能な設定

       IO ポート      : 0x330 and 0x334
       IRQ            : 9, 10, 11, 12, 14, 15
       DMA チャネル   : 5, 6, 7
       IO             : ポートマップ方式、バスマスタ方式

  5.4.2.  自動検出

  自動検出されるのは I/O アドレス 0x330 と 0x334 だけです。

  5.4.3.  自動検出の設定変更

       aha1542=<PORTBASE>[,<BUSON>,<BUSOFF>[,<DMASPEED>]]

  5.4.4.  注意

  1. BusLogic のボードには Adaptec 1542 にソフトウェア互換のシリーズがあ
     り、 ISA、VLB、EISA、PCI の製品があります。

  2. 無印 154? と、初期の 154?A のボードはスキャッタ/ギャザ機能をサポー
     トしていないので、これらは動作しないことになっています。しかし
     drivers/scsi/aha1542.h 中の AHA1542_SCATTER を 0 にすると、(動作す
     る、という言葉の定義によりますが) 無理矢理動作させることもできま
     す。

       訳注: スキャッタ/ギャザについて補足説明。
       Linux は仮想記憶を採用していることはご存知ですね。 CPU から
       指定された仮想アドレスは、MMU によって物理アドレスに変換され
       ます。しかしこの変換が行われるのは CPU からのアドレスだけで
       あって、 DMA やバスマスタ転送を行う場合のアドレスは、物理ア
       ドレスを使用しなければなりません (PC/AT アーキテクチャの場
       合。ちなみに Sun の SPARCstation などは DMA も仮想アドレスを
       使います)。仮想アドレスから物理アドレスへの対応づけは、ペー
       ジと呼ばれる単位ごとに行われますから、プログラムから見て仮想
       アドレスが連続していても、物理アドレスは飛び飛びになっている
       ということがあり得ます。このような場合にも、コントローラを一
       度設定するだけで、飛び飛びの物理アドレスにデータを転送してく
       れるような機能のことを、スキャッタ/ギャザといいます。コント
       ローラがスキャッタ/ギャザをサポートしていない場合には、飛び
       飛びになっている物理アドレスの個数分だけ、DMA を複数回行なう
       必要があります。

  5.4.5.  アップデートによって解決された問題

  1. バージョン 0.99.10 以前のカーネルは 154?C のカードをサポートしてい
     ません。

  2. バージョン 0.99.14k 以前のカーネルは、 154?C のカードのうち、以下の
     機能をサポートしていません。

     o  1G 以上のディスクに対する拡張マッピングの BIOS 機能

     o  3 台以上のドライブに関する BIOS 機能

     o  SCSI バスの自動検索に関する BIOS 機能

  3. バージョン 0.99.15e 以前のカーネルは 154?C の BIOS 機能のうち、 3
     台以上のドライブを利用する機能を有効にすることができません。また 1G
     以上のディスクに関する拡張マッピング機能を無効にすることもできませ
     ん。

  4. バージョン 0.99.14u 以前のカーネルは 154?CF のカードをサポートして
     いません。

  5. バージョン 1.0.5 以前のカーネルでは、複数のデバイスに対するアクセス
     が同時に起こると排他制御が失敗することがあります。

  5.4.6.  よくある問題

  1. 154xC や 1542xCF で予期しないエラーが出る。

     154xC の初期のカードでは SCSI 信号の立ち上がりが速すぎるため、イン
     ピーダンスの正しくないケーブルを使うと信号の反射が起こってしまうこ
     とがありました。

     新しいボードでは幾分改善されているようですが、それでもケーブルや
     ターミネーションに対しては非常に敏感です。

     この章の「よくある問題」の``その2'' や ``その3''、それに ``よくある
     問題''、 ``不安定なシステム''の章も参考にしてください。

  2. 154xC や 154x に内蔵デバイスと外付けデバイスの両方を接続すると、予
     期しないエラーが発生する。

     おそらくターミネーションの問題でしょう。ソフトウェアでホストアダプ
     タのターミネーションを無効にするには、スイッチ 1 をオフにする必要が
     あります。この章の「よくある問題」の``その1'' や ``その3''、それに
     ``よくある問題''や ``不安定なシステム''の章も参考にしてください。

  3. SCSI システムが完全に固まってしまう。

     複数のデバイスが同時に使用されると、システムがフリーズしたように見
     えることがあります。この場合はデバイスのメーカに連絡して見るとよい
     でしょう。ファームウェアのアップグレードによってこの問題は解決され
     ているかもしれません。最後の手段としては aha1542.h 中の
     AHA1542_MAILBOX を 1 に変更する方法があります。これは SCSI バスに同
     時に出力されるコマンドを実効的に一つだけにするので、この状況を解決
     できるかもしれません。しかし遅いテープドライブや CD-ROM デバイスを
     用いている場合は、実用的な解決法にはならないでしょう。

     この章の「よくある問題」の``その1'' や ``その2''、それに ``よくある
     問題''、 ``よくある問題: SCSI システムがロックアップする'' などの項
     も参考にしてください。

  4. ブート時に「Interrupt received, but no mail」というメッセージが出力
     されて、SCSI デバイスが認識されない。

     BIOS の拡張機能のうち、 1G 以上のディスクに対する拡張マッピング、3
     台以上のディスクのサポート機能、およびバスの自動スキャンを無効にし
     ます。あるいはカーネルを 0.99.14k 以上にアップグレードしましょう。

  5. もし 154xC のボードでタイムアウトエラーが起こる場合には、 Adaptec
     setup プログラムを起動して同期転送交渉を有効にしてみてください。

  6. カーネル 1.2.x で以下のメッセージが出る。

       Unable to determine Adaptec DMA priority.  Disabling board.

  これは古い BusLogic のドライバとの間で衝突が起こってしまうためです。
  カーネルを再構築して BusLogic のドライバを含まないカーネルを作るか、
  カーネルのコマンドラインオプションを用いて BusLogic のドライバに別のア
  ドレスを検出するようにさせます。もし使っている Adaptec のボードがポー
  トアドレス 0x334 を使っており、0x330 を使っているボードが何もないよう
  でしたら、以下のようなコマンドラインオプションになります。

       buslogic=0x330

  7. 1542C と 1540C でディスコネクト機能を有効にしておくと、複数のデバイ
     スへのアクセスが同時に起こったときにシステムがフリーズしてしまう。

     Adaptec のファームウェアのあるバージョンにはバグがあります。 BIOS
     を v2.11 以上にするとこの問題は解決されているそうです。

  5.5.  Adaptec 174x

  5.5.1.  可能な設定

       スロット       : 1-8
       IO ポート      : EISA ボードなので関係無し
       IRQ            : 9, 10, 11, 12, 14, 15
       DMA チャネル   : EISA ボードなので関係無し
       IO             : ポートマップ方式、バスマスタ方式

  5.5.2.  自動検出

  全ての設定で動作します。

  5.5.3.  自動検出の設定変更

  ありません。

  5.5.4.  注意

  1. Adaptec はこのボードの生産を中止しています。

  5.5.5.  よくある問題

  1. Adaptec 1740 のドライバが以下のようなメッセージを出す

       aha1740: Board detected, but EBCNTRL = %x, so disabled it.

  使用中のボードがエンハンストモードではないのでボードを有効にできないた
  めです。 1542 モードでボードを動作させることはできません。

  5.6.  Adaptec 274x、284x (標準) 294x (アルファ版)

       訳注: カーネル 2.0.27 では、294x もサポートされています。

  Adaptec 294x もサポートする新しいバージョンは以下から入手できます。

       <ftp://ftp.ims.com/pub/Linux/aic7xxx>

  5.6.1.  可能な設定

                        274x           284x            294x
       EISA スロット  : 1-12           N/A             N/A
       IO ポート      : N/A            ALL             ALL
       IRQ            : ALL            ALL             ALL
       DMA チャネル   : N/A            ALL             N/A

       IO             : ポートマップ方式、バスマスタ方式

  5.6.2.  自動検出の設定変更

     カーネルのコマンドライン
        拡張マッピングを強制するには以下のようにします。

          aha274x=extended

  5.6.3.  注意

  1. BIOS を有効にしておく必要があります。

  2. 2742AT ボードの B チャンネルは無視されます。

  3. PCI ボードの場合には CONFIG_PCI を指定しておく必要があります。

  5.7.  Always IN2000 (標準)

  5.7.1.  可能な設定

       IO ポート     : 0x100, 0x110, 0x200, 0x220
       IRQ           : 10, 11, 14, 15
       DMA チャネル  : 使用していない
       IO            : ポートマップ方式

  5.7.2.  自動検出

  BIOS は不必要。

  5.7.3.  自動検出の設定変更

  ありません。

  5.7.4.  よくある問題

  1. IDE ドライブとスワッピングが設定されているシステムでは問題があるこ
     とが知られています。

  5.8.  BusLogic MultiMaster ホストアダプタ

  (この節は Leonard N. Zubkoff <lnz@dandelion.com> に著作権があります。)
  (Buslogic のドライバの文書としてより詳細なものを望む方は
  README.BusLogic を見てください。)

                    BusLogic MultiMaster SCSI Driver for Linux

                         Version 1.2.2 for Linux 1.2.13
                         Version 1.3.2 for Linux 1.3.88

                   ftp://ftp.dandelion.com/BusLogic-1.2.2.tar.gz
                   ftp://ftp.dandelion.com/BusLogic-1.3.2.tar.gz

                                   16 April 1996

                                 Leonard N. Zubkoff
                                 Dandelion Digital
                                 lnz@dandelion.com

  BusLogic Inc. は高性能な SCSI ホストアダプタを何種類も設計、生産してい
  ます。 MultiMaster ASIC 技術を用いることで、これらのホストアダプタでは
  使用するバスが異なってもプログラミングのインターフェースは共通化されて
  います。このドライバは現存する全ての BusLogic MultiMaster ホストアダプ
  タをサポートしており、恐らく将来リリースされるシリーズ製品に対してもそ
  のまま (あるいはわずかな修正で) 対応できるでしょう。 FlashPoint アーキ
  テクチャに基づいたホストアダプタはこのドライバではサポートしていませ
  ん。こちらに関しては README.FlashPoint ファイルを参考にしてください。
  Linux ではサポート外の FlashPoint LT から、サポート対象である BT-948
  へアップグレードできる Linux ユーザ向けのキャンペーンに関する情報があ
  ります。

  私がこの完全に新しい BusLogic のドライバを Linux 向けに書くに当たって
  は、以下のような事を目標にしました。まず BusLogic のホストアダプタおよ
  び SCSI 機器の性能を最大限に発揮させること、そして高い信頼性を持ち、高
  性能が要求される重要な用途でも安心して使えるようにすることです。主要な
  SCSI 拡張機能やエラー回復機能は Linux カーネルのコマンドラインオプショ
  ンで設定できるようになっており、必要に応じてドライバの性能やエラー回復
  機能の微調整が可能です。

  BusLogic は私の仕事に非常に好意的でした。私は同社の製品を Linux コミュ
  ニティに強く推薦します。 1995 年の 11 月に、私は彼らの最新の
  MultiMaster 製品である BT-948 PCI Ultra SCSI ホストアダプタをβテスト
  することができました。また 1996 年の 9 月には BT-958 PCI Wide Ultra
  SCSI を同じく提供してもらいました。これによって BusLogic 社は、社内の
  テストグループでは行えなかったようなテストを質量ともに行なうことができ
  ましたし、 Linux コミュニティは Linux 向けによくテストされた高性能なホ
  ストアダプタを販売前に手に入れることができました。この際に私は同社の技
  術スタッフと直接話し合うことができ、彼らの製品の内部動作に関してより深
  く知ることができました。また逆に彼らには Linux コミュニティが必要とし
  ているものとその潜在的な需要について伝えることができました。彼らの
  Linux に対する関心と協力とに深く感謝します。

  Linux で起こった問題についてメーカの技術サポートに問い合わせると「あな
  たの使い方はサポート対象外です」などと言われがちなものですが、
  BusLogic ではそんなことはありません。彼らの最新製品の宣伝では
  「BusLogic のホストアダプタは以下のような全ての主要な OS で用いること
  ができます:... Linux ...」とさえ記述されているのです。

  BusLogic の所在地は 4151 Burton Drive, Santa Clara, California, 95054,
  USA で、電話番号は 408/492-9090、 FAX は 408/492-1542 です。 anonymous
  FTP サイトが  <ftp://ftp.buslogic.com> に、BBS が 408/492-1984 にあり
  ます。 BusLogic の技術サポートには電子メール techsup@buslogic.com 、電
  話 408/654-0760、 FAX 408/492-1542 で連絡をとることができます。ヨー
  ロッパおよび日本における連絡先は Web サイトから得ることができます。

  5.8.1.  サポートされているアダプタ

  以下のリストは BusLogic 社のホストアダプタのうち、現在までにサポートさ
  れているものの一覧です。以下の表にない BusLogic 製品を購入しようと考え
  ている方には、その製品のサポートがされているか、あるいはされる予定があ
  るかどうかを筆者まで尋ねてからにすることをお勧めします。

  "W" Series Host Adapters:

  BT-948      PCI     Ultra Fast Single-ended SCSI-2
  BT-958      PCI     Ultra Wide Single-ended SCSI-2
  BT-958D     PCI     Ultra Wide Differential SCSI-2

  "C" Series Host Adapters:

  BT-946C     PCI     Fast Single-ended SCSI-2
  BT-956C     PCI     Fast Wide Single-ended SCSI-2
  BT-956CD    PCI     Fast Wide Differential SCSI-2
  BT-445C     VLB     Fast Single-ended SCSI-2
  BT-747C     EISA    Fast Single-ended SCSI-2
  BT-757C     EISA    Fast Wide Single-ended SCSI-2
  BT-757CD    EISA    Fast Wide Differential SCSI-2
  BT-545C     ISA     Fast Single-ended SCSI-2
  BT-540CF    ISA     Fast Single-ended SCSI-2

  "S" Series Host Adapters:

  BT-445S     VLB     Fast Single-ended SCSI-2
  BT-747S     EISA    Fast Single-ended SCSI-2
  BT-747D     EISA    Fast Differential SCSI-2
  BT-757S     EISA    Fast Wide Single-ended SCSI-2
  BT-757D     EISA    Fast Wide Differential SCSI-2
  BT-545S     ISA     Fast Single-ended SCSI-2
  BT-542D     ISA     Fast Differential SCSI-2
  BT-742A     EISA    Single-ended SCSI-2 (742A revision H)
  BT-542B     ISA     Single-ended SCSI-2 (542B revision H)

  "A" Series Host Adapters:

  BT-742A     EISA    Single-ended SCSI-2 (742A revisions A - G)
  BT-542B     ISA     Single-ended SCSI-2 (542B revisions A - G)

  AMI の FastDisk ホストアダプタは BusLogic の完全なクローンなので、この
  ドライバで動作させることができます。

  5.8.2.  BT-948/958/958D インストールの注意

  BT-948/958/958D PCI Ultra SCSI ホストアダプタの機能には、Linux をイン
  ストールする際に (場合によっては) 注意しなければならない点があります。

      PCI I/O ポートの割り当て
        工場出荷時の設定では、BT-948/958/958D のボードはマザーボードの
        PCI BIOS が割り当てた I/O ポートのみを認識するようになっていて、
        以前の BusLogic の SCSI ホストアダプタが応答した ISA 互換の I/O
        ポートには応答しません。このドライバは PCI の I/O ポート割り当て
        機能をサポートしていますので、こちらの設定が望ましいでしょう。し
        かし何らかの理由 (パッケージのブートカーネルがこのドライバを使っ
        ていない場合など) で、古い BusLogic のドライバを使わなければなら
        ない場合には、 AutoSCSI の設定で古い ISA 互換の I/O ポートを用い
        るようにすることもできます。

        この古い機能との互換性を持たせるオプションを有効にするには、シス
        テムのブート時に Ctrl-B を押して AutoSCSI を立ち上げ、「Adapter
        Configration」、「View/Modify Configration」と選んで、その中の
        「ISA Compatible Port」を「Disable」から「Primary」か
        「Alternate」に変えてください。このドライバがインストールされた
        後には、I/O ポートの衝突を防ぐため、この「ISA Compatible Port」
        は「Disable」に戻しておく必要があります。少々古い製品である
        BT-946C/956C/956CD にもこの設定オプションがありますが、工場出荷
        時の設定は「Primary」になっています。

     PCI スロットの検索順序
        BusLogic の PCI ホストアダプタを複数枚備えたシステムでは、PCI ス
        ロットの検索の順番が BT-948/958/958D の場合と BT-946C/956C/956CD
        の場合とで逆になることがあります。 SCSI のディスクから正しくブー
        トさせるには、ホストアダプタの BIOS とカーネルの間で、ブートデバ
        イスと認識しているドライブが一致している必要があります。つまり
        PCI ホストアダプタの認識の順序が同じでなければならないのです。マ
        ザーボードの PCI BIOS は通常 PCI ホストアダプタを番号付けする標
        準的な機能を持っており、 Linux のカーネルではこれを用いていま
        す。 PCI BIOS のインプリメントによって、PCI スロットをバス番号と
        デバイス番号の昇順にカウントするか降順にするかは異なっています。

        不幸なことに Microsoft は Windows 95 で PCI スロットの番号付けを
        バス番号とデバイス番号の昇順に固定することにしてしまい、 Windows
        95 対応の証明をもらうにはホストアダプタの BIOS はこの順序を守ら
        なければならなくなりました。したがって BT-948/958/958D の工場出
        荷値ではバス番号とデバイス番号の昇順にホストアダプタの番号付けを
        することになっています。この機能を無効にするには、システムブート
        の際に Ctrl-B で AutoSCSI を起動し、「Adapter Configuration」
        「View/Modify Configreation」を選んで Ctrl-F10 を押してくださ
        い。そして「Use Bus And Device # For PCI Scanning Seq」オプショ
        ンを OFF にしてください。

        このドライバは PCI の検索手順のオプション設定を問い合わせて、ホ
        ストアダプタをアダプタの BIOS と同じ順序で認識するようにしていま
        す。

  5.8.3.  BusLogic の広報用メーリングリスト

  BusLogic の広報用メーリングリストは Linux ユーザに新しいドライバのリ
  リースを知らせたり、 BusLogic SCSI ホストアダプタの Linux サポート関連
  のアナウンスを伝えるのに用いられています。このメーリングリストに参加す
  るには、本文に「subscribe」と書いたメールを BusLogic-announce-
  request@dandelion.com まで送ってください。

  5.9.  BusLogic FlashPoint ホストアダプタ

  (この節は Leonard N.Zubkoff <lnz@dandelion.com> に著作権があります)

  現在のところ FlashPoint LT/DT/LW (BT-930/932/950) の Linux ドライバは
  ありませんし、将来にわたってリリースされるかどうかもはっきりしていませ
  ん。 FlashPoint のボードは MultiMaster のボードとはアーキテクチャが異
  なっていて、オンボードの CPU は無く SCSI シーケンサのみが搭載されてい
  ます。 FlashPoint はデスクトップパソコン用の製品であり、 Linux のよう
  な高機能なマルチタスク OS に特に向いているというわけではありません。

  MultiMaster BT-948/958 にはオンボードの CPU とメールボックスプログラム
  インターフェース機能があり、ホストの OS とアダプタの間で並列化とパイプ
  ライン化が可能になっています。一方 FlashPoint のボードではホストの CPU
  への割り込みが頻繁に起こります。システムの負荷が高くなるとこの割り込み
  が重荷になってしまい、 BT-948/958 が良い性能を維持するのに対し
  て、FlashPoint の性能は急速に低下します。さらに BT-948/958 のファーム
  ウェアには SCSI バスとの信号のやり取りに関する低レベルの命令がすでに含
  まれています。 FlushPoint では Linux のドライバがこれらの命令を全て持
  つ必要があるので、SCSI シーケンサとの間で命令をやり取りして仕事をする
  のに多くの時間がかかってしまいます。実売価格ではそれほど差がありません
  が、 Linux で用いるには BT-948 と BT-958 の方がはっきりと優れているの
  です。

  < 引用はじめ >

                                   ANNOUNCEMENT
                    BusLogic FlashPoint/BT-948 Upgrade Program
                                  1 February 1996

  十月終わりにリリースされて以来、BusLogic FlashPoint LT は Linux コミュ
  ニティのメンバーにとって問題の種になってきました。この Ultra SCSI 対応
  の新製品には Linux ドライバがないためです。 FlashPoint はデスクトップ
  パソコン用の製品という位置づけにあり、Linux のような高性能のマルチタス
  ク OS に特に向いているというわけではありません。しかし PC のベンダは
  FlashPoint を最新製品と言って売り込み、ハイエンドのシステムにも
  MaltiMaster 製品ではなくこちらを付けてきました。その結果、 BusLogic の
  SCSI ホストアダプタは全て Linux でサポートされていると思ってうっかりこ
  のようなシステムを買ってしまった多くの人々が残念な思いをすることになっ
  てしまいました。 FlashPoint はまだサポートされておらず、将来されるにし
  ても相当先の事になるでしょう。

  この問題が認識されて以来、BusLogic は主要な OEM 先と連絡を取り、
  BT-946C/956C MultiMaster のカードを選択可能にすること、そして間違って
  FlashPoint を購入してしまった Linux ユーザに BT-946C へのアップグレー
  ドを可能とすることを申し合わせました。これで新規システムを購入する多く
  の人が救われるでしょうが、しかし Linux ユーザへの FlashPoint サポート
  の問題の一部を解決したにすぎません。 FlashPoint に対応している OS のた
  めに製品を買って、後に Linux への移行を決めた人や、対応していると思っ
  て FlashPoint LT を購入し、返品出来なくなってしまった人には何の助けに
  もならないのです．

  12 月の半ばに私は BusLogic の上位管理職に会談を求め、FlushPoint への
  Linux やフリーソフトの対応に関して話し合いました。 Linux コミュニティ
  に対する BusLogic の態度について様々な噂が流れていたので、これらについ
  て直接聞くのがベストだと思ったのです。私は夜の 11 時に電子メールを送
  り、翌日の午後に会合がもたれました。残念ながら会社における歯車と言うの
  は (特に会社が買収されようとしているときは) 回転が遅いもので、詳細まで
  がはっきり決定されて公式な声明が行われるのは現在となってしまいました。

  BusLogic は現在のところ FlushPoint のドライバを書くために必要な情報を
  サードパーティに公開していません。現存している FlushPoint のドライバは
  全て BusLogic のエンジニアによって直接書かれたものです。外部の開発者が
  助力なしにドライバを書くために必要な、FlushPoint の詳細な情報を記した
  文書はないのです。 BusLogic の社内には FlushPoint のアーキテクチャを公
  開すべきでないという意見の人もおり、この議論はまだ決着していません。い
  ずれにしろ、もしドキュメントが今日入手できたとしても、まっとうに動作す
  るドライバを書くには長いことかかるでしょう。このドライバを書くのに必要
  な努力がその価値に見合うとは私は納得していません。

  しかし BusLogic は Linux コミュニティに高性能な SCSI を提供し続けるこ
  とを確約しており、FlashPoint LT を購入してしまったために Linux を動作
  できないユーザを座視することは望んでいません。そこで BusLogic はアップ
  グレードキャンペーンを行ない、世界中の Linux ユーザに FlushPoint LT と
  新製品 BT-948 MultiMaster PCI Ultra SCSI ホストアダプタとを交換できる
  ようにしました。 BT-948 は BT-946C の後継の Ultra SCSI アダプタであ
  り、BT-946C と FlashPoint LT の両方の利点を受け継いでいます。終端処理
  の自動化やファームウェアのアップグレードが容易な flash PROM の採用、そ
  してもちろん現在の Linux ドライバへの互換性もあります。このアップグ
  レードに必要な価格は 45US$ で、 BusLogic のテクニカルサポートが実行し
  ています。連絡先は電子メールが techsup@BusLogic.com、電話が +1 408
  654-0760、 FAX が +1 408 492-1542 です。

  私は BT-948 のβテスタであり、私が書いた BusLogic ドライバの 1.2.1 と
  1.3.1 にはこの BT-948 へのサポートが含まれています。 Ultra SCSI
  MultiMaster カードへの additional cosmetic サポートは続くリリースで追
  加される予定です。 BusLogic との共同テストの結果、ファームウェアにあっ
  たいくつかのバグが発見・修正されました (ファームウェアのバージョンが
  5.05R 以降であることを確認して下さい)。私が高負荷をかけて使用している
  Linux システムはエラー回復プロセスをテストするに理想的な環境です。エ
  ラー回復は製品のシステムではめったに用いられませんが、しかしシステム全
  体の安定性には必要不可欠の機能です。ファームウェアのエンジニア達と直接
  一緒に仕事ができ、ファームウェアのデバッグ環境下で障害を再現できたこと
  は特に便利でした。私が組込みのファームウェアで仕事していた頃とは大違い
  でした。私は現在性能のテストを行なっており、そう遠くない将来にまとまっ
  たデータを報告できる予定です。

  BusLogic は私にこのアナウンスをするように言ってきました。 FlashPoint
  のサポートに関する質問の多くが私宛の電子メールや私の参加している Linux
  のニュースグループに寄せられているからです。まとめますと、BusLogic は
  Linux ユーザ向けに、サポート外の FlashPoint LT (BT-930) をサポートされ
  ている BT-948 へ $45 でアップグレードする道を提供しています。アップグ
  レードを受けるには、BusLogic のテクニカルサポート techsup@BusLogic.com
  か +1 408 654-0760 へ連絡してください。

                  Leonard N. Zubkoff
                  lnz@dandelion.com

  <引用終わり>

  5.10.  EATA: DPT SmartCache、SmartCache Plus、SmartCache III、 Smart-
  Cache IV、SmartRAID (標準)

  5.10.1.  サポートされているボード

  EATA-DMA プロトコルを使っているもの全て。以下のようなものがあります。

  DPT Smartcache (Plus) family:
  PM2011      ISA     Fast Single-ended SCSI-2
  PM2012B     EISA    Fast Single-ended SCSI-2

  DPT Smartcache III family:
  PM2021      ISA     Fast Single-ended SCSI-2
  PM2021W     ISA     Wide Single-ended SCSI-2
  PM2022      EISA    Fast Single-ended SCSI-2
  PM2022W     EISA    Wide Single-ended SCSI-2
  PM2024      PCI     Fast Single-ended SCSI-2
  PM2024W     PCI     Wide Single-ended SCSI-2
  PM2122      EISA    Fast Single-ended SCSI-2
  PM2122W     EISA    Wide Single-ended SCSI-2
  PM2124      PCI     Fast Single-ended SCSI-2
  PM2124W     PCI     Wide Single-ended SCSI-2
  PM2322      EISA    Fast Single-ended SCSI-2
  PM2322W     EISA    Wide Single-ended SCSI-2

  DPT Smartcache VI family:
  PM2041W     ISA     Wide Single-ended SCSI-2
  PM2041UW    ISA     Ultra Wide Single-ended SCSI-2
  PM2042W     EISA    Wide Single-ended SCSI-2
  PM2042UW    EISA    Ultra Wide Single-ended SCSI-2
  PM2044W     PCI     Wide Single-ended SCSI-2
  PM2044UW    PCI     Ultra Wide Single-ended SCSI-2
  PM2142W     EISA    Wide Single-ended SCSI-2
  PM2142UW    EISA    Ultra Wide Single-ended SCSI-2
  PM2144W     PCI     Wide Single-ended SCSI-2
  PM2144UW    PCI     Ultra Wide Single-ended SCSI-2
  PM2322W     EISA    Wide Single-ended SCSI-2
  PM2322UW    EISA    Ultra Wide Single-ended SCSI-2

  DPT SmartRAID family:
  PM3021      ISA     Fast Single-ended SCSI-2
  PM3021W     ISA     Wide Single-ended SCSI-2
  PM3122      EISA    Fast Single-ended SCSI-2
  PM3122W     EISA    Wide Single-ended SCSI-2
  PM3222      EISA    Fast Single-ended SCSI-2
  PM3222W     EISA    Wide Single-ended SCSI-2
  PM3224      PCI     Fast Single-ended SCSI-2
  PM3224W     PCI     Wide Single-ended SCSI-2
  PM3334W     PCI     Wide Single-ended SCSI-2
  PM3334UW    PCI     Ultra Wide Single-ended SCSI-2

  この他、上記のボードに対応するディファレンシャル SCSI のボードもサポー
  トされています。

  また以下のメーカのコントローラにもサポートされているものがあります。

  NEC、AT&T、SNI、AST、Olivetti、Alphatronix

  5.10.2.  可能な設定

       スロット       : ALL
       IO ポート      : ALL
       IRQ            : 全レベル、エッジトリガ
       DMA チャネル   : ISA のものは全て、EISA/PCI は関係無し
       IO             : ポートマップ方式、バスマスタ方式
       SCSI Channels  : ALL

  5.10.3.  自動検出

  全ての設定で動作します。

  EATA-DMA ドライバの最新バージョンは以下から入手できます。

       <ftp://ftp.i-Connect.Net:/pub/Local/EATA/>

  5.10.4.  メーリングリスト

  EATA メーリングリストは EATA-DMA および EATA-PIO ドライバを使用してい
  る Linux ユーザに議論の場と新バージョンその他のアナウンスの場を提供し
  ています。メーリングリストに参加するには、メッセージ本文に
  「subscribe」と書いたメールを linux-eata-request@i-connect.net 宛に
  送ってください。

  5.10.5.  /proc/scsi  サポート

       より詳細なコマンドの統計をとるには以下を実行してください。

       echo "eata_dma latency" > /proc/scsi/eata_dma<driver_no>

       これを再び off にするには以下のようにします。

       echo "eata_dma nolatency" > /proc/scsi/eata_dma<driver_no>

  5.10.6.  よくある問題

  1. Slackware でコントローラを検出できない。

     解決法は、ascsi* のブートディスクを使うことです。

  2. 1.3.x 以前のカーネルで、IDE ドライバが EATA ボードの ST-506 イン
     ターフェースを検出してしまう。

     a. 以下の 2 例のような状況となります。

          hd.c: ST-506 interface disk with more than 16 heads detected,
            probably due to non-standard sector translation.  Giving up.
            (disk %d: cyl=%d, sect=63, head=64)

     hdc: probing with STATUS instead of ALTSTATUS
     hdc: MP0242 A, 0MB w/128KB Cache, CHS=0/0/0
     hdc: cannot handle disk with 0 physical heads
     hdd: probing with STATUS instead of ALTSTATUS
     hdd: MP0242 A, 0MB w/128KB Cache, CHS=0/0/0
     hdd: cannot handle disk with 0 physical heads

     このために IDE ドライバに問題が生じたら (つまり実際の IDE デバイス
     にアクセスできなくなったら)、EATA ボードの IO ポートか IRQ (あるい
     はその両方) を変えてみてください。

     b. IDE のドライバが自分の扱うべきデバイス (つまり 504MB 以下のハー
        ドディスク) を検出すると、 IDE ドライバは IO ポートと IRQ を割り
        当ててしまうので、 eata のドライバはそれらを使えなくなります。こ
        の場合も IO ポートと IRQ (14、15 以外に) を変更してください。

  3. 古い SK2011 のボードにはファームウェアに問題がある場合があります。
     DPT のカスタマーサポートに連絡してアップデートしてください。

  5.10.7.  注意

  1. もし PCI のボードを使っている場合は CONFIG_PCI をセットする必要があ
     ります。

  5.11.  TMC-1800、TMC-18C30、TMC-18C50、TMC-36C70 のうちのどれかのチッ
  プ を使っている Future Domain の 16x0

  5.11.1.  可能な設定

       <BIOS           : 2.0, 3.0, 3.2, 3.4, 3.5
       <BIOS アドレス  : 0xc8000, 0xca000, 0xce000, 0xde000
       <IO ポート      : 0x140, 0x150, 0x160, 0x170
       <IRQ            : 3, 5, 10, 11, 12, 14, 15
       <DMA チャネル   : 使用しません
       <IO             : ポートマップ方式

  5.11.2.  自動検出

  全ての設定で動作します。 BIOS がインストールされていることが必要です。

  5.11.3.  自動検出の設定変更

  ありません。

  5.11.4.  アップデートによって解決された問題

  1. 古いバージョンでは TMC-18C50 チップに対応していません。従って新しい
     ボードでは動作しないでしょう。

  2. 古いバージョンは最近の BIOS シグネチャの自動検出情報を持っていませ
     ん。

  3. 1.0.9 あるいは 1.1.6 カーネルに含まれているバージョンよりも古いドラ
     イバでは、新しいチップや 3.4 版の BIOS に対応していません。

  5.11.5.  注意

  1. Future Domain の BIOS は SCSI 番号の大きい方からデバイスをスキャン
     します。これは他の SCSI BIOS とは逆になります。従って sda になるの
     は「ドライブ番号」の最後 (つまり C:、D: とあったら D:) のディスクに
     なります。また LILO を使う際には disktab を使用する必要があります。

  5.12.  NCR5380 汎用 / T130B (標準)

  5.12.1.  可能な設定

       IO ポート     : all
       IRQ           : all
       DMA チャネル  : DMA は使用しません
       IO            : ポートマップ方式

  5.12.2.  自動検出

  できません。

  5.12.3.  自動検出の設定変更

     コンパイル時
        GENERIC_NCR5380_OVERRIDE を IO ポート、IRQ、DMA、およびボード形
        式からなる配列データとして定義します。

        ポート 0x330、IRQ 5 の NCR5380 の場合は以下のようになります。

        #define GENERIC_NCR5380_OVERRIDE {{0x330, 5, DMA_NONE, BOARD_NCR5380}}

     ポート 0x350 の T130B の場合なら以下のようになります。

     #define GENERIC_NCR5380_OVERRIDE {{0x350, 5, DMA_NONE, BOARD_NCR53C400}}

     古いバージョンのコードでは BOARD_* のエントリが無視されるかもしれま
     せん。

     IRQ の部分に IRQ_NONE と IRQ_AUTO が使えます。

     カーネルのコマンドライン

        ncr5380=port,irq
        ncr5380=port,irq,dma
        ncr53c400=port,irq

        irq を使わない場合は 255、自動選択する場合は 254 にします。

  5.12.4.  よくある問題

  1. T130B で NCR5380 汎用の古いドライバ (パブリックリリース 6 以前) を
     使うと ncr53c400 コマンドラインオプションが使えない。

     NCR5380 互換レジスタのベースアドレスからのオフセットは 8 です。従っ
     て、ベースアドレスが 0x350 ならば、カーネルのコマンドラインから以下
     のように入力してください。

       ncr5380=0x358,254

  5.12.5.  アップデートによって解決された問題

  1. T130B 等の NCR53c400 を用いたボードで、カーネルがディスクアクセス中
     にフリーズする。

     パブリックリリース 6 以前の NCR5380 汎用ドライバはこれらのボードの
     割り込みに対応していません。バージョンアップして下さい。

  5.12.6.  注意

  1. このドライバはまだ DMA をサポートしていません。擬似 DMA もサポート
     されていません。

  5.13.  NCR53c8xx (標準)

  5.13.1.  可能な設定

  ベースアドレス : ALL
  IRQ            : ALL
  DMA チャネル   : PCI なので関係なし
  IO             : ポートマップ方式、バスマスタ方式

  5.13.2.  自動検出

  PCI BIOS が必要です。デバイスのスキャンやコンフィギュレーション空間の
  読み出しには PCI BIOS のルーチンを使っています。

  ドライバは初期化の際、いくつかのレジスタにプログラムされている値を用い
  ます。従って BIOS がインストールされている必要があるのです。

  5.13.3.  アップデートによって解決された問題

  1. 古いバージョンのカーネルではスワップの際に問題が生じることがありま
     す。 ``ディスク: スワップ時にシステムがハングする'' の節を見て下さ
     い。

  2. 古いドライバでは '815 と '825 を用いたボードを認識できません。

  3. 配布版のカーネルに入っているドライバはリリース 4 または 5 のもので
     す。これらにはまだ重要な機能が実装されていません。例えばディスコネ
     クト/リコネクト (これがないとテープの巻戻しや頭出しのときに SCSI デ
     バイスをフリーズさせてしまう原因になります) や複数のホストアダプタ
     への対応、BIOS なしの動作などです。

       訳注: 最新のカーネル (2.0.27) では、ディスコネクト/リコネク
       トはサポートされています。

  ドライバの最新リリース版は以下のところから手に入ります。

       <ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/ncr53c810>

  現在のところここには 1.2.10 以降へのパッチが置いてありますが、次のリ
  リースでは 1.3.x だけになります。これらのパッチはすべて完璧に当たると
  は限りません。ELF 対応パッチや他のパッチが開発者である私のベースシステ
  ムには既に当たっているからです。もしパッチの際の障害 (４つあります) を
  手動で訂正できない場合は、これらのパッチは使わないで下さい。パッチは最
  新のものだけが必要です。インクリメンタルなパッチではありません。

  次のリリースが待てず、NCR のドライバを 1.3.x カーネルで使いたいという
  方のために、 Harald Evensen <Harald.Evensen@pvv.unit.no> が 1.3.x 用の
  パッチを公開しています。

       <ftp://ftp.pvv.unit.no/pub/Linux/ALPHA/ncr>

  これらのパッチは問題なく当たるはずです。

  まずこれらのディレクトリの README ファイルをすべて読んで下さい。またア
  ルファ版のコードを用いたい場合は NCR メーリングリストにも入って下さ
  い。ここでは暫定的なバグフィックスや次バージョンのリリース情報などがポ
  ストされます。

  参加するには以下のような内容をメール本文に書いて、
  majordomo@colorado.edu に送って下さい。

       subscribe ncr53c810

  参加をやめる場合にはメール本文に以下のような内容を書いて同じアドレスに
  送って下さい。

       unsubscribe ncr53c810

  5.13.4.  よくある問題

  1. DOS ではうまく動いているのに、Linux では割り込み待ちの状態でタイム
     アウトしてしまう、という問題を多くの人が経験しています。

     これはスロットのカードないしはマザーボードのジャンパによる IRQ の
     ハードウェア設定と、BIOS 設定の値が異なっているためであることが多い
     ようです。以下をよく確認して下さい。

     o  使用している IRQ はマザーボードの NCR チップもしくはスロットの
        NCR ボードだけが使っている。

     o  オンボードチップやスロットの IRQ を設定するマザーボード上のジャ
        ンパが BIOS の設定と合っている。

     o  PCI のマザーボードは自動割り当て機能を持っていることがあります
        が、うまく動くとは限りません。

     PCI の INTA しかサポートしていないシステムで、INTB、 INTC、INTD な
     どが選択されているのが原因なこともあります。もしお使いの NCR のボー
     ドに PCI 割り込みラインを選択するジャンパがあったら INTA にしておく
     ようにして下さい。

     最後に、PCI はエッジトリガではなく、レベルセンス割り込みを使わなく
     てはなりません。ボードにジャンパがある場合には、レベルセンスに設定
     されていることを確認してください。それでもうまくいかない場合には、
     もしかすると設定が逆になっているかもしれませんから、エッジトリガの
     方を試してみてください。

     この問題は特に Viglen のマザーボードによく見られます。Viglen のボー
     ドでは IRQ のジャンパ設定がマニュアルの記述とは違っているのです。マ
     ニュアルで IRQ5 と記述されているところが実は IRQ9 なのだそうです。
     しかしあなたのボードではもしかしたらまた違うことになっているかもし
     れません。

  2. S3 928 や Tseng ET4000W32 PCI 等のビデオカードを一緒に用いると、シ
     ステムフリーズなどの問題が生じる。
     これらのチップの (少なくともいくつかのバージョンにおける) ハード
     ウェア上のバグのためです。これらは使わないようにしてください。

  3. 『ベースアドレス 0 のビット 0..1 の内容にしたがって I/O マッピング
     を無効にする』といったメッセージがブート時に出る。

     これはいくつかのシステムに存在するバグのためです。設定レジスタの 4
     バイトの値を読んでくるとき、上位と下位の 16 ビットワードの値を逆に
     返してしまうのです。

  4. システムによっては PCI の遅延書き込みや CPU->PCI のバッファリングを
     有効にすると問題が生じることがあります。問題が生じたら、これらの機
     能はオフにして下さい。

       訳注: 特に neptune や mercury チップセットは危ないようです。

  5. ボード上の BIOS ROM とシステム BIOS の両方に NCR SDMS ソフトウェア
     を持っているようなシステムで、DOS をブートすることができない。

     どちらかの BIOS を無効にすればこの問題は解決します。

  6. 以下のようなメッセージが出てしまう

       "scsi%d: IRQ0 not free, detaching"

  あるいは次のような場合もあります。

       "scsi%d: IRQ255 not free, detaching"

  割り込みラインを設定する NCR のチップの PCI 設定レジスタが、すべて 0
  または 1 にセットされてしまっています。設定に問題があるか (``よくある
  問題: その1'' を見て下さい)、マザーボードの BIOS に欠陥があるのでしょ
  う。

  drivers/scsi/ncr53c7,8xx.c の pci_init() 関数を変更するとこの問題を回
  避することができます。

       irq = my_irq;

  という行を以下の部分の前に追加して下さい。

  return normal_init (tpnt, board, chip, (int) base,
      (int) io_port, (int) irq, DMA_NONE, 1, bus, device_fn,
      options);

  7. いくつかのシステムでは BIOS チップの内容がひどくいかれている場合が
     あります。お使いのボードベンダーの最新の ROM を使っていない場合は、
     バグレポートは送らないようにしてください。

  8. コマンドラインオプションの ncr53c810=xxx などが機能しない

     現在のカーネルでは init/main.c にこれらのオプションへのエントリポイ
     ントが無いためです。これは実は根拠があってのことです。

     コマンドラインオプションが与えられていると、ドライバは必ずそのパラ
     メータでボードの自動検出を行ないます。もしコマンドラインの設定が
     PCI の設定ルーチンで得られるものと異なると、問題が生じることになり
     ます。

     実際にコマンドラインによる指定が必要となるのは、PCI のハードウェア
     と BIOS が壊れている場合でしょうが、この場合はエラー復帰ルーチンも
     機能しないので、コマンドラインオプションにはほとんど価値がないので
     す。

     最後に。利用者がコマンドラインオプションを必要だと考えるのは、ドラ
     イバが設定などのエラーメッセージを出したときだけです。が、ドライバ
     が設定に問題があると言ってきたときは、システムの設定に問題がある
     か、あるいはシステムが壊れているかなのです。このような場合コマンド
     ラインオプションを使っても問題は解決しません。

     init/main.c に適当なエントリポイントを追加すればコマンドラインオプ
     ションを有効にすることはできるかもしれませんが、これは完全にサポー
     トの範囲外であるだけでなく、おそらく動作もしないでしょう。

  9. NCR BIOS を用いていないボード (特に Nexstor のもの) でタイムアウト
     が発生します。

     この種のボードの ROM の中には、電源投入時の同期転送交渉を行うものが
     ありますが、Linux のドライバはその結果を知ることができません。この
     状態で配布版の NCR のドライバが SCSI デバイスと通信しようとするとタ
     イムアウトしてしまい、SCSI バスのリセットや再交渉が実行できないので
     タイムアウトからの復帰ができません。

     この問題が起こったら、ボードの設定プログラムで同期転送を無効にする
     か、最新のアルファ版ドライバを用いて下さい。最新版の NCR ドライバで
     は同期転送が行なえるようになっています。

       訳注: 2.0.27 のドライバは、同期転送をサポートしています。

  10.
     Tyan S1365 '825 ボードで、タイムアウトの際 (特にディスコネクトが有
     効になっていると) 問題が生じる。

     これらのボードの付属ドキュメントにおけるターミネーション設定ジャン
     パの記述は逆になっています。従って off にしたつもりが on に、on が
     off になってしまいます。

     ジャンパの位置を逆にしてみてください。

  5.13.5.  注意

  1. CONFIG_PCI を設定しておく必要があります

  5.14.  Seagate ST0x/Future Domain TMC-8xx/TMC-9xx (標準)

  5.14.1.  可能な設定

       ベースアドレス : 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000
       IRQ            : 3, 5
       DMA チャネル   : 使用されません
       IO             : メモリーマップ方式

  5.14.2.  自動検出

  アドレスに関してのみスキャンを行ないます。 IRQ は 5 とみなされま
  す。BIOS がインストールされている必要があります。

  5.14.3.  自動検出の設定変更

     コンパイル時
        OVERRIDE をベースアドレスに、CONTROLLER を FD もしくは SEAGATE
        のどちらかに、IRQ をシステムの IRQ にそれぞれ定義します。

     カーネルのコマンドライン

          st0x=address, irq または tmc8xx=address,irq
          (0.99.13b 以降のカーネルで動作します)

  5.14.4.  アップデートによって解決された問題

  1. カーネル 0.99.12 以前に添付されていたバージョン 1 以前のドライバで
     は、遅いデバイスとのハンドシェイクに失敗することがあります。

     ハンドシェイクは以下のような手順で行われます。

     a. 1バイトのデータをデータレジスタに書き込み、データレジスタがバス
        にアサートされる

     b. 残り時間 = 12 us

     c. 残り時間 > 0 で、REQ がアサートされていない間待つ

     d. 残り時間 > 0 ならば ACK をアサートする

     e. 残り時間 > 0 で REQ がアサートされている間待つ

     f. ACK をデアサートする

     コマンドを読み込んで処理するのが遅いデバイスでは、 REQ/ACK ハンド
     シェイクに 12us 以上の時間がかかってしまいます。するとドライバで指
     定されている経過時間が過ぎても REQ がデアサートされないので、一つの
     REQ パルスに対して複数バイトのデータを送ってしまいます。

     カーネル 0.99.12 にはバグがあって、アービトレーションのコードを書き
     換えた結果セレクションが失敗するようになっていました。 0.99.13 で修
     正されています。

  5.14.5.  よくある問題

  1. カーネルがパーティションテーブルの読み込みなどのディスクアクセスを
     行なおうとすると、コマンドのタイムアウトが起こる。

     出荷時のボードのデフォルト設定は MSDOS 向けになっています。つまり割
     り込みが無効になっているのです。割り込みを有効にするジャンパスイッ
     チは、 Seagate のボードではジャンパ W3 (ST01) または JP3 (ST02)
     で、IRQ 5 を選択するには F と G のピンをショートします。

  2. ドライバが扱えないデバイス (特に安い SCSI テープドライブや CD-ROM
     など) がある。

     Seagate のボードでは、 SCSI バスの REQ/ACK ハンドシェイクを ISA バ
     スの IO CHANNEL READY および 0WS シグナル (こちらはオプション) と関
     連づけています。残念ながらこれではいつウォッチドッグタイマがタイム
     アウトしたのかを知ることができないため、REQ 信号の立ち下がりを確実
     に知ることができず、結果としてひとつの REQ パルスを複数の REQ パル
     スとみなしてしまうおそれがあります。

     これをちゃんと扱うには REQ 信号が low に変わるのをループで監視し、
     割り込みなどによって信号の切り替わりをキャッチできなかったときのた
     めにタイムアウトを出すようにしなければなりません。この取り扱いをす
     ると性能が落ちてしまうので、全ての SCSI デバイスに適用するのは得策
     ではありません。代わりに scsi_devices 配列の broken フィールドの値
     を用いて、デバイスごとに選択するようにしています。もし問題が生じた
     ら、該当するデバイスを broken が 0 にリセットされないデバイスのリス
     トに登録してください。現在リストには TENEX CDROM ドライブのみが登録
     されています。

  3. Future Domain のボード (特に 840、841、880、881) が動作しない

     Future Domain のボードのいくつかでは Seagate のレジスタマッピングを
     用いていますが、ステータスレジスタの MSG および CD のビットが逆転し
     ていることがあります。

     seagate.h を編集して、STAT_MSG と STAT_CD の定義を交換し、カーネル
     を再コンパイルして下さい。その際 CONTGROLLER を SEAGATE に定義し、
     IRQ と OVERRIDE を適当な値に設定して下さい。

  4. ドライブを fdisk しようとすると、HDIO_REQ か HDIO_GETGEO ioctl が失
     敗したというエラーメッセージや、以下のようなエラーメッセージが表示
     される。

     You must set heads sectors and cylinders.
     You can do this from the extra functions menu.

  ``パーティションの作成'' を見て下さい。

  5. 手動でドライブのジオメトリを設定してからパーティションテーブルを読
     み込もうとすると、『パーティションの境界がシリンダの境界と一致して
     いない』とか『物理的な境界と論理的な境界が一致していない』などと
     いったエラーメッセージが出る。

     ``パーティションの作成'' を見て下さい。

  6. 0.99.13 以前のカーネルでは動くが、新しいカーネルでは動かなくなるシ
     ステムがあるようです。

     古いバージョンのカーネルでは CONTROL と DATA レジスタを Seagate の
     ドキュメントとは逆の順序で代入しており、いくつかのシステムでうまく
     動かなくなることがありました。新しいバージョンでは正しい順序にしま
     したが、これによって他のシステムがうまく動かなくなってしまうことが
     あるようです。

     seagate.c には以下のようなコードがあるはずです。

       cli();
       DATA = (unsigned char) ((1 << target) | (controller_type == SEAGATE ? 0x80 : 0x40));
       CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL |
                   (reselect ? CMD_ATTN : 0);
       sti();

  これを以下のように直せば解決するでしょう。

       cli();
       CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL |
                   (reselect ? CMD_ATTN : 0);
       DATA = (unsigned char) ((1 << target) | (controller_type == SEAGATE ? 0x80 : 0x40));
       sti();

  5.14.6.  定義可能なパラメータ

     FAST または FAST32
        これらを定義すると可能な場合にはブラインド転送を行ないます。

     ARBITRATE
        ホストアダプタが SCSI-II 互換のアービトレーションを行なうように
        します (バスフリーフェーズを待っていきなりセレクションをはじめる
        のではなく)。配布版のソースを再構成する時には、LUN 当たりひとつ
        のコマンドを実行するように変更する予定です (訳注: つまり今はそう
        なっていないということか？)。
     SLOW_HANDSHAKE
        Seagate のソースコードのハンドシェイクのスピードについていけない
        イカレたデバイス (ある種の CD ROM など) を使う時に定義してくださ
        い。

     SLOW_RATE=x
        ハンドシェイクが正しく動作しないときにデフォルトの転送レートにす
        る値を x に指定します。

  5.15.  PAS16 SCSI (標準)

  5.15.1.  可能な設定

       IO ポート      : 0x388, 0x384, 0x38x, 0x288
       IRQ            : 10, 12, 14, 15
               (重要) : IRQ はこのボードのサウンド機能が用いる IRQ とは
                        別にする必要があります。
       DMA            : このボードの SCSI 機能では用いません。
       IO             : ポートマップ方式

  5.15.2.  自動検出

       BIOS は必要ありません。

  5.15.3.  自動検出の設定変更

     コンパイル時
        PAS16_OVERRIDE を IO ポートと IRQ の配列として定義して下さい。
        ポート 0x388、IRQ10 の場合ならば以下のようになります。

          #define PAS16_OVERRIDE ((0x388, 10))

     カーネルのコマンドライン

          pas16=port,irq

  5.15.4.  定義可能なパラメータ

     AUTOSENSE
        定義されていると CHECK CONDITION ステータスを返してくるコマンド
        に対して自動的に REQUEST SENSE が実行されます。

     PSEUDE_DMA
        擬似 DMA のハードウェアを使用できるようにします。性能は I/O ポー
        リングを使ったものの 3-4 倍になります。

     PARITY
        パリティチェック機能を有効にします。まだサポートされていません。

     SCSI2
        SCSI-II タグ付きコマンドキューイングをサポートします。テストされ
        ていません。

     UNSAFE
        割り込みを許可したまま擬似 DMA 転送を行います。高速シリアル通信
        でデータ落ちが生じる場合にだけ使って下さい。その場合でも、転送サ
        イズを変更する方が良い結果が得られるでしょう。

     USLEEP
        ディスコネクトを行なわないデバイスをサポートします。テストされて
        いません。

  5.15.5.  よくある問題

  1. コマンドがタイムアウトしたり強制終了してしまう

     少し前に私がネットにポストした NCR5380 のパッチをインストールするの
     が良いでしょう。このパッチは将来のアルファ版に統合されるはずです。
     このパッチでは古い NCR5380 ドライバにあった排他制御の問題を修正して
     おり、また NCR5380 を用いたボードの複数デバイスのサポートの部分もな
     おしてあります。

     これで直らなければ、PSEUDO_DMA の定義を無効にして下さい。
     drivers/scsi/pas16.c の中の #define PSEUDO_DMA を #undef PSEUDO_DMA
     に修正します。

     後者の方法は最後の手段と思って下さい。この方法を選ぶと著しく性能が
     落ちてしまいます。

  5.16.  Trantor T128/T128F/T228 (標準)

  5.16.1.  可能な設定

  ベースアドレス :  0xcc000, 0xc8000, 0xdc000, 0xd8000
  IRQ            : なし, 3, 5, 7  (全てのボード)
                   10, 12, 14, 15 (T128F のみ)
  DMA            : 使用していません
  IO             : メモリーマップ方式

  5.16.2.  自動検出

  全ての設定において動作します。BIOS がインストールされている必要があり
  ます。

  5.16.3.  自動検出の設定変更

     コンパイル時
        T128_OVERRIDE をベースアドレスと IRQ からなる配列として定義しま
        す。例えばアドレス 0xcc000、IRQ 5 のボードの場合には以下のように
        なります。 IRQ の指定には IRQ_NONE と IRQ_AUTO も使えます。

          #define T128_OVERRIDE ((0xcc000, 5))

     カーネルのコマンドライン

          t128=address,irq

     IRQ を用いないときは -1 を、自動検出には -2 を指定します。

  5.16.4.  定義可能なパラメータ

     AUTOSENSE
        定義されていると CHECK CONDITION ステータスを返してくるコマンド
        に対して自動的に REQUEST SENSE が実行されます。

     PSEUDE_DMA
        擬似 DMA のハードウェアを使用できるようにします。性能は I/O ポー
        リングを使ったものの 3-4 倍になります。

     PARITY
        パリティチェック機能を有効にします。まだサポートされていません。

     SCSI2
        SCSI-II タグ付きコマンドキューイングをサポートします。テストされ
        ていません。

     UNSAFE
        割り込みを許可したまま擬似 DMA 転送を行います。高速シリアル通信
        でデータ落ちが生じる場合にだけ使って下さい。その場合でも、転送サ
        イズを変更する方が良い結果が得られるでしょう。

     USLEEP
        ディスコネクトを行なわないデバイスをサポートします。テストされて
        いません。

  5.16.5.  よくある問題

  1. コマンドがタイムアウトしたり強制終了してしまう

     少し前に私がネットにポストした NCR5380 のパッチをインストールするの
     が良いでしょう。このパッチは将来のアルファ版に統合されるはずです。
     このパッチでは古い NCR5380 ドライバにあった排他制御の問題を修正して
     おり、また NCR5380 を用いたボードの複数デバイスのサポートの部分もな
     おしてあります。

     これで直らなければ、PSEUDO_DMA の定義を無効にして下さい。
     drivers/scsi/pas16.c の中の #define PSEUDO_DMA を #undef PSEUDO_DMA
     に修正します。

     後者の方法は最後の手段と思って下さい。この方法を選ぶと著しく性能が
     落ちてしまいます。

  5.17.  Ultrastor 14f (ISA)、24f (EISA)、34f (VLB) (標準)

  5.17.1.  可能な設定

       IO ポート      : 0x130, 0x140, 0x210, 0x230, 0x240, 0x310, 0x330, 0x340
       IRQ            : 10, 11, 14, 15
       DMA チャネル   : 5, 6, 7
       IO             : ポートマップ方式、バスマスタ方式

  5.17.2.  自動検出

  ポートが 0x310 の場合は機能しません。BIOS は必要ありません。

  5.17.3.  自動検出の設定変更

  コンパイル時のみです。PORT_OVERRIDE を定義します。

  5.17.4.  よくある問題

  1. ポートアドレス 0x310 は自動検出されません。また、もしネットワーク機
     能が有効になっていると衝突の原因になってしまいます。

     別のアドレスを用いて下さい。

  2. Ultrastor で 0x330 を用いると、サウンドドライバが自動検出を行なった
     際にシステムがハングアップすることがあります。

     別のアドレスを用いて下さい。

  3. 他のドライバが行なう自動検出は必ずしも安全ではなく、また様々なアド
     レスが探索されます。もし検出に失敗したりシステムがブート時にハング
     アップするときは、別のアドレスを試してみてください。

     おすすめのアドレスは 0x340 です。これは動くことがわかっています。

  4. SCSI デバイスがひとつも検出されず、Ultrastor に接続されている SCSI
     ハードディスクが IDE ハードディスクとして認識されるが、 IDE ドライ
     バにはサポートされない。この場合以下のようなメッセージが出力される
     でしょう。

     hd.c: ST-506 interface disk with more than 16 heads detected,
     probably due to non-standard sector translation.  Giving up.
     (disk %d: cyl=%d, sect=63, head=64)

  これは Ultrastor のボードを WD1003 のエミュレーションモードで動作させ
  ているときに起こります。解決法は二つあります。

     a. Ultrastor をネイティブモードに切り替えます。こちらがお薦めです。
        なぜなら SCSI ドライバは IDE ドライバより高速だからです。特にク
        ラスタ単位の read/write パッチが当たっている場合は高速で、ファイ
        ルシステムを介して 2M/sec 以上の転送レートが得られているユーザも
        いるそうです。

        もしハードディスク以外のデバイスを用いていたり、2 台以上のハード
        ディスクを Ultarstor に接続している場合は、こちらが唯一の選択肢
        となります。

     b. カーネルのコマンドラインオプションを用います。

          hd=cylinders,heads,sectors

     とするとデフォルト設定が上書きされ、ブートできるようになります。シ
     リンダ、ヘッダ、セクタの数はそれぞれ 2048、16、255未満にして、それ
     らを掛けた値が本来の値と等しくなるようにします。

     Linux から fdisk を用いる際にも手動でディスクのジオメトリを指定する
     必要があります。そうしないとパーティションエントリが正しく書き込ま
     れないため、 Linux では動作しますが DOS ではシリンダ／ヘッド／セク
     タ各エントリの取得に失敗するので動作しなくなってしまいます。

     一度 Linux が立ち上がってしまえば、include/linux/config.h の
     HD_TYPE マクロを適当な値に定義して再コンパイルすることで、手動ブー
     トしなくてもすむようになります。

  5.18.  Western Digital 7000 (標準)

  5.18.1.  可能な設定

       BIOS アドレス  : 0xce000
       IO ポート      : 0x350
       IRQ            : 15
       DMA チャネル   : 6
       IO             : ポートマップ方式、バスマスタ方式

  5.18.2.  自動検出

  BIOS がインストールされている必要があります。

  5.18.3.  よくある問題

  1. チップやファームウェアにいくつかのバージョンがあります。おそらく
     バージョン 3 のボードは動作しません。バージョン 5 は大丈夫です。無
     印のチップは動作せず、'A' が最後についているものは動作します。

  2. このボードは、ドライバでサポートしていない BIOS アドレスを使うこと
     ができるようです。この場合ドライバがサポートしているアドレスを使っ
     て下さい。また ``バグレポート'' に従ってバグレポートを送って下さ
     い。

  5.19.  AM53/79C974 (アルファ版)

       <ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/AM53C974-0.3.tar.gz>

  にあります。

       訳注: カーネル 2.0.27 には含まれています。

  5.19.1.  可能な設定

       IO ポート      : all
       IRQ            : all
       DMA チャネル   : 6
       IO             : ポートマップ方式、バスマスタ方式 (unintelligent)

  5.20.  qlogic (標準)

  ねえ Drew、この章はどこにあるの？ 目次にしかないよ ;-) - by D.F.

  6.  ディスク

  ここでは、ディスクドライブに固有の情報を示します。

  6.1.  対応している (いない) ハードウェア

  すべてのダイレクトアクセス SCSI デバイス (訳注: これは「ハードディス
  ク」を意味する SCSI 用語です) で、ブロックサイズが 256バイトか 512バイ
  ト、または 1024バイトのものは使えるはずです。これ以外のブロックサイズ
  は使えませんが、多くの場合ブロックサイズまたはセクタサイズは SCSI の
  MODE SELECT コマンドを使って変更できます。

  セクタサイズとは、デバイスのセクタに割り当てられたデータバイト数のこと
  です。例えば、CDROM のセクタサイズは 2048 です。

  ブロックサイズとは、デバイスとのインターフェースに使用される論理ブロッ
  クの大きさのことです。これは通常セクタサイズと等しいのですが、複数の小
  さな物理セクタ (55M サイクエストドライブの場合には 256バイト) を大きな
  論理ブロックにマップしたり、逆にひとつの物理セクタを複数の論理ブロック
  に分割する (例えば、SUN コンパチブルの CDROM ドライブのブロックサイズ
  は 512 バイトです) こともあります。

  リムーバブルメディアデバイスには、Bernouli、フロプティカル、MO ドライ
  ブ、 Syquest などの種類があります。

  理論的には、1テラバイトまでのドライブは使えるはずです。 9ギガバイトま
  での小さなドライブに関しては、まったく問題はありません。

  6.2.  よくある問題

  6.2.1.  「シリンダが 1024 よりも多い」というメッセージ

  パーティションを切るときに、「シリンダが 1024 よりも多い」という警告
  メッセージが表示される。あるいは、1024 以降の論理シリンダを含んだパー
  ティションからブートできない。

  これは、BIOS の制限によるものです。

  詳しい説明は、``ディスクのジオメトリ'' および``パーティションの作成''
  を参照してください。

  6.2.2.  /dev/hd*  にパーティションが切れない

  /dev/hd* は SCSI デバイスではありません。 SCSI デバイスは /dev/sd* で
  す。

  正しいデバイス名とパーティションの切り方については、 ``デバイスファイ
  ル''や ``ディスクのジオメトリ''、それに ``パーティションの作成'' を参
  照してください。

  6.2.3.  リムーバブルメディアドライブからメディアを排出できない

  Linux は、メディアがマウントされている時にはドライブのドアをロックしま
  す。予期せぬメディアの入れ替えによってファイルシステムが壊れるのを防ぐ
  ためです。

  まずディスクをアンマウントしてください。

  6.2.4.  SCSI ディスクから LILO でブートできない

  SCSI ドライバと BIOS との間で、使用すべき BIOS マッピングに関して情報
  が食い違っていることがあります。この場合、ブート時に LILO が「LI」まで
  表示してハングするなどの問題を引き起こすことがあります。

  この問題を回避するためには、DOS で使われる BIOS ジオメトリマッピングを
  調べて、これを /etc/lilo/disktab に書き込む必要があります。

  あるいは、「linear」jfile 設定オプションを使うという方法もあります。

  6.2.5.  fdisk  が以下のようなメッセージを出力する

       You must set heads sectors and cylinders.
       You can do this from the extra functions menu.

  そして fdisk を再起動すると、変更したはずのディスクジオメトリが変更さ
  れていない。

  ``パーティションの作成'' を参照してください。

  6.2.6.  ブリッジボードに複数のドライブが接続されているのに、 ひとつの
  ドライブしか検出されない。

  Linux は ANSI SCSI リビジョン 1 以前の SCSI デバイスに対しては、 0 以
  外の LUN を探しに行きません。 0以外の LUN を認識させたけれ
  ば、drivers/scsi/scsi.c の scan_scsis() 関数を変更する必要があります。

  6.2.7.  スワップ時にシステムがハングする

  この問題はすでに解決されています。カーネルを 1.1.38 にバージョンアップ
  してください。

  6.2.8.  Conner の CFP1060S ディスクの内容が壊れる

       訳注: 現在 Conner は Seagate に買収されています。

  これは、先読みとキャッシュに関するマイクロコードのバグのためです。

  Soenke Behrens (Conner テクニカルサポート) からのメールより :

       過去数週間の間に、Linux オペレーティングシステムを使用してい
       て Conner CFP1060x 1GB SCSI ドライブに深刻な問題が生じたとい
       う電話を何人かのお客様から頂きました。症状は、ファイルシステ
       ムの破壊 (inode の損傷) がシステムブート時に e2fsck によって
       報告されるというものです。
       CFP1060x (マイクロコードリビジョン 9WA1.62/1.66/1.68) と
       Linux を使用されているお客様には、マイクロコードの修正が御利
       用頂けます。マイクロコードをバージョンアップするために
       は、DOS ブートディスクとハードディスクドライブにアクセスでき
       る ASPI ドライバが必要です。バージョンアップによって、新しい
       キューイングと先読みのコードがドライブの不揮発性 SCSI RAM に
       ダウンロードされます。
       マイクロコードリビジョンが 9WA1.60 のディスクで問題が生じた
       場合には、最寄りの Conner サービスセンターに連絡して、ディス
       クをバージョンアップしてもらう必要があります。マイクロコード
       のリビジョンは、ドライブ上のラベルと、ドライブの下側の IC の
       ひとつに貼られたラベルに書いてあります。
       自分でバージョンアップできる自信のある方は、Conner テクニカ
       ルサポートに連絡して、最新のマイクロコードを入手してくださ
       い。ヨーロッパの Conner テクニカルサポートの電話番号は
       +44-1294-315333 です。アメリカの Conner テクニカルサポートの
       電話番号は 1-800-4CONNER です。
       敬具
       Soenke Behrens
       ヨーロッパテクニカルサポート

  6.3.  デバイスファイル

  SCSI ディスクのブロックデバイスメジャー番号は 8 で、BSD のような
  「ロー」デバイスは存在しません。

  ひとつの SCSI ディスクには、16個のマイナー番号が割り当てられています。
  minor % 16 == 0 はディスク全体を表し、1 <= (minor % 16) <= 4 は4つのプ
  ライマリパーティションを、5 <= (minor % 16) <= 15 は拡張パーティション
  (訳注: 正確には「拡張パーティション中の論理ドライブ」でしょう) を表し
  ます。

  たとえば、以下のような構成では次のようにデバイス名が割り当てられます。
  (ひとつのホストアダプタの場合)

  Device                  Target, Lun     SCSI disk
  84M Seagate             0       0       /dev/sda
  SCSI->SMD bridge disk 0 3       0       /dev/sdb
  SCSI->SMD bridge disk 1 3       1       /dev/sdc
  Wangtek tape            4       0       none
  213M Maxtor             6       0       /dev/sdd

  標準的なデバイス名の付け方は、次のようになります。

  /dev/sd{letter} ディスクデバイス全体 ((minor % 16) == 0)
  /dev/sd{letter}{partition} そのデバイス上のパーティション (1 <= (minor
  % 16) <= 15)

  たとえば次のように。

  /dev/sda        block device major 8 minor 0
  /dev/sda1       block device major 8 minor 1
  /dev/sda2       block device major 8 minor 2
  /dev/sdb        block device major 8 minor 16

  6.4.  パーティションの作成

  SCSI ディスクにパーティションを切るには、DOS、OS/2、Linux やその他の標
  準的なパーティションの作成方法をサポートしている OS 上のパーティション
  作成プログラムを使用することができます。

  Linux の fdisk プログラムを起動する場合は、必ずデバイスをコマンドライ
  ンで指定してください。例えば最初の SCSI ディスクにパーティションを作成
  する場合には、以下のように入力します。

       fdisk /dev/sda

  デバイスを指定しなかった場合には、デフォルトの /dev/hda が使われてしま
  うことがあります。これは SCSI ディスクではありません。

  fdisk が次のようなメッセージを出力することがあります。

       You must set heads sectors and cylinders.
       You can do this from the extra functions menu.

       Command (m for help):

  あるいは HDIO_REQ または HDIO_GETGEO ioctl が失敗したというメッセージ
  が出力されることもあります。こういう場合には、``ディスクのジオメトリ''
  での説明にしたがって、ディスクのジオメトリを入力しなければなりません。
  また LILO を使ってそのディスクからカーネルをブートするには、
  /etc/disktab にもディスクジオメトリを設定する必要があります。

  ディスクジオメトリを入力した場合には、その後 fdisk を起動しようとする
  と同様のメッセージが表示されます。これは PC がディスクジオメトリ情報を
  パーティションテーブルに保存しないためで、異常ではありません。それ自体
  は問題とはなりませんし、そのドライブに作成したパーティションを Linux
  でアクセスすることにも問題はありません。しかし、いくつかのメーカーの出
  来の悪いインストールプログラムの中には、これをうまく処理できないものも
  あります。その場合にはメーカーに連絡し、プログラムを修正するよう要求し
  てください。

  場合によっては、シリンダ 1024 以降に食い込んだパーティションに関する警
  告メッセージが出力されることがあります。そのようなパーティションを作成
  した場合、そのパーティションから LILO を使って Linux カーネルをブート
  することはできません。しかし、一部または全部がシリンダ 1024 以降にある
  ルートパーティションを作成できないわけではありません。シリンダ 1024 以
  下に小さな /boot パーティションを作成するか、既存のパーティションから
  カーネルをブートすればよいからです。

  6.5.  ディスクのジオメトリ

  Linux では、ディスクは SCSI ホストアダプタから見える通りに、エラーのな
  い 0 から N-1 まで番号づけされた N 個のブロックとして認識されます。一
  方 DOS や BIOS では賢いディスクにも過去の慣習が適用されてしまい、この
  ようなリニアなアドレッシングが恣意的にヘッド/シリンダ/セクタにマッピン
  グされてしまいます。

  このことは、Linux でドライブにパーティションを切る場合に問題となるおそ
  れがあります。DOS や BIOS がどのようにジオメトリをマップするかを知る汎
  用的な方法がないからです。多くの場合 HDIO_GETGEO ioctl() がこのマッピ
  ングを知るために使えます。残念ながら、一部のメーカー (Seagate) のよう
  に、ひねくれた、標準から外れた、しかも文書化されていない方法でマッピン
  グを行っている場合、この方法は使えず、ジオメトリをマニュアルで指定する
  必要があります。

  マニュアル指定には、いくつかの方法があります。

  1. DOS を使うつもりがないか、LILO がインストールされているドライブから
     カーネルをブートする場合、ヘッド * シリンダ * セクタ * 512 < ドライ
     ブのサイズ (バイト数) となるようにそれぞれの値を設定する (メガバイ
     トは 2^20 バイトと定義されます)。

     1 <= heads <= 256
     1 <= cylinders <= 1024
     1 <= sectors <= 63

  2. BIOS マッピングを使う方法。場合によっては、ディスクの SCSI ID を 0
     に設定し直し、2番目の IDE ドライブ (もしあるならば) をディセーブル
     する必要があります。

  NU (訳注: Norton Utilities のことでしょう) のようなプログラムを使うこ
  ともできますし、次のプログラムも使えます。

  begin 664 dparam.com
  MBAZ``##_B+^!`+N!`(H'0SP@=/D\,'5:@#]X=`6`/UAU4(!_`3AU2H!_`P!U
  M1(I7`H#J,(#Z`7<Y@,*`M`C-$PCD=3-14HC()#\PY.@R`.@J`%J(\/[`,.3H
  M)0#H'0!8AL2Q!M+L0.@7`+K"`;0)S2'#NIP!ZR"ZQ0'K&[K5`>L6N]T!,=*Y
  M"@#W\8#",$N(%PG`=>^)VK0)S2'#=7-A9V4Z(&1P87)A;2`P>#@P#0H@("!O
  L<B`@9'!A<F%M(#!X.#$-"B1);G9A;&ED(&1R:79E#0HD("`D```````D``!O
  `
  end

  このプログラムを実行すると、コマンドラインで指定した BIOS アドレス
  (0x80 が最初のディスク、0x81 が 2番目のディスク) のドライブについて、
  セクタ数、ヘッダ数、シリンダ数をプリントします。

  つまり、dparam 0x80 を実行して以下のように表示された場合、

  60      17      1007

  C: ドライブのセクタ数が 60、ヘッド数が 17、シリンダ数が 1007 であるこ
  とを示しています。

  7.  CDROM

  ここでは、CDROM 特有の情報を示します。

  7.1.  対応している (いない) ハードウェア

  ブロックサイズが 512 または 2048 バイトの SCSI CDROM は使えます。これ
  以外のブロックサイズはサポートされていません。

  7.2.  よくある問題

  7.2.1.  CDROM がマウントできない

  ISO-9660 CDROM をマウントするための正しいコマンドは以下の通りです。

       mount -t iso9660 /dev/sr0 /mount_point -o ro

  このコマンドが正しく動作するためには、SCSI のサポートと使用しているホ
  ストアダプタや SCSI CDROM のドライバ、それに iso9660 ファイルシステム
  がカーネルに組み込まれている必要があります。

  カーネル 1.1.32 では、CDROM のようなリードオンリーのデバイスはデフォル
  トの読み書き可能オプションではマウントできないことに注意してください。

  7.2.2.  CDROM が排出できない。

  Linux は、メディアがマウントされている時にはドライブのドアをロックしま
  す。予期せぬメディアの入れ替えによってファイルシステムが壊れるのを防ぐ
  ためです。

  まずディスクをアンマウントしてください。

  7.2.3.  オーディオ CD が演奏できない

  workman あるいは xcdplayer などのプログラムを使ってください。

  7.2.4.  workman  や xcdplayer  がうまく動かない

  オーディオ機能の制御は SCSI-II のコマンドセットに含まれているので、
  SCSI-II に準拠していないドライブでは動作しないでしょう。また、多くの
  SCSI-I CDROM ドライブと SCSI-II CDROM ドライブの一部には、 SCSI-II コ
  マンドセットではなく、独自のコマンドセットを使ってオーディオ機能にアク
  セスするものがあります。 NEC のドライブについては、この種のコマンド
  セットを使うようにパッチがあたった xcdplayer があります。
  <ftp://tsx-11.mit.edu/pub/linux/BETA/cdrom> を探してみてください。

  これらのプログラムは、SCSI 以外の CDROM にも使える可能性があります。ド
  ライバが SCSI ドライバと同様の ioctl を実装していることが条件です。
  7.2.5.  CD ROM チェンジャの2番目以降のドライブが動作しない

  たいていの CD チェンジャはディスクごとに一つの論理ユニットを割り当てま
  す。論理ユニットに対応するスペシャルファイルを作成してあるかどうか確か
  めてください (``デバイスファイル''を参照のこと)。また、``0 以外の LUN
  が使えない''も読んでください。

  7.3.  デバイスファイル

  SCSI CD ROM のメジャーデバイス番号は 11 です。

  マイナー番号は動的に割り当てられます (``ディスク'' や ``デバイスファイ
  ル'' を見てください)。最初に見つかった CDROM のマイナー番号が 0、2番目
  に見つかった CDROM のマイナー番号が 1、という具合になります。

  標準的なデバイス名は /dev/sr{数字} ですが、パッケージによっては以下の
  例のように /dev/scd{数字} を使っているものもあります。

  /dev/sr0        /dev/scd0
  /dev/sr1        /dev/scd1

  8.  テープ

  この章では SCSI のテープドライブに特有の情報を記述しています。

  8.1.  対応している (いない) ハードウェア

  固定長ブロックのドライブにも可変長ブロックにも対応しています。ただしド
  ライバで定義しているバッファよりもブロックは小さくなければなりません。
  配布版カーネルのソースではドライバのバッファは 32K に設定されていま
  す。

  ブロックサイズやバッファリング、記録密度などのパラメータは ioctl を
  使って (通常は mt プログラムで) 設定されます。この設定はデバイスが
  close/reopen した後も保持されます。

  ほとんど全てのドライブが動作します。以下に一部を示します。

  o  Archive Viper QIC ドライブ。150M のモデルも 525M も動作します。

  o  Exabyte の 8mm ドライブ

  o  Wangtek 5150S ドライブ

  o  Wangdat の DAT ドライブ製品群

  8.2.  よくある問題

  8.2.1.  ブート時にテープドライブが認識されない

  テープをドライブに入れてからブートしてみてください。

  8.2.2.  複数のファイルを含んだテープが正しく読み取れない

  複数のファイルをテープから読み出すとき、最初の tar は成功し、その次の
  tar はなにも出力せずに終わります。さらに次の tar を行なうと二つめの
  ファイルが読めます。

  tar のようなユーザレベルのプログラムはファイルマークを認識しません。最
  初の tar は先頭のファイルの最後まで読み込みます。 2 度目の tar はファ
  イルマークの位置で読み込みを始めるのでなにも出力しません。しかしこれに
  よりテープは次のファイルの先頭に移動するので 3 度目の tar は 2 番めの
  ファイルを読み込みます。

  次のファイルにスキップするためには、巻戻しをしないデバイス (/dev/nst?)
  に mt コマンドを用いて下さい。

  8.2.3.  圧縮が失敗する

  圧縮プログラムはファイルの最終ブロックに追加される 0 のデータを正しく
  扱うことができません。

  警告やエラーを防ぐには、圧縮ファイルを .tar ファイルの中にまとめて下さ
  い。つまり

       tar cfvz /dev/nrst0 file.1 file.2 ...

  とするのではなく、以下のようにして下さい。

       tar cfvz tmp.tar.z file.1 file.2 ...

       tar cf /dev/nrst0 tmp.tar.z

  8.2.4.  他のシステムとテープでのデータのやり取りができない

  他の OS で書き込んだテープを Linux で読み込むことができない。また
  は、Linux で書き込んだテープを他の OS で読み込むことができない。

  システムが異なるとブロックサイズも異なることがあります。ブロックサイズ
  が固定のデバイスに、異なったサイズのブロックを読み込ませることはできま
  せん。

  このようなテープを読むには、テープドライブのブロックサイズを書き込まれ
  たときのサイズに合わせてやるか、あるいは可変長にしてやる必要がありま
  す。

  注意 : これはハードウェアのブロックサイズのことであって、tar や dump
  等のコマンドのブロッキングファクターのことではありません。

  ブロックサイズを変えるには mt コマンドを使います。

       mt setblk <size>

  可変長にするときには以下のようにします。

       mt setblk 0

  mt の setblk フラグは、 Linux の配布パッケージに入っている GNU 版の mt
  ではサポートされていません。代わりに BSD から移植された mt コマンドを
  使う必要があります。ソースコードは以下のところから入手できます。

       <ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi>

  またデフォルトでは、バッファサイズの最大値が 32K バイトに指定されてい
  ることに注意して下さい。これは
  /usr/src/linux/drivers/scsi/st_options.h (古いカーネルでは st.c) の
  ST_BUFFER_BLOCKS で定義されています。 32K 以上のブロックを使う場合はこ
  れを変更してカーネルを再構築する必要があります。

  8.2.5.  「No such device」というエラーメッセージが出る

  テープにアクセスするたびに「No such device」といったようなエラーメッ
  セージが出てしまう場合です。

  テープデバイスのタイプをチェックして下さい。テープデバイスはキャラクタ
  デバイスでなければならず、またデバイスのメジャー番号とマイナー番号が
  ``デバイスファイル'' に記述してあるような値になっていなければなりませ
  ん。

  8.2.6.  読み込みには密度を指定できるのに、書き込みではできない

  多くのテープドライブでは古いハードウェアとの互換性を保つために、低密度
  での読み込みをサポートしていますが、普通書き込みはできません。

  特に QIC のドライブでこの問題が生じることが多いでしょう。例えば古い形
  式の 60M テープが読めても、書き込みは 120, 150, 250, 525M のフォーマッ
  トでしかできない場合などです。

  8.2.7.  テープの頭出しをすると全ての SCSI デバイスがフリーズしてしまう

  これは一度にひとつのコマンドしか処理できない SCSI ドライバで特に良く生
  じる問題です。(内容については ``複数のデバイス'' を見て下さい。またど
  のドライバがそうかについては ``購入の手引: ドライバ機能の比較'' を見て
  下さい。) しかし切断を拒否するテープドライブもいくつか存在しています。

       訳注: SCSI ホストアダプタから見て、複数のコマンドを同時に実
       行するには、ターゲットデバイスがディスコネクトをサポートして
       いることが必要です。 (つまりコマンドを受けとったら SCSI バス
       を解放し、データが準備できたらターゲット側からバスを要求して
       データ転送を行なう。それまでの間に別のデバイスに対するコマン
       ドの送出やデータ転送などが可能となる。) ディスコネクトをサ
       ポートしていないターゲットデバイスは、コマンドの実行を終るま
       で SCSI バスを放さないので、テープドライブの巻き戻しコマンド
       などを送ると悲惨なことになります。

  drivers/scsi/st.c の先頭に以下の行を追加してカーネルを再構築すること
  で、この問題を回避できる場合もあります。

       #define ST_NOWAIT

  この変更を行なった場合、エラー状態のレポートは次の SCSI コマンドが実行
  されるまでされません。従って、mt などを使った頭出しがちゃんとできてい
  るかどうかを確認するには以下のようなコマンドを実行してみる必要がありま
  す。

       mt status

  この確認をしておかないと、頭出しに失敗した場合にテープを上書きしてしま
  うことになります。

  しかし複数ファイルをテープに書き込んでいて、この解決法を使わなければな
  らない場合は、よりサポートの良い SCSI ボードか、新しいドライブにする方
  が良いかもしれません。

  8.3.  デバイスファイル

  SCSI テープはキャラクタデバイスのメジャー番号 9 を使います。

  Linux では 16 ビットの dev_t を使っているので、マイナー番号には 8 ビッ
  トしか割り当てられていません。このため SCSI テープのマイナー番号は
  SCSI のホスト/ID/LUN の低い方から動的に割り付けされます。

  巻戻しデバイスは 0 からはじまります。一台目の SCSI テープ /dev/rst0 は
  c 9 0 となり、二台目は c 9 1 となります。巻戻しをしないデバイスではマ
  イナー番号の最上位ビットがセットされます。つまり /dev/nrst0 は c 9 128
  となります。

  通常は以下のような名前が使われます。

  /dev/nst{数字}      巻戻さないデバイス
  /dev/st{数字}       巻戻すデバイス

  9.  汎用デバイス

  この章では汎用 SCSI デバイスのドライバに特有の情報について示します。

  9.1.  対応しているハードウェア

  汎用 SCSI ドライバは全ての SCSI デバイス (ディスク、テープ、 CDROM、メ
  ディアチェンジャーロボットなどなど) へ SCSI コマンドを送るインター
  フェースです。

  お使いの SCSI ボードと電気的に :-) 互換性のあるものは全て動作するはず
  です。

  9.2.  よくある問題

  ありません :-)

  9.3.  デバイスファイル

  SCSI の汎用デバイスはキャラクタデバイスのメジャー番号 21 を使います。
  Linux では dev_t が 16ビットであるという制限から、マイナー番号は 0 か
  ら順番にデバイス毎に動的に割り当てられます。

  /dev/sg0

  は一枚目の SCSI ボードにおける最小の SCSI/LUN 番号のデバイスになりま
  す。

  10.  購入の手引き

  「Linux に対応しているたくさんのボードの中で、どの SCSI ホストアダプタ
  を買えばいいんでしょう？」という質問をよく聞きます。

  答えは、どの程度の性能を期待するか (あるいは必要とするか) によって異な
  りますし、使用するマザーボードや接続を予定している SCSI 周辺機器によっ
  ても違ってきます。

  10.1.  転送のタイプ

  性能 (ここではスループットと SCSI I/O の応答時間を指しています) にもっ
  とも大きく影響するのは、転送のタイプです。以下、各種の転送タイプに対し
  て、性能に与える影響とどのような場合にお勧めかを示します。

     純粋なポーリング
        純粋なポーリングを行う I/O ボードは、 REQ/ACK ハンドシェークを含
        むすべての SCSI 信号処理を CPU で行います。

        高速な CPU であっても、単純なシーケンサよりも REQ/ACK ハンド
        シェークは遅いので、ピーク転送レートは高速のマシンで 150K/秒、低
        速のマシンではおそらく 60K/秒程度になってしまうでしょう (ファイ
        ルシステムを介した転送レート)。

        またドライバは SCSI バスがビジーである間ループしていなければなら
        ないので、SCSI I/O 中にはほぼ 100% CPU が使用され、応答が極端に
        悪くなります。低速でディスコネクト/リコネクトに対応していない
        CDROM をこの種のボードに接続すると、使い物にならないほど応答性が
        低下します。

        この種のボードは、お勧めできません。

     インターロックポーリング
        インターロックポーリングを使用したボードは、SCSI REQ/ACK ハンド
        シェーク信号が PC バスのハンドシェーク信号と連動していることを除
        けば、純粋なポーリングのボードと本質的に変わりません。ハンド
        シェーク以外の SCSI 信号処理は、CPU によって行われます。

        この種のボードのファイルシステムを介したピーク転送レートは、最大
        で 500〜600K/秒程度です。

        純粋なポーリング I/O ボードと同様に、ドライバは SCSI バスがビ
        ジーである間ループしていなければならないので、CPU の利用率はデバ
        イスの転送レートとディスコネクト/リコネクトを行う頻度によって変
        化します。 CPU の利用率は 25% (ディスコネクト/リコネクトを適切に
        行う等速 CDROM の場合) から 100% (高速のドライブ、またはディスコ
        ネクト/ リコネクトを行わないイカレた CDROM の場合) まで変化しま
        す。

        筆者の 486-66 の場合、ヘッドレート 1080K/秒のドライブと T128
        ボードで 547K/秒のスループットを得た時の CPU 使用率は 90% でし
        た。

        コストを安く抑えることが最優先ならば、場合によって低速のテープや
        CDROM ドライブには使用可能でしょう。

     FIFO ポーリング
        FIFO ポーリングを行うボードは、小さな (8K 程度の) バッファを CPU
        と SCSI バスの間に持っており、多少はインテリジェントな処理を行う
        ことができます。その結果 CPU は FIFO との間でフルスピードでデー
        タを転送することができ、データ転送と割り込み処理 (FIFO エンプ
        ティ、ディスコネクト/ リコネクト処理など) 以外には CPU を占有し
        ません。

        ピーク転送レートは、ほとんどの SCSI デバイスに十分な値が得られま
        す。 FAST SCSI に対応した Seagate Barracuda と Adaptec 1520 の組
        み合わせで、低レベルの SCSI コマンドを使って 64K ブロックの読み
        出しを行った場合、転送レートは 4M/秒に達しました。

        CPU の使用率は、デバイスの転送レートによって異なります。デバイス
        が高速になるほど、単位時間当たりに発生する割り込みが多くなり、よ
        り多くの CPU 処理時間を必要とします。高速なデバイスでは CPU 使用
        率は高くなる (75% 程度) ものの、システムが使い物にならなくなるこ
        とは普通ありません。この種のボードは、ディスコネクト/リコネクト
        を行わないイカレたデバイス (安物の CDROM ドライブに多い) に対し
        ても、優れた応答性を示します。

        予算が厳しい人にはお勧めです。

     スレーブ DMA
        スレーブ DMA ボードのドライバは、 PC の DMA コントローラの 1チャ
        ネルを使ってデータ転送を行い、 CPU に制御を返します。

        ピーク転送レートは、PC の DMA コントローラが低速なため、あまり高
        くなりません。この種の 8bit ボードとあるマザーボードの組み合わせ
        では、 140〜150K/秒以上の転送レートでは問題が生じました。

        CPU 使用率はかなり優秀で、FIFO ポーリング I/O ボードよりもわずか
        に低い程度です。この種のボードは、ディスコネクト/リコネクトを行
        わないイカレたデバイス (安物の CDROM ドライブに多い) にも十分耐
        えられます。

        低速の CDROM やテープドライブには使用可能でしょう。

     バスマスタリング DMA
        インテリジェントなボードです。この種のボードのドライバは、SCSI
        コマンド、ターゲットと LUN、それにデータへのポインタを構造体に
        セットして、ボードに処理を任せます。ドライバは他のプログラムに制
        御を戻し、SCSI ボードは割り込みをあげて処理が終わったことを知ら
        せます。

        インテリジェンスがドライバではなくファームウェアにあるため、この
        種のボードのドライバは、同期転送、タグ付きコマンドキューイングな
        ど、より高度な機能をサポートすることができます。

        単位のリード/ライトを行うパッチを当てると、ファイルシステムを介
        したピーク転送レートは、ライトの場合でヘッドレートの 100%、リー
        ドの場合で 70% に達します。

        CPU 使用率は I/O 負荷に関わらず最小で、Adaptec 1540 で倍速 CDROM
        をアクセス中に 5%、SCSI ディスクに 1.2M/秒で継続的にデータ転送し
        ている場合で 20% でした。

        予算が非常に厳しい場合、マザーボードにバグがある場合 (バグのある
        マザーボードには、バスマスタが動作しないものもあります)、スルー
        プットよりもデータアクセス時間の方が重要なアプリケーションを使っ
        ている場合 (バスマスタのオーバヘッドは 1コマンドあたり 3〜4ms あ
        ります) を除き、常にお勧めできます。

  10.2.  スキャッタ/ギャザ

  性能に大きな影響を与える 2番目に重要なドライバやハードウェアの機能はス
  キャッタ/ギャザ I/O です。 SCSI コマンドの実行に必要なオーバヘッドはか
  なり大きく、ミリ秒のオーダです。Adaptec 1540 のようなインテリジェント
  バスマスタは、ターゲットに SCSI コマンドを送る前の処理に 3〜4ms かかる
  場合があります。バッファなしのデバイスの場合、このオーバヘッドは次のセ
  クタにアクセスするのに常にもう1回転待たなければならないほど大きいた
  め、一度に1ブロックの転送を行なう場合には、転送レートは 60K/秒
  (3600rpm のドライブの場合) にまで低下してしまいます。したがって、性能
  を上げるためには、与えられた大きさのデータを転送するのに必要な SCSI コ
  マンドの数を少なくすることが必要となってきます。これは、ひとつのコマン
  ドあたりに転送されるデータ量を大きくすることを意味します。 Linux の
  バッファキャッシュの設計により、ディスクブロックとして連続しているデー
  タであっても、メモリ上で連続しているとは限りません。クラスタごとのリー
  ド/ライトパッチがあたっている場合には、4K のバッファは連続しています。
  したがって、SCSI コマンドあたり転送されるデータ量は最大で 1K * ス
  キャッタ/ ギャザ領域の数 (クラスタごとのリード/ライトパッチがあたって
  いない場合)、あるいは4K * スキャッタ/ギャザ領域の数 (クラスタごとの
  リード/ライトパッチがあたっている場合) となります。実験の結果、私たち
  はひとつの SCSI コマンドあたりに転送するデータの大きさは 64K が適当だ
  ろうという結論に達しました。これは、クラスタごとのリード/ライトパッチ
  が当たっている場合でバッファサイズの 16倍、そうでない場合には 64倍で
  す。 16K から 64K に転送サイズを増やした結果、Adaptec 1540 シリーズの
  ボードを使った場合でファイルシステムを介した読み書きがヘッドレートの
  50% から 75% (リードの場合) および 100% (ライトの場合) にまで向上しま
  した。

  10.3.  メールボックスインターフェース

  Ultrastor や WD7000 や Adaptec 1540 や 1740、それに BusLogic のボード
  など、インテリジェントなホストアダプタの多くはメイルボックスインター
  フェースを持っています。これは、SCSI コマンドを実行する際、特定のメモ
  リアドレス (メイルボックス) に SCSI コマンド構造体を書き込み、ボードに
  信号を送り (つまり、出すべきメールがあることを示すフラグを上げ)、結果
  (返信) を待つものです。このような高レベルのプログラミングインター
  フェースを使用した場合、ソフトウェアの変更なしに FAST + WIDE SCSI のよ
  うな新しい機能を持ったボードにバージョンアップできることが多くなりま
  す。一般的な傾向としてドライバはシンプルな実装で機能が多く、安定したも
  のになります。

  それに対して NCR53c7/8xx ファミリや Adaptec AIC-7770/7870 チップ
  (274x、284x、それに 2940 ボードに使われています) などのボードは、より
  低レベルのプログラミングインターフェースを使います。この利点としては、
  処理の多くがボード上のプロセッサからより高速なホスト CPU に移るため高
  速化しやすいという点、柔軟性に富みある種の機能 (任意のデバイスに対する
  ターゲットモードなど) が実装しやすいという点、それに製造コストが低い
  (NCR のボードのように、消費者にとっても安く買えることにつながります)
  という点などがあげられます。一方欠点としては、ドライバが複雑になりがち
  (これはバグの入り込む余地も多くなることを意味します) だという点、それ
  に新しいチップの機能を生かすためにはドライバの変更が必要だという点があ
  げられます。

  10.4.  バスのタイプ

  バスのタイプは次に考慮すべき点で、ISA、EISA、VL、それに PCI などの選択
  肢があります。マーケティングの連中は、バースト転送レートと空想に基づい
  たばかばかしい数値を宣伝していますが、こんなものは実際の役には立ちはし
  ません。そのかわりに私は各種の周辺機器について測定した結果をもとにし
  た、より実用的な数値を示すことにします。

     ISA
        バンド幅は、バスマスタデバイスの場合、5M/秒よりも少し良い程度で
        す。ISA バスの調停は、いにしえの 8237 DMA コントローラによって行
        われるので、バスの獲得にかかる時間は比較的長くなります。割り込み
        の検出はエッジトリガ方式なので、割り込みの共有はできません。通
        常、ISA はバッファされていないため、転送中はホストバスとメモリバ
        スが占有されてしまいます。バスの占有を防ぐメカニズムは提供されま
        せん。

     VL バンド幅はおよそ 30M/秒です。システムによっては規格から外れたタ
        イミングでバスを駆動しているものもあり、このようなシステムでは動
        かないボードもありますから、返品保証のないハードウェアを購入する
        場合にはこの点を考慮する必要があります。通常、VL バスはバッファ
        されていないため、転送中にはホストバスとメモリバスが占有されてし
        まいます。

     EISA
        バンド幅はおよそ 30M/秒ですが、バスマスタ転送は通常 VL よりも高
        速です。バスがバッファされているシステムでは、高速なホスト/メモ
        リバスへのバースト転送が可能で、CPU 性能への影響も最小限となりま
        す。 EISA の割り込み検出はエッジトリガにもレベルセンスにも設定で
        きるため、ドライバが対応していれば割り込みの共有が可能です。
        EISA バスはボードごとに独立したアドレス空間を割り当てるため、ISA
        や VL に比べて資源の衝突が起こるおそれは少なくなります。

     PCI
        バンド幅はおよそ 60M/秒です。PCI システムはたいていホストブリッ
        ジ上に遅延書き込みバッファを持っており、バス間のスピードの違いが
        バスや CPU の性能に与える影響を最小限に抑えることができます。
        PCI の割り込みはレベルセンスなので、ドライバが対応していれば割り
        込みを共有することが可能です。バスの占有を防ぐメカニズムが提供さ
        れており、マスタとスレーブのどちらからでもバスサイクルを中断する
        ことが可能です。

        PCI は、書き込み可能な設定レジスタをボードごとに独立したアドレス
        空間に持っており、プラグアンドプレイメカニズムを提供します。正し
        く実装された PCI システムはプラグアンドプレイ機能を持っていま
        す。

        PCI はトレース長、負荷、機械的寸法などについて大変厳密に規定して
        いるので、VL や ISA よりも信頼性は高いはずです。

        結論を言うと、PCI が最良の PC バスですが、弱点もあります。PCI は
        まだ製品が世に出てから日が浅く、大部分のメーカーはすでに問題を解
        決しているとはいえ、まだ古いバグありの PCI ハードウェアやイカレ
        た BIOS が存在します。このため、筆者は返品保証付きのハードウェア
        を購入することを強くお勧めします。最近の PCI マザーボードは真の
        プラグアンドプレイを実現していますが、古いボードではジャンパとソ
        フトウェアによる設定が必要な場合もあります (例えば割り込みレベル
        の割当)。 PCI の問題を解決するには時間がかかることが多く、このた
        めシステムを動作させるまでの時間が非常に重要な場合にはおすすめで
        きません。

  低速の SCSI デバイス、例えばヘッドレートが 2M/秒程度かそれ以下のディス
  クや CDROM、テープドライブに関しては、PC 側のバスインターフェースが
  違ってもスループットはほとんど変化しません。最近のギガバイトクラスのハ
  イエンド SCSI ドライブのヘッドレートは 4-5M/秒に達し、あるメーカーは
  14M/秒のヘッドレートを実現する並列ヘッドユニットのアルファテストを行っ
  ています。このようなドライブでは高速なバス上のコントローラが性能を発揮
  します。あるユーザーは Adaptec 1542 ISA ボードから NCR53c810 PCI ボー
  ドに変えて、2.5倍性能が向上したそうです。

  PCI の遅延書き込みや、同様のライトバッファ機構が使用される場合を除い
  て、システム中のひとつのバスがビジーのときは、すべてのバスがアクセス不
  可能となります。したがって、バスのスピードが頭打ちになることは SCSI の
  性能に影響しないとしても、システムの応答性には悪影響を与えるおそれがあ
  ります。つまり、ISA バス上で 4M/秒の SCSI ディスクを使用している場合、
  バンド幅の 80% を失っていることになります。 ISA/VL システムでは画面描
  画に使えるのは 6M/秒しかありません。たいていの場合、バックグラウンドで
  実行中のジョブには同様の影響があります。

  16M 以上のメモリーがあっても ISA バスマスタ SCSI ボードが使えないわけ
  ではないことに注意してください。他のイカレた OS と違って、Linux は ISA
  コントローラで 16M 以上の領域に DMA 転送する時にはダブルバッファリング
  を行います。これによる性能の低下はわずか 1.5% 程度で、まったく気になり
  ません。

  最後に、バスインターフェースが違っても、バスマスタ方式のボードの値段は
  それほど変わらないことが多い、ということは覚えておいてください。

  以上の議論を踏まえて、目的によってバスに順序をつけると次のようになるで
  しょう。

       安定性を求める。インストールに必要な時間が      EISA ISA VL PCI
       重要。ボードが返品できない場合。

       性能を求める。インストールには多少時間が        PCI EISA VL ISA
       かかってもよい。

       訳注: 現在の PCI は、少なくとも VL よりは安定していると思い
       ます。

  すでに述べたように、バスマスタ方式が総合的なシステムの性能に与える影響
  は非常に大きくなってきているので、SCSI コントローラを購入する際にはバ
  スのタイプよりもバスマスタであるかどうかの方を重視すべきです。

  10.5.  複数のデバイス

  SCSI バス上に複数のデバイスが存在する場合、ホストアダプタやドライバが
  同時に複数のコマンドを並列に処理できるかどうかが重要になってきます。こ
  の機能は、テープドライブを使用する場合にはほぼ必須となりますし、例えば
  CDROM とディスクドライブといった、スピードの異なるデバイスが存在する場
  合には非常に望ましい機能と言えます。 Linux ドライバが1つのコマンドしか
  同時には処理できない場合、テープドライブがテープを巻き戻したりメディア
  の最後を探している間 (おそらく 30分ほど)、ディスクドライブにアクセスで
  きなくなってしまいます。ディスクドライブが 2台ある場合、この問題は顕著
  ではありませんが、スループットが 2台の転送レートの和ではなく、2台の転
  送レートの平均になってしまいます。

  10.6.  SCSI-I、SCSI-II、SCSI-III、FAST および WIDE オプションなどにつ
  いて

  SCSI は年々進歩しています。新しいバージョンの規格には、より高い転送
  レートやスループットを向上させるための方法、新しいデバイスに対するコマ
  ンドの標準化、すでにサポートされているデバイスに対する新しいコマンドの
  追加などが規定されています。

  SCSI のリビジョンレベルそれ自体には、実際には意味はありません。 SCSI-
  II が SCSI-I の単一イニシエータオプションを許さない、といった些細な点
  を除けば SCSI は下位互換性を保っており、新しい機能は必須機能としてでは
  なく、オプション機能として導入されます。したがって、SCSI アダプタを
  SCSI、SCSI-II、あるいは SCSI-III と呼ぶのはマーケティング的な意味しか
  ないと言っても過言ではないでしょう。

  10.7.  ドライバ機能の比較

  ドライバ機能の比較を以下の表に示します (そのドライバでサポートされてい
  るチップはカッコ内に示してあります)。

  ドライバ名                              同時発行可能な  スキャッタ/     複数
                  転送モード              コマンド数      ギャザの制限    ボード
                                          全体/LUN

  AM53C974        バスマスタリング DMA    12s/1s          255s            Y
  aha152x         FIFO(8k) ポーリング     7s/1s           255s            N
      (AIC6260,
      AIC6360)
  aha1542         バスマスタリング DMA    8s/1s           16              Y
  aha1740         バスマスタリング DMA    32s             16              N
  aha274x         バスマスタリング DMA    4s/1s           255s            Y
  BusLogic        バスマスタリング DMA    192/31          128s, 8192h     Y
  (この値は BT-948/958/958D のもので、古いボードのサポートするコマンド数は
  もっと少ない)
  eata_dma        バスマスタリング DMA    64s-8192h/2-64  512s, 8192h     Y
  fdomain         FIFO(8k) ポーリング     1s              64s             N
      (TMC1800,   TMC18c30 は 2k FIFO
      TMC18c30,
      TMC18c50,
      TMC36c70)

  in2000*         FIFO(2k) ポーリング     1s              255s            N
  g_NCR5380       純粋なポーリング        16s/2s          255s            Y
      (NCR5380,
      NCR53c80,
      NCR5381,
      NCR53c400)
  gsi8*           スレーブ DMA            16s/2s          255s
      (NCR5380)
  PAS16           純粋なポーリング        16s/2s          255s            Y
      (NCR5380)   またはインターロックポーリング
                  (システムによっては動作しません！)
  seagate         インターロックポーリング1s/1s           255s            N
  wd7000          バスマスタリング DMA    16s/1s          16              Y
  t128            インターロックポーリング16s             255s            Y
      (NCR5380)
  qlogic          インターロックポーリング1s/1s           255s            N
  ultrastor       バスマスタリング DMA    16s/2s          32              Y
  53c7,8xx        バスマスタリング DMA
      (NCR53c810,
       NCR53c815,
       NCR53c820,
       NCR53c825)
      rel5                                1s/1s           127s            N
      rel10                               8s/1s           127s            Y

  注:

  1. 後ろに '*' の印が付いたドライバは配布版のカーネルには含まれておら
     ず、バイナリブートイメージは入手できないかもしれません。

  2. 後ろに 's' のついた数字はソフトウェアによる恣意的な制限で、コンパイ
     ル時に define し直すことによって変更することができます。

  3. 後ろに 'h' のついた数字はハードウェアによる制限で、Linux のドライバ
     によるソフトウェアの制限と一致しないことがあります。

  4. 後ろに何も付いていない数字は、ハードウェアまたはソフトウェアのいず
     れかによる制限です。

  5. NCR53c810 ドライバのリリース 5 は、カーネル 1.2.x および 1.3.x に含
     まれています。リリース 10 は匿名 FTP によって入手可能です。

  6. AM53C974 を例外として、バスマスタ DMA ボードはインテリジェントで
     す。NCR のチップはメインメモリ上のマイクロコードを実行しますが、
     AIC7770 はオンチップ RAM 上のマイクロコードを実行します。それ以外の
     チップはメールボックス形式のインターフェースを持っています。

  10.8.  ボードの比較

  ボード名                ドライバ        バス    価格    備考
  Adaptec AIC-6260        aha152x         ISA             ボードではなくチップ
  Adaptec AIC-6360        aha152x         VLB             ボードではなくチップ
      (VL/ISA の SCSI つきマルチ I/O ボードの多くと Zenon の
      マザーボードに使われています)
  Adaptec 1520            aha152x         ISA
  Adaptec 1522            aha152x         ISA     $80     1520 + FDC
  Adaptec 1510            aha152x         ISA             ブート ROM なしの 1520
                                                          自動認識不可
  Adaptec 1540C           aha1542         ISA
  Adaptec 1542C           aha1542         ISA             1540C + FDC
  Adaptec 1540CF          aha1542         ISA             FAST SCSI-II
  Adaptec 1542CF          aha1542         ISA     $200    1540CF + FDC
  Adaptec 1640            aha1542         MCA

  Adaptec 1740            aha1740         EISA            生産中止
  Adaptec 1742            aha1740         EISA            生産中止、1740 + FDC
  Adaptec 2740            aha274x         EISA
  Adaptec 2742            aha274x         EISA            FDC つき
  Adaptec 2840            aha274x         VLB
  Adaptec 2842            aha274x         VLB             FDC つき
  Adaptec 2940            aha274x         PCI
  Always IN2000           in2000          ISA
  BusLogic BT-948         BusLogic        PCI     $180    Ultra SCSI
  BusLogic BT-958         BusLogic        PCI     $230    Wide Ultra SCSI

  (BusLogic のボードの詳細については、 ``BusLogic MultiMaster ホストアダ
  プタ'' を参照してください。)

  DPT     PM2011          eata_dma        ISA             FAST SCSI-II
          PM2012A         eata_dma        EISA            FAST SCSI-II
          PM2012B         eata_dma        EISA            FAST SCSI-II
          PM2021          eata_dma        ISA             FAST SCSI-II
          PM2022          eata_dma        EISA            FAST SCSI-II
          PM2024          eata_dma        PCI             FAST SCSI-II
          PM2122          eata_dma        EISA            FAST SCSI-II
          PM2322          eata_dma        EISA            FAST SCSI-II
          PM2124          eata_dma        PCI             FAST SCSI-II
          PM2124          eata_dma        PCI             FAST SCSI-II
          PM2124          eata_dma        PCI             FAST SCSI-II
          PM2124          eata_dma        PCI             FAST SCSI-II
          PM2124          eata_dma        PCI             FAST SCSI-II
          PM2124          eata_dma        PCI             FAST SCSI-II
          PM2041W         eata_dma        ISA             Wide Single-ended
                                                          SCSI-II
          PM2041UW        eata_dma        ISA             Ultra Wide Single-ended
          PM2042W         eata_dma        EISA            Wide Single-ended
          PM2042UW        eata_dma        EISA            Ultra Wide Single-ended
          PM2044W         eata_dma        PCI             Wide Single-ended
          PM2044UW        eata_dma        PCI             Ultra Wide Single-ended
          PM2142W         eata_dma        EISA            Wide Single-ended
          PM2142UW        eata_dma        EISA            Ultra Wide Single-ended
          PM2144W         eata_dma        PCI             Wide Single-ended
          PM2144UW        eata_dma        PCI             Ultra Wide Single-ended
          PM3021          eata_dma        ISA             multichannel
                                                          raid/simm sockets
          PM3122          eata_dma        EISA            multichannel/raid
          PM3222          eata_dma        EISA            multichannel
                                                          raid/simm sockets
          PM3224          eata_dma        PCI             multichannel
                                                          raid/simm sockets
          PM3334          eata_dma        PCI             Wide Ultra SCSI
                                                          multichannel
                                                          raid/simm sockets

  DTC 3290                aha1542         EISA            動作するはずですが、
                                                          ドキュメントリリース
                                                          ポリシーのため、DTC の
                                                          ハードウェアはサポート
                                                          されません
  DTC 3130                53c7,8xx        PCI             '810
  DTC 3130B               53c7,8xx        PCI             '815
  DTC 3292                aha1542         EISA            3290 + FDC
  DTC 3292                aha1542         EISA            3290 + FDC
  Future Domain 1680      fdomain         ISA             FDC
  Future Domain 3260      fdomain         PCI
  NCR53c810               53c7,8xx        PCI     $60     ボードではなくチップ。
      (FIC、Chaintech、Nextor、Gigabyte         (ボード)  ボードには BIOS は
      などの SCSI ボードや AMI、ASUS、                    含まれていませんが、
      J-Bond などのマザーボードに使われ                   たいていのマザーボード
      ています。DEC PCI システムに                        には SDMS BIOS が
      使われているのも普通これです。)                     ついています。
  NCR53c815               53c7,8xx        PCI     $100    NCR53c810 + BIOS
      (Intel PCISCSIKIT
      NCR8150S など)
  NCR53c825               53c7,8xx        PCI     $120    NCR53c815 の WIDE 版。
                                                          現在の Linux ドライバは
                                                          Wide 転送のネゴシエー
                                                          ションを行なわないこと
                                                          に注意。
  Pro Audio Spectrum 16   pas16           ISA             サウンドボード + SCSI
  Seagate ST01            seagate         ISA     $20     ドライブによっては
                                                          BIOS は動作しません
  Seagate ST02            seagate         ISA     $40     ST01 + FDC
  Sound Blaster 16 SCSI   aha152x         ISA             サウンドボード + SCSI
  Western Digital 7000    wd7000          ISA             FDC つき
  Trantor T128            t128            ISA
  Trantor T128F           t128            ISA             T128 + FDC
                                                          IRQ 10 以上をサポート
  Trantor T130B           g_NCR5380       ISA
  Ultrastor 14F           ultrastor       ISA             FDC つき
  Ultrastor 24F           ultrastor       EISA            FDC つき
  Ultrastor 34F           ultrastor       VLB

  注:

  1. Trantor は最近 Adaptec に買収されました。いくつかの製品は Adaptec
     の名前で売られています。

  2. Ultrastor は最近 Chapter 11 による破産を宣告されたため、現時点では
     テクニカルサポートを受けることはできません。

  3. NCR53c810 ボードの値段は間違いではありません。これには DOS 用の標準
     の ASPI/CAM ドライバパッケージを含んでいます。OS/2 や Windows (32
     ビットアクセス) などのドライバも無料でダウンロードすることができま
     す。

     この会社にコンタクトしてみてください。

       SW (swt@netcom.com) (214) 907-0871 fax (214) 907-9339

  1995年 12月 23日の時点で、ここでは '810 のボードを 53ドルで売っていま
  した。

  4. Adaptec の最近の SCSI チップはケーブルやターミネーションの問題に非
     常に敏感です。このため、私は Adaptec の 154x C および CF バージョン
     や 2xxx シリーズのホストアダプタをお勧めすることはできません。

     この問題は、古い 154x B バージョンや 174x A バージョンのボード、そ
     れに私の知る限りでは AIC-6360/AIC-6260 チップを使ったボード
     (1505、1510、1520 など) などには当てはまらないことに注意してくださ
     い。

     また、Adaptec のテクニカルサポートの質は最近とみに低下しました。長
     い間待たされることはしょっちゅうですし、従業員は無知だったり (公開
     されている文書を公開してはいけないかのように示唆したり)、敵意をあら
     わにしたり (自分が答えられない問題を他の従業員に渡すことを拒否した
     り) するのです。

     政治的な発言をする場合には、この点を考慮に入れて下さい。この点を除
     いては、Adaptec の 152x/1510/1505 ボードは、同価格帯の他の ISA ボー
     ドよりも優れていますし、中古や在庫処分品の 154x B や 1742 ボードを
     安く手に入れることができれば、サポートの問題には目をつぶってもいい
     と私は思います。

  5. DPT のボードはすべてキャッシュと RAID モジュールのアップグレードが
     可能です。また多くのボードにはワイド/ディファレンシャルバージョンが
     あります。

  6. NCR のボードには各種ありますが、まったく同じだというわけではありま
     せん。ASUS SC200 はアクティブターミネーションですが、他の NCR53c810
     ボードの多くはパッシブターミネーションです。 '825 ボードの多くはア
     クティブターミネーションですが、ROM BIOS のものもあれば FLASH ROM
     のものもあるという具合です。 '825 ボードの多くは外部 WIDE コネクタ
     と内部 WIDE コネクタ、それに通常の内部コネクタを持っていますが、通
     常の内部コネクタを持っていないもの (CSC の安価なモデルなど) もあり
     ます。

  10.9.  まとめ

  性能、機能 (アクティブターミネーションなど)、Adaptec 1540 シリーズとの
  互換性などの点から、BusLogic のMultiMaster ボードは ISA、EISA、
  VL、PCI のいずれにもお勧めできます。 EISA、ISA、PCI、VL のバスインター
  フェースとシングルエンドやディファレンシャル、8/16 ビットの SCSI バス
  に対応したたくさんのモデルが用意されています。最新の Ultra SCSI PCI モ
  デル BT-948/958/958D はフラッシュ ROM により容易にファームウェアをバー
  ジョンアップでき、スマートターミネーション機能も持っています。

  最高の I/O 性能を求める人には、DPT のボードがいいでしょう。 RAID と
  キャッシュ、複数の SCSI チャネルに対応したボードは他にありません。

  PCI システムを使っている場合、NCR53c8xx チップを使ったボードは検討に値
  します。バスマスタ SCSI コントローラが、53ドル (何と Adaptec 1520 より
  も安い！) という値段で手に入るのです。 C't マガジンによる DOS のベンチ
  マークでは Adaptec 2940 や BusLogic BT-946C を凌ぐ性能が出ています
  し、Linux でもかなりの性能 (ファイルシステムを介して 6M/sec) が得られ
  ています。これらのボードの BusLogic に対する弱点は、Adaptec 1540 互換
  でないことと、アクティブターミネータがついているかどうかわからないこ
  と、ハードウェアの性能を発揮させるためには最新のドライバ (1.3.5x の
  カーネルには標準でついてきます。1.2.x のカーネル用のドライバは匿名 ftp
  で取ってくることができます) が必要だということ、それに BusLogic や DPT
  などのメールボックスインターフェースのボードに比べてドライバに問題が起
  こりやすいという点です。

  確実に動作させることが必要な場合には、BusLogic MultiMaster か DPT の
  ボードがおそらくベストでしょう。 NCR53c8xx や Adaptec AIC7xxx のような
  メールボックスインターフェースでないボードはドライバが複雑で問題が生じ
  やすいので、このような目的には適していません。

  予算が限られていて、PCI 以外の SCSI カードが必要ならば、在庫処分品や中
  古の Adaptec 154x B バージョンや 174x A バージョンのボードを見つける
  か、Adaptec 1520 互換のボード (新品で 80ドルくらいからあります) を探す
  のがいいでしょう。これらのボードのスループットと応答性はかなりのもの
  で、値段もまあまあです。

  11.  マイナー番号の割り当て

  Linux では、dev_t に 16ビットを使用しており、マイナー番号には 8ビット
  しか割り当てられていないため、SCSI ディスクやテープ、CDROM、それに汎用
  デバイスのマイナー番号は、以下にしたがって動的に割り当てられます。

  For すべての SCSI ホストアダプタ (scsi0 から scsiN まで) について
      For ホストアダプタ自身の ID を除く、すべての SCSI ID (0 から 7 まで) について
          For すべての LUN (0 から max_scsi_luns まで) について
            - TEST UNIT READY コマンドを発行して、バス、ターゲット、
              LUN の組み合わせを探索する。あるバス上の SCSI ID に
              デバイスが存在しないと判断したら、そのバスと SCSI ID の
              対しては LUN の探索を行わない。
            - INQUIRY コマンドを発行して、見つかったデバイスに関する
              情報を集める。デバイスタイプ、メーカー、モデル名、
              ファームウェアのバージョンなど。
            - この結果を特別な認識関数を通して、存在するハイレベル
              ドライバ (ディスク、テープなど) に通知する。
              このデバイスを扱えるドライバのユニットとしてアタッチする。
              汎用ドライバはすべてのデバイスをアタッチする。
            - SCSI-I デバイスの場合、あるいは複数の LUN を扱えない
              デバイスのリストに載っているデバイスの場合は、
              このバスのこの SCSI ID に対して LUN の探索を行わない。
            - 複数の LUN を持っていることがわかっているデバイスの
              場合は、max_scsi_luns を無視してすべての LUN を
              スキャンする。

  この方法では、しばしば問題が生じる場合があるということが分かっていま
  す。ある時点でしか存在しないデバイスがあった場合、そのデバイスのマイ
  ナーデバイス番号は、ブート時に見付かったデバイスに依存して決まります。
  この場合、rc スクリプトや /etc/fstab ファイルによってマウントされる
  パーティションのマイナー番号が異なってしまう可能性があるからです。

  この問題は、まだ完全には解決されていません。 /dev/scsi 以下のデバイス
  階層をホスト番号と SCSI ID および LUN から作成するプログラムがあり、
  <ftp://tsx-11.mit.edu> から取ってくることができます。ちょっと扱いづら
  い点もありますが、これによって問題の一部が軽減されることは確かでしょ
  う。

  多分もっと良い解決法は、/proc/scsi 擬似ディレクトリを使うことでしょ
  う。現在作業が進行中なので、どのような方法になるかはまだ正確には言えま
  せんが、この問題を解決するためには有望だと思えます。

