                         SCSI HOWTO 日本語版
                  (原文 : SCSI-HOWTO 1994/04/15 版)

              著者 Drew Eckhardt (drew@cs.colorado.edu)
              訳者  ぺー (NBB02702@niftyserve.or.jp)
                    がお (MHD01611@niftyserve.or.jp)

                                −・−

    Copyright 1994, Drew Eckhardt

    SCSI-HOWTOは Drew Eckhardtの著作物です。物理的あるいは電子的な
    媒体への複写と配布は著者の許可なく行えます。翻訳は特に申請せずとも
    行えますが、翻訳物に誰が翻訳したかを書いてください。商用での配布も
    許可し、歓迎しますが、著者へ配布の連絡をください。


    短い引用は著者の同意なしに行えます。SCSI-HOWTOから派生する文書
    および部分的な配布には、このファイルの全文の複写、またはできる限り
    そのまま複写したものを含めてください。

    私達はこの情報が可能な限り多くの経路で広まることを期待しています。
    けれども HOWTO 文書に対する著作権は保持し、HOWTO を再配布するための
    様々な計画を届けたいと思っています。私達は今よりもなおすべての情報を
    備えた HOWTO を広めたいと思っています。質問があれば、 Linux HOWTO の
    まとめ役である Matt Welsh に連絡してください。連絡先は
    mdw@sunsite.unc.edu, または +1 607 256 7372 です。

    この文書では Linux の SCSI システムに関する情報を扱います。この
    SCSI システムは Linux カーネル・バージョン 1.1.1 やさらに新しい
    αコードに実装されているものです。

    以前の SCSI コードには対応していません。ですから実装されている
    ドライバの種類、性能、オプションなどが、古いカーネルのものとは
    まったく違っているかもしれません。

    この文書には載っていない、詳しい情報が欲しければ、Linux activists
    メーリングリストの SCSI チャンネルに参加すると良いでしょう。
    このチャンネルに参加するには、題 (Subject 欄) に

        X-MN-Admin: join SCSI

    と書いたメールを

        linux-activists-request@joker.cs.hut.fi

    に送ります。

    この文書は普通の人には読みやすいものではない点には気づいています。
    この文書の改訂について建設的な意見があれば著者や訳者にメールを
    送ってください。

    和訳版の作成にあたって次の方々が協力してくれました。
    抜けている人がいれば、ごめんなさい。

        Suzuki Yasuyuki さん     <yas@hpycla.kobe.yhp.co.jp>
        YAMAZAKI Yasu-Hiro さん  <hiro@ice3.ori.u-tokyo.ac.jp>
        播口陽一さん             <hariguti@lsidiv.kawasaki-steel.co.jp>

                                −・−

目次

１章            よくある問題
２章            バグの報告
３章            SCSI ホスト
        １節    対応ハードウェア・未対応ハードウェア
        ２節    よくある問題
        ３節    Adaptec 152x, 151x, Sound Blaster 16 SCSI,
                  SCSI Pro, Gigabyte, AIC 6260/6360 チップを使った品 (標準)
        ４節    Adaptec 154x, AMI FastDisk VLB, Buslogic, DTC 329x (標準)
        ５節    Adaptec 174x (標準)
        ６節    Allways IN2000 (α版)
        ７節    TMC-1800, TMC-18C30, または TMC-18C50 チップを使った
                  Future Domain 160x (標準)
        ８節    NCR5380 一般, T130B (標準)
        ９節    Seagate ST0x, Future Domain TMC-8xx/TMC-9xx (標準)
      １０節    PAS16 SCSI (標準)
      １１節    Trantor T128, T128F, T228 (標準)
      １２節    Ultrastor 14f, 24f, 34f (標準)
      １３節    Western Digital 7000 (標準)

４章            ディスクドライブ
        １節    対応ハードウェア・未対応ハードウェア
        ２節    よくある問題
        ３節    デバイスファイル
        ４節    ディスクのジオメトリー
        ５節    パーティションを切る

５章            CD ROM ドライブ
        １節    対応ハードウェア・未対応ハードウェア
        ２節    よくある問題
        ３節    デバイスファイル

６章            テープドライブ
        １節    対応ハードウェア・未対応ハードウェア
        ２節    よくある問題
        ３節    デバイスファイル

７章            汎用ドライバ
        １節    対応ハードウェア・未対応ハードウェア
        ２節    よくある問題
        ３節    デバイスファイル

８章            購入案内
______________________________________________________________________________

１章  よくある問題

      この章ではよくある問題を並べて説明します。この章で問題が解決しない
    場合は問題のあるホストアダプタと装置に関する章を参照してください。

１節  カーネルコマンドライン

      文書中に出てくる「カーネル・コマンドライン」という言葉について

      カーネル・コマンドラインというのは LILO : プロンプトで指定する
      オプションのことを指します。オプションにはカーネルの名前や LILO の
      環境設定ファイル (/etc/lilo/config) に付加される項目があります。

      LILO でシステムを起動し、プロンプトが出たところで Alt, Ctrl,
      Shift のどれかを一つを押します。LILO が次のように反応します。

           :

      ここで、ブートするカーネルを選択できます。? を入力すると
      ブートできるカーネルの一覧が表示されます。

           :?

           ramdisk floppy harddisk

      オプションとともにこのカーネルを起動するには、その
      カーネルの名称に続けて、オプションをスペースで区切って
      タイプします。リターンキーを押して確定します。

      オプションは次のように記述します。

           変数=値

      ここでは、ひとつ、またはスペースなしでコンマで区切った複数の
      値を指定できます。ルートデバイス以外は、それぞれの値は数値で
      10 進数か 16 進数が使えます。

      例えば、ブート時には認識されない Adaptec 1520 クローンを
      使って Linux をブートするには、次のようにタイプします。

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

      カーネル・バージョン 0.99.pl13 以降では、指定した値は LILO の
      環境ファイルの内容に付加されて使われます。

                                −・−

２節  全ての SCSI ID に同じデバイス名が表示される。

      ホストアダプタとデバイスが同じアドレス (SCSI ID) に
      設定されています。(典型的には 7。) ジャンパーの設定を変更します。

                                −・−

３節  全ての SCSI LUN に同じデバイス名が表示される。

      装置のファームウェアにバグがあります。問題のある装置の一覧が
      カーネルソース drivers/scsi/scsi.c 内に可変型の blacklist として
      挙げてあります。問題の装置をこのリストに加えてみてください。

                                −・−

４節  デバイスからエラーが出ない事がわかっているのに、センス・エラーが出る。

      ケーブルやターミネータに異常があればこの現象が発生します。

      SCSI バスは両端にターミネータが必要で、途中に入れても無駄です。
      ターミネータには外部に接続する物と、ホストアダプタやデバイスに
      内蔵する物があります。

      SCSI-2 の仕様はケーブルの両端に能動型ターミネータを利用することを
      推奨しています。一つのデバイスと短いケーブルを用いれば、受動型の
　　　ターミネータでもおそらく問題は出ないでしょう。しかし、デバイスを
　　　増設したり、長いケーブルを使い始めた時に SCSI に異常が起こるように
　　　なったら能動型のターミネータを使うようにすべきです。
      能動型ターミネータについては Comp.Periphs.Scsi FAQ を参照のこと。
       (pub/linux/ALPHA/scsi内の tsx-11 にあります)

                                −・−

５節  ネットワークのオプションが有効になっているカーネルでは動作しない。

      大抵のネットワークドライバの自動認識ルーチンは受動的ではないので、
      ある種の SCSI ドライバと衝突します。

                                −・−

６節  装置は認識されるが読み書きできない

      カーネルは SCSI デバイスを認識できるが、読み書きができない。
      つまり、mkfs /dev/sdc や tar xvf /dev/rst2 などが失敗する。

      /dev にそのデバイス用のデバイスファイルがありません。

      UNIX のデバイスはブロック型かキャラクタ型、そしてメジャー番号、
      マイナー番号で識別されます。ブロックデバイスは一度バッファを
      通しますが、キャラクタ型は通しません。メジャー番号はどのデバイス
      ドライバを使うかを指します。例えば、8 番は SCSI ディスクです。
      マイナー番号はどの装置 (ドライブ) を使うかを指します。例えば
      キャラクタ型のメジャー番号 4・マイナー番号 0 は、最初の仮想
      コンソールを指し、マイナー番号 1 がその次の仮想コンソール、
      といった具合です。しかし、このような普通のファイルとは別の
      名前空間を通してデバイスをアクセスするのは、UNIX や Linux の
      「すべてはファイルである」という比喩に反します。このために
      ブロックデバイスとキャラクタデバイスは /dev ディレクトリに
      置かれています。こうすることで、3 番目の SCSI ディスクデバイスを
      /dev/sdc なら通して、また、ひとつめのシリアルポートなら
      /dev/ttyS0 を通して読み書きできます。

      デバイスファイルを作成するには、MAKDEV スクリプトを使うのが
      望ましいでしょう。/dev ディレクトリに移動し、root の権限で
      MAKEDEV コマンドを実行します。このコマンドは例えば次のように使います。

           ./MAKEDEV sdc

      ワイルドカードも動作する「はずです」。例えば

           ./MAKEDEV sd\*

      を実行すると、SCSI ディスク用のデバイスファイルを全部作成する
      はずです。つまり、/dev/sda から /dev/sdp まで、各ドライブに
      15 のパーティション用のデバイスファイルが作られるでしょう。

           ./MAKEDEV sdc\*

      では、/dev/sdc 上の 15 のパーティション用のデバイスファイルが
      作られるはずです。

      「はずです」というのは、標準的な UNIX でこのように動作するからです。
      皆さんのところにある MAKEDEV スクリプトは、このやり方には従って
      いないかもしれませんし、作成できるデバイスの数が限られているかも
      しれません。

      MAKEDEV でデバイスファイルが作れなかった時には、mknod コマンドを
      使って一つずつデバイスファイルを作らなければなりません。

      各種の SCSI デバイス用のブロック／キャラクタ型、メジャー番号、
      マイナー番号などは、４〜７章の３節「デバイスファイル」で解説します。

      このような番号を使って

           mknod /dev/device <b か c> <メジャー番号> <マイナー番号>

      のようにコマンドを実行します。

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

                                −・−

７節  時々 SCSI サブシステムが動かなくなる

      これは比較的良く現れる現象です。お使いのホストアダプタに関する章を
      参照されると解決策が見つかるかも知れません。

      複数のデバイスが同時に使われる時、このような現象に見えることが
      あります。この場合、デバイスのファームウェアを更新することで
      問題を解決できないかデバイスのメーカーへ問い合わせてみてください。
　　　異なる SCSI ケーブルや別なシステムで動作確認を行ってみることも
　　　大事です。ディスクの不良ブロックやマザーボードの DMA操作不良
　　　（ホストアダプタが DMAを用いる場合）によって起こることもあります。
      他にも様々な要因が考えられます。

　　　複数のデバイスがバス上で同時に使われると問題が起きることがあります。
　　　お使いのホストアダプタ用ドライバが同時に複数の未実行のコマンドを
　　　扱えない場合、これを１に削減してみてください。なお、これはテープ
　　　ドライブや低速の CD-ROM ドライブでは現実的な解決策ではないかも
　　　しれません。

８節  環境設定とカーネルのの作成

      使わない SCSI ドライバはメモリを浪費し、メモリ搭載量の小さな
      システムではメモリ不足を悪化させます。カーネル域はページ制御を
      行わないからです。

      必要なドライバだけを組み込んだカーネルを作成するには次のように
      します。
      
        cd to /usr/src/linux

      現在とは異なるルートデバイス、あるいは 25行80桁の VGA 以外の
      画面を用いてブートフロッピーを作るならば makefile を編集して
      以下の設定を確認し、

            ROOT_DEV = 

      と

            SVGA_MODE = 

      を希望する内容にしてください。

      パッチをインストールした場合、すべてのファイルが確実に再作成
      されるよう、次のようにタイプしてください。

            make mrproper

      make mrproper を実行してもしなくても、次のようにタイプし、

            make config

      環境に関する問い合わせに答えてください、その後、

            make depend

      を実行して、最後に

            make

      とします。

      カーネル作成が終了したら、 LILO の環境を更新するかブートフロッピーに
      書き込みます。ブートフロッピーを作るには次のようにします。

            make zdisk

      ケーブルとターミネータはしばしば信頼性を損なう元になります。
      SCSI-2 の仕様はケーブルの両端に能動型ターミネータを利用することを
      推奨しています。一つのデバイスと短いケーブルを用いれば、受動型の
　　　ターミネータでもおそらく問題は出ないでしょう。しかし、デバイスを
　　　増設したり、長いケーブルを使い始めた時に SCSI に異常が起こるように
　　　なったら能動型のターミネータを使うようにすべきです。
      能動型ターミネータについては Comp.Periphs.Scsi FAQ を参照のこと。
       (pub/linux/ALPHA/scsi内の tsx-11 にあります)

______________________________________________________________________________

２章  バグの報告

    Linux の SCSI コードの開発陣は、ディスク空間の制限から
    古いコードは保持しない場合もあります。ですから、一般に手に入る
    最新のカーネルを使っていない場合、問題を報告しても開発側では
    解決できないと思います。(MCC, SLS, Yggdrasil などの配布では少し古い
    カーネルが使われています。) バグを報告する前に最新のカーネルでも
    同じ問題があるかを確認して下さい。

    カーネルを更新し、この文書をよく読んでもバグが解決しなければ、
    メーリングリストの SCSI チャンネルにメールで問題を報告して下さい。
    Linux の SCSI ドライバの開発に関わってきた人が多数、このチャンネルの
    記事を読んでいます。

    バグの報告には、出来るだけ詳しくハードウェアの構成を書いて下さい。
    また、Linux がブート時およびエラーの発生時に出力するメッセージも
    全部出力されるままに書いて下さい。ありのままのメッセージが
    提出されなければ、何が問題なのかを誤って判断してしまう可能性が
    あります。

    大切なのは、私たちがあなたのバグを再生できなかったり、何が
    問題なのかをあなたが私たちに示せなかったりすると、問題は
    解決しないということです。

    まだ Linux が動いていないと仮定して、私たちに必要な情報を提供するには
    次のような手順を踏むと良いでしょう。

    DOS でフロッピーディスクをフォーマットします。あなたが使っている
    Linux 配布が、RAM ドライブでなくフロッピー上のルートディスクを
    マウントする場合、ルートディスクをマウントしない方のドライブで
    読めるようにディスケットをフォーマットしなければなりません。

    Linux を起動して root でログインします。この後、次のコマンドを実行します。

           mkdir /tmp/dos

    ルートディスクがマウントされていないドライブにフォーマット済みの
    フロッピーを挿入して、次のようにマウントします。

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

           または

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

    /proc ファイルシステムがマウントされていることを確認して
    次のコマンドを実行します。

           grep proc /etc/mtab

    /proc ファイルシステムがマウントされていなければ、次のように
    マウントします。

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

    カーネルのリビジョンとカーネルが出力するメッセージをログに
    保存します。

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

    1 〜 2 秒後に Ctrl-C キーを押してください。この後、DOS の
    フロッピーをアンマウントします。

           umount /tmp/dos

    そして Linux を停止させます。

           shutdown

    DOS を起動し、私たちに送るメールにログの内容を付けて送ってください。

______________________________________________________________________________

３章  SCSI ホスト

      この章では様々なホストアダプタが linux でサポートされているかどうかを
    紹介します。

１節  対応ハードウェア・未対応ハードウェア

    ☆ カーネルに内蔵されているドライバ

       Adaptec 152x, Adaptec 154x やその互換品 (Bustek や DTC の329x ボード)
       Adaptec 174x
       Future Domain 850, 885, 950 などのシリーズ (880 はパッチが必要)
       TMC-1800 か TMC-18c50 を使った Future Domain の 16x0
       PAS16 SCSI ポート
       Seagate ST0x
       Trantor T128 ボード
       Ultrastor 14F, 24F, 34F
       Western Digital 7000


    ☆ αドライバ
       Allways IN2000
       Bustek の専用モード版
       Richoch GSI-8

       全てのαドライバは tsx-11.mit.edu:/pub/linux/ALPHA/scsi から
       anonymous FTP で入手できます。


    ☆ 開発中のドライバ (一般には未公開)
       α版として公開できるようになったらお知らせします。それまでは
       公開時期の問い合わせメールなどで開発者をわずらわせないように
       してください。

       Adaptec 2742 / 2842 / AIC 7770
         Adaptec AIC-7770 チップはバスマスター型 DMA と VLB または
         PCI のインターフェース、マイクロコントローラ、マイクロコード
         用の RAM、それに FAST SCSI か FAST+WIDE SCSI の中核を一つに
         まとめたものです。

         スループットと待ち時間の点で高性能が見込めます。しかし、
　　　　 その利用にはマイクロコードとそのアセンブラ、Linux 用の
         ドライバのコーディングが必要です。今はマイクロコードを記述して
         いるところです。

       DPT EATA
         DPT ドライバは現在デバッグ中です。幾つかのデバイスでは動作して
         いますが、動かないものもあります。

       NCR53c8x0/7x0
         NCR53c8x0/7x0 チップは高性能チップに属しています。
         バスマスター型 DMA と VLB または PCI のインターフェース、
         マイクロコントローラ、それに FAST SCSI か FAST+WIDE SCSI の
         中核から成ります。

　　　　 ボード上の RAM を用いる Adaptec AIC-7780 と異なり、NCR の
　　　　 チップではマイクロコードが主記憶ではないところで実行されます。

         次の点で高性能が見込まれます。スループット (SCSI バス上で
         10M/sec、PCI バスから主記憶への転送時間は 100M/sec 近い) と、
         待ち時間 (コマンドの開始まで 5 から 10 us)

         利用には SCSI チップを制御するコードとそのアセンブラ、
         Linux 用のドライバを書く必要があり、これには長くかかります。

　　　　 ドライバは現在デバッグ中です。NCR チップ用のコードや
　　　　 その Linux 用ドライバはまだ問題がないとは言えず、問題を
　　　　 見つけるため、リモートデバッガを組み込んでいます。

　　　　 始めのうち、ドライバはメインボード搭載型の NCR53c810
　　　　 PCI SCSI アダプタでのみ動作するものになるでしょう。

       Qlogic

       Trantor T130B / 仮想DMA を用いる NCR53c400を使った品
         Trantor T130B は NCR53c400 チップを用いて実用的に構成されて
         います。それほど性能の出ない ISA SCSI への対策として 128 
         バイトのバッファ二つと NCR5380 ASIC にオンチップの仮想 DMA
         ハードウェアを追加しています。

         "T130B / 汎用 NCR53c400 ドライバ" は NCR5380 ドライバに小さな
         変更を加えたものです。

         現在、割り込み駆動型のコードが動作しています。このドライバを
         組み込んだカーネルでは応答性が大変改善されています。バッファと
         仮想 DMA を利用したドライバはまだ開発中です。

    ☆ 動作しない SCSI ホスト
       パラレル → SCSI アダプタは全部
       Rancho SCSI ボード
       Grass Roots SCSI ボード

    ☆ 絶対に動作しない SCSI ボード
       Adaptec 互換でない DTCのボード (3270 と 3280 を含む)

　　　 プログラミング情報の入手には DTC との非公開契約 (NDA) が必要です。
　　　 これは Linux 用のドライバを書いても配布できないことを意味します。
　　　 NDA に従うことはソースを含めずに配布することを意味しますが、
　　　 これは GPL に反します。一方 GPL に従うことはソース込みで配布する
　　　 ことを意味しますが、これは NDA に違反してしまうのです。

    未対応のハードウェアを Linux で使う場合、自分でドライバを書くか
    誰かにドライバを書いてもらうかしてください。Eric Youngdate 氏や
    私が Linux の SCSI ドライバに関する技術的な情報を提供します。

                                −・−

２節  よくある問題

    1. SCSI タイムアウト

       割り込みを正しく設定してください。また、IRQ, DMA, アドレスは
       他のボードの設定との衝突を避けてください。


    2. 自動認識 (プローブ) に BIOS を利用するボードで自動認識されない。

       以下に挙げるホストアダプタにおいて

	 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, Western Digital 7000

       ブート時に認識されない。例えば、

         scsi : 0 hosts

       のメッセージや、

         scsi%d : type

       のメッセージがシステムに搭載された SCSI アダプタ毎に表示されない
       場合、自動認識処理がそのボードを認識できないと思われます。

       BIOS を利用して自動認識するドライバは、BIOS が無効になっていると
       自動認識に失敗します。BIOS が有効になっているか、そして他の装置の
       BIOSと衝突していないかを確認してください。

       BIOS が有効になっている場合は、自動設定ルーチンが目印にしている
       文字列や BIOS のアドレスが、お使いのボードのものと合っていないの
       でしょう。

       BIOS がインストールされている場合、DOS の DEBUG コマンドを使い、
       ボードが特定できるような文字列を BIOS の中から探してください。
       たとえばボードのアドレスが 0xc8000 から始まる場合、DOS で
       次のようにコマンドを使います。

           debug
           d c800:0
           q

       この結果見つかった、お使いの SCSI コントローラに特有な ASCII
       文字列とその長さ、ベースアドレス (上の例では 0xc8000) からの
       文字列のオフセットの三つを、メーリングリストの SCSI チャンネルに
       送ってください。正確な文字列をください。また、16進表示のままと
       ASCIIコードに変換したものの両方をください。

       Adaptec 152x, Trantor T128, Seagate のドライバのどれかを使っていて、
       BIOS がインストールされていない時には、カーネル・コマンドラインか
       コンパイル時に強制的に認識させるように設定できます。

       お使いの SCSI ボードに関連する節を参照してください。


    3. メモリに IO をマップするボードが動かない。

       (Trantor T128 と Seagate のドライバが含まれますが、Adaptec,
        NCR5380 汎用, PAS16, Ultrastor などのドライバは関係ありません。)

       メモリ空間にマップされた I/O ポートが不正にキャッシュされると
       大抵はこの問題がおきます。XCMOS の設定でボードのアドレス空間を
       キャッシュ不可にします。

       これが出来なければ、キャッシュ全体を無効にしなければなりません。


    4. αドライバを組み込んだブート用カーネルが動かない。

       画面には「kernel panic : cannot mount root device」と
       表示される。または手元の Linux が立ち上がらない。

       ディスクに書き込む前、あるいは後に、カーネルのバイナリイメージを
       編集します。各自のシステムで動くように (リトル・エンディアンの)
       ２バイトの組を修正します。

       1. オフセット 502 にスワップデバイスを設定。普通は 0。

       2. オフセット 504 にラムディスクの大きさを設定。ここでは
          ブートフロッピーの容量をキロ単位で指定。5.25 インチなら
          1200。3.5 インチなら 1440。

          つまり、オフセット 504 に書く値は次のようになります。

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

       3. オフセット 508 にルートデバイスを設定。
          ここでは 0 (つまりブートデバイス)。

       以上のような変更を加えたカーネルを dd か rawrite コマンドで
       ディスクに書き込みます。書き込みが終ったフロッピーを A ドライブに
       挿入してリブートします。この後ルートディスクの挿入を要求されたら、
       お持ちの Linux に付いていたルート用フロッピーを挿入してください。

    5. 標準カーネル配布に入っていないデバイスドライバの導入

       そのドライバの作者が使っているバージョンのカーネルが必要です。
       このバージョンは、ドライバに付属の文書にかかれているかも
       知れません。

       最近の、各種リビジョンのカーネルは次のところにあります。

           nic.funet.fi:/pub/OS/Linux/PEOPLE/Linus

       ファイル名はlinux-バージョン.tar.gz です。

       このようなファイルは tsx-11.mit.edu やその他のサイトに
       コピーされています。

       このようなファイルを取得したら、/usr/src に移動して古いカーネルの
       ソースファイルを削除します。古いソースを取っておきたければ、

           mv linux linux-old

       のようなコマンドを実行します。その後で取得したファイルを展開します。

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

       ここでデバイスドライバのパッチを当てます。パッチは /usr/src より
       下のディレクトリからの相対バスで保存されているはずです。
       パッチファイルを調べるとどこでファイルを展開すれば良いかが
       わかります。これには「grep ^--- ファイル名」を実行します。例えば

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

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

       のような行を含むファイルは、/usr/src/linux の中で展開すれば
       良いことがわかります。

       適切なディレクトリで tar ファイルを展開します。例えば

           tar tfv patches.tar 

       のようなコマンドを使うと、書庫にどんなファイルが含まれるかが
       わかります。必要ならこのファイルを移動します。(SCSI ドライバ用の
       ファイルは /usr/src/linux/kernel/drivers/scsi ディレクトリに
       入れなければなりません。)

       適切なディレクトリに移動してから

           patch -p0 < patch_file

       を実行するか、パス名の最初のディレクトリを無視するように
       patch コマンドで指定しても良いでしょう。例えば

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

       というパス名のパッチファイルを /usr/src/linux ディレクトリで
       使う場合は、次のコマンドを実行します。

           patch -p1 <  patches 

       これで、パスの最初の「linu-new」を取り去ってからパッチが
       当てられます。

       パッチ当てが終わったら、patch コマンドがパッチ当てを拒否した
       ファイルを探します。ファイル名の最初に # が付いているものが
       パッチが当たらなかったファイルです。

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

       このようなファイルがあれば、その中を見てみます。異なっているのが
       RCS の識別子である場合は、なにも問題はありません。そうでなければ
       手動でパッチを当てなければなりません。diff ファイルの解説は
       この文書で扱う内容ではありませんので割愛します。

       １章８節「環境設定とカーネルの作成」を参照してください。

    6. パッチのないドライバの導入

       ドライバ作成者がドライバの .c や .h ファイルにパッチを提供して
       いないか、パッチが使いたいカーネルに対して古くて対応できない場合
       です。

        1.  .c と .h ファイルを /usr/src/linux/drivers/scsi に複写します。

        2.  環境定義を追加します。

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

                *
                * SCSI low-level drivers
                *

            のところに使用するドライバを表す 2 値環境変数を追加します。
　　　　　　例えば、

                bool 'Allways 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

            書き足す場所は、次に示す行より前です。

                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_hosts[] 配列に Scsi_Host_Template を追加します。
            これは .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

        １章第８節「環境設定とカーネルの作成」を参照してください。

                                −・−

３節  Adaptec 152x, 151x, Sound Blaster 16 SCSI, SCSI Pro, Gigabyte,
      その他の AIC 6260/6360 チップを用いた製品 (標準)

【対応している設定】
     BIOS アドレス : 0xd8000, 0xdc000, 0xd0000, 0xd4000, 0xc8000,
                     0xcc000, 0xe0000, 0xe4000
            ポート : 0x140, 0x340
               IRQ : 9, 10, 11, 12
               DMA : 未使用
                IO : ポートマップ

          自動設定 : BIOS をインストールしたボードはたいてい動作
                     その他のボードではカーネル・コマンドラインか
                     コンパイル時の強制設定が必要 (Adaptec 1510,
                     Sound Blaster16 SCSIが含まれます)
          強制設定 :
            コンパイル時 : PORTBASE, IRQ, SCSI_ID, RECONNECT を適切に設定。
                           マクロ定義の項を参照。
            カーネルコマンドライン :
                           aha152x=<PORTBASE>,<IRQ>,<SCSI-ID>,<RECONNECT>

            通常、SCSI-ID は 7 で、RECONNECT は 0 以外です。

            0x340、IRQ 11、SCSI-ID 7、SCSI バスのディスコネクト／リコネクト
            を認める場合、カーネル・コマンドラインに次のように指定します。

                           aha152x=0x340,11,7,1

【古い問題・更新すれば解決】
    1.  VL バスのマザーボードでは動作しない。1.0.5 より前のカーネルには
        タイミングに関する問題があります。

【マクロ定義】
          AUTOCONF : コントローラの設定を使用(152x だけ)
               IRQ : 割り込みチャネル (9, 10, 11, 12) を強制設定・標準は 11
           SCSI_ID : AIC-6260 の SCSI-ID を強制設定・標準は 7
         RECONNECT : ターゲットの非接続／再接続／マルチ
                     未実行の (outstanding) コマンド - 非 0 で有効・0 で無効
        DONT_SNARF : ポートを登録しない (pl12 以下)
     SKIP_BIOSTEST : BIOS では自動認識しない (AHA-1510 や BIOS 無効の場合)
          PORTABLE : ポートのベースアドレスを指定。自動認識 (プローブ) は禁止

                                −・−

４節  Adaptec 154x, AMI FastDisk VLB, Buslogic, DTC 329x (標準)

【対応している設定】
            ポート : 0x330, 0x334
               IRQ : 9, 10, 11, 12, 14, 15
               DMA : 5, 6, 7
                IO : ポートマップ・バスマスタ
【自動設定】
    対応済みの設定ならどれでも動作
    BIOS のインストールは不要
    強制設定 : なし

【備考】
    Buslogic 社は Adaptec 1542 とソフトウェア互換がある ISA、VLB、EISA用
    のシリーズ製品を製品化しています。

【古い問題・更新すれば解決】
    1.  0.99.pl10 より前のカーネルでリビジョン・C のボードを使うと
        突然エラーが発生する。

    2.  0.99.pl14k より前のカーネルではリビジョン・C のボードは
        次の点が未対応。

           ・1 ギガ以上のディスクでの BIOS の拡張マッピング
           ・三つ以上のドライブの BIOS での対応
           ・SCSI バスの自動スキャンの BIOS での対応

    3.  0.99.pl15e より前のカーネルではリビジョン・C のボードは
        BIOS の三つ以上のドライブ対応を有効にするとともに
        BIOS の 1ギガ以上のディスクでの拡張マッピングを無効にすると
        動かない

    4.  0.99.pl14u より前のカーネルではリビジョン・CF のボードは
        使えない。

    5.  1.0.5 より前のカーネルは複数のデバイスが同時にアクセスされると
        暴走する。

【よくある問題】
    1.  リビジョン・C のボードでは、突然エラーが発生します。

        154xC ボードの初期の物ではある種の SCSI 信号でスルーレートが高く、
        インピーダンスが不適切なケーブルでは信号が反射します。
        特に外付け用のケーブルを使う場合、ケーブルを交換すると
        問題が解消するでしょう。

    2.  リビジョン・C のボードでは、初期化中に「interrupt received」や
        「no mail」といったエラーが出ます。

        未対応の BIOS オプションを使うと、こういったエラーが
        出るかもしれません。未対応のオプションをオフにするか、カーネルを
        1.0 以上にしてください。

   3.  「Interrupt received, but no mail」というメッセージがブート時に
        表示され、SCSI デバイスが認識されません。

        BIOS オプションを無効にして、1 ギガ以上のディスク、3 つ以上の
        ディスク、バスの自動スキャンに対応させましょう。または、
        カーネルを0.99.pl14k かそれより新しいものに更新しましょう。

   4.   時々 SCSI サブシステムが止まってしまいます。

        これは比較的よく見られる現象です。この件については 1542C よりも
        1542B の方が信頼がおけるとの報告があります。また、ケーブルの不良や
        電源コネクタが抜けかかっている場合にも同様の現象となることが
        あります。

　      複数のデバイスが同時に使われる時、このような現象に見えることが
  　    あります。この場合、デバイスのファームウェアを更新することで
    　  問題を解決できないかデバイスのメーカーへ問い合わせてみてください。
        最後の方策としては、aha1542.h 内の AHA1542_MAILBOX を 1 に変更する
        というものがあります。これは SCSI バス上に同時に置かれる未実行の
        コマンドを一つだけに制限します。テープドライブか低速の CD-ROM 
        ドライブを SCSI バス上につないでいる場合、これは現実的な対策とは
        言えません。

                                −・−

５節  Adaptec 174x (EISA)

【対応している設定】
          スロット : 1 〜 8
            ポート : EISA ボードなので無し
               IRQ : 9, 10, 11, 12, 14, 15
               DMA : EISA ボードなので無し
                IO : ポートマップ・バスマスタ
          自動設定 : 対応済みの設定ならどれでも動作
          強制設定 : なし

【備考】
    Adaptec 社はこのボードの販売を打ち切りました。

【よくある問題】
    Adaptec 1740ドライバで

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

    のようなメッセージが出れば、コントローラが無効になります。
    これは、コントローラが拡張モード (enhanced mode) では
    動いていないからです。174x ドライバは 1542 モードには
    対応していません。

                                −・−

６節  Allways IN2000 (α版)

α版の所在 : tsx-11.mit.edu/pub/linux/ALPHA/SCSI/in2000
             ドライバは in2000.tar.z、ブート用カーネルは zImage です。

【対応している設定】
            ポート : 0x100, 0x110, 0x200, 0x220
               IRQ : 10, 11, 14, 15
               DMA : 未使用
                IO : ポートマップ
          自動設定 : BIOS は不要
          強制設定 : なし

【よくある問題】
    IDE ドライブを積んだシステム、およびスワップを設定した
    システムで問題があることが判っています。

                                −・−

７節  TMC-1800 か TMC-18C50 チップを使った Future Domain 16x0

【対応している設定】
              BIOS : 2.3, 3.0, 3.2
     BIOS アドレス : 0xc8000, 0xca000, 0xce000, 0xde000
            ポート : 0x140, 0x150, 0x160, 0x170
               IRQ : 3, 5, 10, 11, 12, 14, 15
               DMA : 未使用
                IO : ポートマップ
          自動設定 : 対応済みの設定ならどれでも動作
                     BIOS のインストールが必要
          強制設定 : なし

【古い問題・更新すれば解決】
    1.  古いバージョンのものは TMC-18C50 チップには対応していません。
        また、新しいボードでは動作しません。

    2.  古いバージョンのものは最新の BIOS では自動認識できません。

    3.  1.0.9 と 1.1.6 のものは新しい SCSI チップや 3.4 BIOS では
        動作しません。

                                −・−

８節  NCR5380 汎用 / T130B

【対応・未対応の設定】
            ポート : 全部
               IRQ : 全部
               DMA : 未使用
                IO : ポートマップ
          自動設定 : なし

【強制設定】
    コンパイル時 :
    ポートと IRQ を一組の配列として GENERIC_NCR5380_OVERRIDE に定義。
    例えば NCR5380 ボードでポート番号が 330、IRQ が 5 の場合:

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

    T130B でポート番号が 350 の場合：

      #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

    また、255 は IRQ を使用しないための、254 は IRQ を自動設定するための
    オプションです。

【よくある問題】
    1.  T130B ボードで古い (公開第 6 版より前の) 汎用 NCR5380 ドライバを
        使う場合、カーネル・コマンドラインに ncr53c400 に関する指定が
        できない。

        NCR5380 互換のレジスタはベースアドレスから 8 ずれた位置にあります。
        そこで、指定したいベースアドレスが 0x350 ならば

          ncr53480=0x358,254

        と指定してください。

【古い問題・更新すれば解決】
    1.  カーネルが T130B または NCR53c400 ボードによるディスクアクセスの
    　　間、止まってしまう。

        公開 6 版より前の汎用 NCR5380 ドライバはこれらのボードの割込みを
        扱えません。ドライバを更新してください。

【注意】
    このドライバは DMA や仮想 DMA にはまだ対応していません。

                                −・−

９節  Seagate ST0x/Future Domain TMC-8xx/TMC-9xx

【対応・未対応の設定】
    ベースアドレス : 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000
               IRQ : 3, 5
               DMA : 未使用
                IO : メモリマップ
          自動設定 : IRQ は 5 と仮定してアドレスを設定。
                     BIOS のインストールが必要。

【強制設定】
    コンパイル時に、OVERRIDE にベースアドレス、CONTROLLER には
    「FD」か「SEAGATE」、IRQ には IRQ 番号をそれぞれ定義。

    カーネル・コマンドラインでは「st0x=irq, アドレス」または
    「tmc8xx=irq, アドレス」を指定します。(0.99.13b かそれより
    新しいものだけで使用可。)

【古い問題・更新すれば解決】
    1.  0.99.pl12 よりも前のカーネルでは低速のデバイスとのハンドシェークが
        うまくできません。

        パスにデータを書き込んだ時に次のようなことが起こります。

        1. データレジスタに 1 バイト書き込み、データレジスタの内容が
           バスに出力される
        2. 残り時間 = 12μ秒
        3. 残り時間 > 0 で、かつ REQ信号が真ではない間、待つ
        4. 残り時間 > 0 なら、ACK信号を真にする
        5. 残り時間 > 0 で、かつ REQ信号が真の間、待つ
        6. ACKを偽にする

        コマンドを読むごとにコマンドの処理をするような低速の
        デバイスでは、REQ/ACK ハンドシェークが 12 μ秒以上かかり、
        ドライバが期待している間には REQ が FALSE にならないので、
        各 REQ 信号に対して複数バイトを送ってしまうことになります。

    2.  Linux 0.99.pl12 では、調停コードを私が修正した時に、新しい
        バグがまぎれこみました。このため、中にはセレクションが失敗する
        システムもありました。これは0.99.pl13 で修正されています。

【よくある問題】
    1.  パーティションテーブルを読む時、また他のディスクにアクセスする時に
        よくタイムアウトが発生します。

        ボードは出荷時には MSDOS 用に設定されています。つまり割り込みは
        無効になっています。割り込みを有効にするジャンパーは、Seagate では
        W3 (ST01) か JP3(ST02) です。またショートピン F・G で IRQ 5 に
        設定します。

    2.  安価な SCSI テープや CD-ROM など、このドライバでは扱えない
        デバイスがあります。

        Seagate では、SCSI バスの REQ/ACK ハンドシェークを PC のバスの
        IO CHANNEL READY と繋ぎ、また、オプションで 0WS 信号にも繋げます。
        しかし、監視タイマがいつ時間切れになるかわかりませんし、
        REQ がローになったかどうかを確実に調べる方法もありません。
        この結果、一回分の REQ パルスを複数回のパルスと見間違えることが
        あります。

        この問題に対処するには、REQ がローになるのをループで絶えず
        見張る必要があります。また、割り込みなどで状態の変化を
        捉えられなかった時のためにタイムアウトも設定しています。
        こうすると性能が低下するので、全ての SCSI デバイスにこの方法を
        使うのは好ましくありません。代わりに「scsi_devices」配列内の
        各 SCSI デバイスに対応した「borken」項を使って、デバイス毎に
        タイムアウトを使うか選択します。問題が発生したら、「borken」項が
        0 にリセットされないデバイスのリストに、問題のあるデバイスを
        追加します。(現在はTENEX CDROM だけ。)

    3.  Future Domain ボード (とくに 880) が動かない。

        Future Domain のボードの一部では Seagate のレジスタマッピングを
        使っていて、ステータスレジスタの MSG と CD ビットが入れ替わります。

        seagate.h を編集し、STAT_MSG と STAT_CD のマクロ定義を
        入れかえてください。このあと、CONTROLLER に SEAGATE を定義し
        IRQ と OVERRIDE も適切に設定してカーネルを再コンパイルして
        ください。

    4.  fdisk を実行すると HDIO_REQ または HDIO_GETGEO ioctl が失敗した
    　　というエラーが表示される。

        このような場合、BIOS を用いてディスクのジオメトリーを手動で
        設定する必要があります。このドライブ上のパーティションから LILO 
        を用いてカーネルをブートしたい場合は /etc/lilo/disktab への設定
        を行ってください。

    5.  手動でディスクのジオメトリーを指定した後、パーティション
    　　テーブルを読みだすとパーティションの境界がシリンダ境界でない、
    　　物理境界と論理境界が一致しないなどのエラーメッセージが表示される。

        これは正常な状態です。メッセージ自体が問題ない事を示しています。

        BIOS 設定ではディスクのジオメトリー情報をパーティションテーブル
        へ格納しないため、 Linux にはテーブルへ書かれたジオメトリーを
        用いる方法がありません。しかし、 Linux は H/C/S (ヘッダ、シリンダ、
        セクタ）の項目の代わりにパーティションの開始位置と大きさを 32
        ビットの直線的な値で使いますから問題はありません。

    6.  0.99pl13 より前は動いていたシステムが新しいバージョンの Linux では
    　　動かない。以前のバージョンの Linux では制御レジスタやデータレジスタ
　　　　を Seagete 社の資料とは異なった割り当てにしており、うまく動かない
　　　　システムがありました。新しいバージョンで正しい割り当てにしたら、
　　　　今度は他のシステムでうまく動かなくなりました。

　　　　seagete.c の問題の部分を以下に示します。

    cli();
    DATA = (unsigned char) ((1 << target) | (controller_type == SEAGATE ? 0x80 :
    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 :
    sti()

    　　おそらく、これで問題は解決するでしょう。

【マクロ定義】

    FAST・FAST32
        出来るかぎり「blind transfer」を利用します。

    ARBITRATE 
        バスが空くのを待って作業を始めるのではなく、バスの調停を行ない、
        SCSI-II との互換性を高めます。私の修正を公開用ソースコードに
        反映させる作業が済んだら、LUN 一つにつき一コマンドを
        実行させられるようになるはずです。

    SLOW_HANDSHAKE
        ドライバとのハンドシェークが遅いデバイス (CD-ROM など) の
        互換性を保ちます。

    SLOW_RATE=x
        ハンドシェークが動作しない場合に、「x」の値により標準転送レートを
        指定します。

                                −・−

１０節  PAS16 SCSI

【対応・未対応の設定】
            ポート : 0x388, 0x384, 0x38x, 0x288
               IRQ : 10, 12, 14, 15
                     *重要* IRQ はボードの音源部分とは違う番号を
                            指定しなければなりません。
               DMA : SCSI に関しては未使用
                IO : ポートマップ
          自動設定 : BIOS 不要

【強制設定】
    コンパイル時 : 
        ポートと IRQ を一組の配列として PAS16_OVERRIDE に定義。
        例えば、ポートが 0x388 で IRQ が 10 の場合

            #define PAS16_OVERRIDE {{0x388, 10}} 

    カーネル・コマンドライン :
        pas16=port,irq

【マクロ定義】
    AUTOSENSE
        定義されれば、CHECK CONDITION 状態で終了するコマンドに対して
        自動的に REQUEST SENCE を実行します。

    PSEUDO_DMA
        仮想 DMA ハードウェアを有効にします。ポーリング I/O にくらべて
        性能が 3 〜 4 倍くらい向上します。

    PARITY
        パリティチェックを使用します。サポートなし。

    SCSI2
        SCSI-2 のタグ付きキューイングに対応します。未テスト。

    UNSAFE
        仮想 DMA 転送時に割り込みを禁止しません。高速で通信すると
        文字落ちのような問題がある場合にだけ使用します。このような
        場合にもデータの転送量を変更してみる方が良いでしょう。

    USLEEP
        切断 (disconnect) しないデバイスに対応します。未テスト。

【よくある問題】

    1.  コマンドがタイムアウトしたり実行が中断されます。

        以前私がインターネットで公開した NCR5380 パッチを使ってください。
        このパッチは将来のα版ドライバには統合されるはずです。
        このパッチは初期の NCR5380 ドライバで発生する競合条件を
        修正し、NCR5380 を使ったボードで複数のデバイスに対応します。

        このパッチでもうまく動作しなければ、drivers/scsi/pas16.c の
        「#define PSEUDO_DMA」という部分を「#undef PSEUDO_DMA」に
        変更して、PSEUDO_DMA オプションを無効にします。ただし、
        この対策をとると性能が極端に低下しますから、これは最後の手段と
        考えてください。

                                −・−

１１節  Trantor T128/T128F/T228

【対応している設定】
    ベースアドレス : 0xcc000, 00xc8000, 0xdc000, 0xd8000
               IRQ : なし, 3, 5, 7 (全ボード)
                     10, 12, 13, 15 (T128F だけ)
               DMA : 未使用
                IO : メモリマップ
          自動設定 : 対応済みの設定ならどれでも動作
                     BIOS のインストールが必要

【強制設定】
    コンパイル時に、アドレスと IRQ の組の配列を T128_OVERRIDE に定義。
    例えばボードアドレスが 0xcc000、IRQ が 5 の場合:

        #define T128_OVERRIDE {{0xcc000, 5}} 

    ここでは、IRQ を表す IRQ_NONE や IRQ_AUTO が使用できます。

    LILO コマンドでは「t128=アドレス, irq」を指定します。

    また -1 は IRQ を使用しないための、-2 は IRQ を自動設定するための
    オプションです。

【マクロ定義】

    AUTOSENSE
        CHECK CONDITION ステータスをともなって終了するコマンドに対し
        REQUEST SENSE を行ないます。

    PSEUDO_DMA
        仮想 DMA ハードウェアを有効にし、ポーリング I/O に比べて
        3 〜 4 倍の性能が出ます。

    PARITY
        パリティチェックを有効にします。未サポート。

    SCSI2
        SCSI-II のタグ付きキューイングに対応します。未テスト。

    UNSAFE
        仮想 DMA 転送の間、割り込みを有効にしておきます。高速転送時に
        文字落ちの問題がある場合にだけ使うべきです。この問題がある時にも
        転送サイズをいじる方がいいでしょう。

    USLEEP
        切断 (disconnect) しないデバイスに対応します。未テスト。

【よくある問題】

    1.  コマンドがタイムアウトしたり実行が中断されます。

        以前私がインターネットで公開した NCR5380 パッチを使ってください。
        このパッチは将来のα版ドライバには統合されるはずです。
        このパッチは初期の NCR5380 ドライバで発生する競合条件を
        修正し、NCR5380 を使ったボードで複数のデバイスに対応します。

        このパッチでもうまく動作しなければ、drivers/scsi/pas16.c の
        「#define PSEUDO_DMA」という部分を「#undef PSEUDO_DMA」に
        変更して、PSEUDO_DMA オプションを無効にします。ただし、
        この対策をとると性能が極端に低下しますから、これは最後の手段と
        考えてください。

                                −・−

１２節  Ultrastor 14f (ISA), 24f (EISA), 34f (VLB)

【対応している設定】
            ポート : 0x130, 0x140, 0x210, 0x230, 0x240, 0x310, 0x330, 0x340
               IRQ : 10, 13, 14, 15
    DMA チャンネル : 5, 6, 7
                IO : ポートマップ・バスマスタ
          自動設定 : ボードのポートが 0x310 の場合は動かない
                     BIOS は不必要
          強制設定 : コンパイル時に PORT_OVERRIDE を定義

【よくある問題】
    1.  アドレス・0x310 は自動認識コードでは対応していませんし、
        ネットワークが有効になっている時には衝突するかもしれません。

                別のアドレスを使いましょう。

    2.  Ultrastor をアドレス・0x330 で使うと、音源ドライバが
        自動認識しようとする時にシステムがハングするかも知れません。

                別のアドレスを使いましょう。

    3.  さまざまなドライバがいろいろなアドレスで危険な自動認識を
        行います。ドライバがボードを見つけられなかったり、
        ブート時にシステムがハングすることがあれば、別のアドレスを
        使いましょう。

        0x340 では正しく動作すると報告されていますので、このアドレスを
        お勧めします。

    4.  Linux は SCSI デバイスを認識しませんが、Ultrastor の
        SCSI ボードにつながっている SCSI ハードディスクは
        普通 (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 モードになっている時に
        発生します。

        1. お勧めは Ultrastor を専用モードに変更することです。これは、
           クラスタ化された入出力のパッチを使うととくに SCSI ドライバが
           IDE ドライバに比べて格段に速いからです。このパッチを使って
           2M／秒以上の転送レートを維持している人もいます。

           ハードディスクでないデバイスや、二つ以上のハードディスクを
           Ultrastor で使う時には、そのように設定しなければなりません。

        2. ブートストラップするために、カーネル・コマンドラインで
           次のコマンドを使って強制的に値を設定します。

                hd=シリンダ数,ヘッド数,セクタ数

           シリンダ数は 2048 以下、ヘッド数は16 以下、セクタ数は
           255 以下の範囲で、シリンダ数×ヘッド数×セクタ数が
           マッピングに合うよう設定します。

           また、Linux で fdisk コマンドを使う時には手動でディスクの
           ジオメトリーを設定しなければなりません。そうしないと
           不正なパーティション情報が書きこまれ、Linux では動作しても
           シリンダ／ヘッド／セクタ数を参照する DOS ては使えない
           ディスクになってしまいます。

           Linux が起動してしまえば、include/linux/config.h の
           HD_TYPE マクロを適切に定義してカーネルを再コンパイルできます。
           再コンパイルすれば、手で入力してブートするといった不便さを
           解消できます。

                                −・−

１３節  Western Digital 7000

【対応している設定】
     BIOS アドレス : 0xce000
            ポート : 0x350
               IRQ : 15
     DMA チャンネル: 6
                IO : ポートマップ・バスマスタ
          自動設定 : BIOS のインストールが必要

【よくある問題】
    1.  チップやファームウェアにいくつか種類があります。リビジョン 3 の
        ボードは動作しないと思います。リビジョン 5 のボードは動きます。
        ボード名の最後に「A」が付いている物は動作しますが、何も
        付いていないものは動作しません。

    2.  ドライバが対応している BIOS アドレス一覧にはない BIOS
        アドレスのいくつかにボードが対応しています。この場合は、
        ドライバが対応している BIOS アドレスにボードを設定しましょう。
        また、この時には２章「バグの報告」の指針に沿った内容の
        バグ報告を送ってください。

______________________________________________________________________________

４章  ディスクドライブ

      この章ではディスク装置についての情報を扱います。

１節  対応ハードウェア・未対応ハードウェア

    ブロックサイズが 256, 512, 1024 の SCSI ダイレクト・アクセス・
    デバイスは全て動くはずです。これ以外のブロックサイズの物は動きません。
    ただし、MODE SELECT SCSI コマンドを使ってブロックやセクタの大きさを
    変更すると、この問題は回避できます。

    セクタの大きさは、各セクタに割り当てられるデータのバイト数です。
    たとえば CD-ROM ならセクタの大きさは 2048 です。

    ブロックの大きさは、デバイスとのインターフェースに使用される
    論理ブロックの大きさのことです。これは普通セクタの大きさと
    同じですが、なかには小さな物理セクタ (例えば 55M の Syqest では
    256 バイト) を複数個、大きな論理ブロックに割り付けたり、
    その反対のことをするデバイス (例えば SUN 互換の CD-ROM では
    512 バイトのブロック) もあります。

    ベルヌイ、フロプティカル、MO などのりムーバブルメディア用デバイスも
    動作するはずです。

                                −・−

２節  よくある問題

    1.  パーティションを切る時、「cylinder > 1024」のような警告が
        出たり、1024 以上の論理シリンダを含んだパーティションからは
        ブート出来ない事があります。

        これは BIOS の制限です。詳しくは「４節 ディスクのジオメトリー」を
        参照してください。

    2.  /dev/hd* でパーティションが切れません。

        /dev/hd* は SCSI デバイスではありません。/dev/sd* が SCSI 用です。
        「４節 ディスクのジオメトリー」と「５節 パーティションを切る」に
        正確なデバイス名やパーティションの切り方の記述があります。

    3.  リムーバブルメディアを使うデバイスで、メディアの排出ができません。

        うっかりメディアを入れ換えてファイルシステムが破壊されるのを
        防ぐため、 Linux はメディアがマウントされるとメディアを
        取り出せないように固定します。

        メディアを取り出す前にディスクをアンマウントしましょう。

    4.  LILO を用いて SCSI ディスクからブートできません。

        SCSI ドライバと BIOS が BIOS のマッピング (後述) によって
        食い違っている場合があります。 LILO がブート時に 'LI' を表示した
        まま止まっていたら、この問題かも知れません。

        DOS を用いて BIOS のジオメトリ割り付けを行い、/etc/lilo/disktab
        に問題のディスクに関する項目を記述してください。

        その代わりに、 LILO の環境設定ファイルに "linear" オプションを
        指定することもできます。

                                −・−

３節  デバイスファイル

    SCSI デバイスはメジャー番号が 8 で、BSD のような「raw」デバイスは
    ありません。

    各 SCSI ディスクには 16 のマイナー番号が割り付けられます。
    「マイナー番号 % 16 == 0」がディスク全体を指し、
    「1 <= マイナー番号 % 16 <= 4」が基本パーティション、
    「5 <= マイナー番号 % 16 <= 15」が拡張パーティションを指します。

    16 ビットの dev_t の内 8 ビットだけをマイナー番号に割り当てる
    という Linux の制限のため、SCSI ディスクのマイナー番号は
    SCSI HOST/ID/LUN が最小の物から順に動的に割り当てられます。

    例えば次のようになります。(ホストアダプタは一つ)

    デバイス                    ターゲット  LUN         SCSI ディスク
    84MB 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          なし
    213M Maxtor                   6          0          /dev/sdd

    標準的な名前の付け方は

        /dev/sd{文字} がディスクデバイス自体を指し (マイナー番号 % 16 == 0)、
        /dev/sd{文字}{パーティション} がそのデバイスの
        パーティション (マイナー番号は 0 〜 15) を指します。

        例 :
        /dev/sda   ブロックデバイス メジャー番号 8 マイナー番号 0
        /dev/sda1  ブロックデバイス メジャー番号 8 マイナー番号 1
        /dev/sda2  ブロックデバイス メジャー番号 8 マイナー番号 2
        /dev/sdb   ブロックデバイス メジャー番号 8 マイナー番号 16

                                −・−

４節  ディスクのジオメトリー

    Linux で SCSI ディスクのパーティションを切る際、Linux が
    SCSI インターフェースと直接やりとりする点には問題があります。
    各ディスクは、SCSI インターフェースに見えるままに Linux にも
    見えます。0 から N-1 の計 N ブロックで全てエラーフリーです。
    ディスクのジオメトリを取得するための方法には、移植性のあるものは
    存在しません。DOS は時代遅れで、ヘッド数・シリンダ数・セクター数の
    マッピングが必要です。

    DOS との共存を考えないなら、次のように変換します。

      ヘッド数 × シリンダ数 × セクタ数 ÷ 512 ＜ ドライブのバイト数
      (メガバイトは 2 の 20 乗)

    DOS と Linux を共存させるなら、BIOS のマッピングを使う必要が
    あります。場合によっては、問題のドライブの SCSI ID が 0 になるよう
    ディスクを再設定し、(使っているなら) 二台目の IDE ドライブを
    使わないように設定する事になります。

    Norton Utilities のようなプログラムを使うか、DOS で
    次のプログラムを使います。

        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 が最初に認識するディスクのヘッド数、
    セクタ数、シリンダ数が表示されます。

    ディスクのジオメトリに関する BIOS の制限は次の通りです。

      1 <= ヘッド数 <= 256
      1 <= シリンダ数 <= 1024
      1 <= セクタ数 <= 63

    ですから、1024 以上の論理シリンダを含むパーティションを作ると
    BIOS からはアクセスできず、このパーティションからカーネルを
    ブートさせる事も出来ません。Linux では、パーティションテーブルには
    ヘッド・シリンダ・セクタの組合せでなく相対的なセクタ数と
    その長さを使用するのでこの問題とは無縁で、一度ブートしてしまえば
    アクセスは可能です。

                                −・−

５節  パーティションを切る

    標準的なパーティション方法を採用している OS なら、DOS, OS/2, 
    Linux, その他好きな OS 上でパーティションプログラムを用いて
    SCSI ディスクのパーティションを切ることが可能です。

    Linux の fdisk プログラムは、コマンドラインでデバイスを指定して
    使用します。例えば最初の SCSI ディスクでパーティションを切るなら
    次のように起動します。

        fdisk /dev/sda

    デバイスを明示的に指定しなければ、パーティションプログラムは
    /dev/hda に対して操作を行ないます。しかし、これは SCSI ディスクでは
    ありませんので注意してください。

    1024 番目のシリンダを越してパーティションを切ると、警告が出ることも
    あります。「４節 ディスクのジオメトリー」の解説を参照してください。

______________________________________________________________________________

５章  CD ROM ドライブ

      この章では CDROM ドライブに関する情報を扱います。

１節  対応ハードウェア・未対応ハードウェア

    ブロックサイズが 512 か 2048 の SCSI CD ドライブは動作するはずです。
    ほかのブロックサイズの物は動作しません。

                                −・−

２節  よくある問題

    1.  CDROM をマウントできません。

        ISO-9660 CDROM をマウントするには次のコマンドを使います。

            mount -t iso9660 /dev/sr0 /ディレクトリ

        このコマンドが正しく動作するには、カーネルがつぎのものに
        対応していなければなりません。

            SCSI
            使っているホストアダプタ
            SCSI CDROM ドライバ
            iso9660 ファイルシステム
        

    2.  CDROM を排出できません。

        うっかりメディアを変更してファイルシステムが破壊されるのを
        防ぐため、Linux はメディアがマウントされるとメディアを
        取り出せないように固定します。メディアを取り出す前に
        ディスクをアンマウントしましょう。

    3.  音楽を演奏できません。

        Workman か Xcdplayer を使ってください。

    4.  Workman や Xcdplayer が動きません。

        音楽関係の制御機能は SCSI-2 のコマンドの一部です。SCSI-2を
        サポートしていないドライブでは動かないでしょう。また、SCSI-1 の
        ほとんどや SCSI-2 の一部の CD-ROM ドライブでは音楽機能を用いる
        ために SCSI-2 のコマンドとは異なる独自のコマンドを使っています。
        Xcdplayer は NEC 社のドライブのコマンドに合わせるために何度か
        変更されています。pub/linux/BETA/cdrom の tsx-11.mit.edu を見て
        ください。

　　　　これらのプログラムは SCSI ではない CD-ROM ドライブでも、その
　　　　ドライブ用のドライバに SCSI ドライバと同様の ioctl (I/O 制御関数)
        が組み込まれていれば動きます。

                                −・−

３節  デバイスファイル

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

    マイナー番号は動的に割り付けられます。最初に見つかる CD-ROM の
    マイナー番号が 0、次のものが 1 などです。
    例は「４章 ディスクドライブ」の「３節  デバイスファイル」を
    参照してください。

    標準的なデバイス名は次の通りです。

        /dev/sr{数字}

        例:     /dev/sr0
                /dev/sr1

______________________________________________________________________________

６章  テープドライブ

      この章では SCSI テープドライブに関する情報を扱います。

１節  対応ハードウェア・未対応ハードウェア

    ドライバのバッファの大きさ (標準カーネルでは 32K) よりも小さな、
    固定長または可変長のブロックを使用するドライブには対応しています。

    ブロック数、バッファ、密度などのパラメータは (普通は mt プログラムの)
    ioctl で設定し、デバイスをクローズ・再オープンした後もそのパラメータが
    有効です。

    ほぼすべてのドライブが動作するはずです。たとえば

        Archive Viper QIC ドライブ (150M と 525M)
        Exabyte 8mm ドライブ
        Wangtek 5150S ドライブ
        Wangdat DAT ドライブ

                                −・−

２節  よくある問題

    1.  ブート時にテープドライブが認識されません。

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

    2.  複数のファイルが入ったテープが正しく読めません。

        複数のファイルが入っているテープを読むと、最初の tar ファイルは
        正しく読めるのに、ふたつめの tar ファイルを読むと何も言わずに
        失敗し、もう一度ふたつめの tar ファイルを読むと成功します。

        tar のような一般の利用者用のプログラムは、ファイルの印を
        理解しません。一回目の tar は最初のファイルの終わりまでを
        読み、二回目の tar は最初のファイルの印を読みます。この時には
        なにも読めませんが、テープは最初のファイルの印を越えて少し先に
        進みます。三回目の tar では、テープが二番目のファイルの
        最初に位置しているので、このファイルが読めます。

        非巻き戻しデバイスに対して mt コマンドを使い、テープが
        次のファイルまでくるようにテープを先に進めます。

    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

        というコマンドを使います。

    4.  他システムとのテープの交換ができません。

        他の OS で作ったテープが Linux で読めません。また
        Linux で作ったテープが他の OS では読めません。

        ブロックサイズは、しばしば OS ごとに異なります。ブロックサイズが
        固定されているテープデバイスは、異なったブロックサイズを
        使って書かれたテープを読むとエラーを発生します。

        このようなテープを読むにはテープドライバへ設定するブロックサイズを
        テープが書かれた時と同じ値、あるいは可変にしなくてはなりません。

        注意：ハードウェアブロックサイズというのは tar や dump などで
        　　　用いられるブロック化係数のことではありません。

        ブロックサイズの設定は mt コマンドで行えます。

                mt setblk <size>

        または

                mt setblk 0

        によって可変ブロックサイズを指定できます。

        注意：ここに挙げた mt コマンドの指定は、一部の Linux パッケージに
        含まれる GNU 版 mt ではサポートされていません。その代わり BSD 版
        の mt コマンドを使うことになります。ソースコードは

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

        から得ることができます。

    5.  テープをアクセスしようとすると、ことごとく
        「No such device」のようなエラーが出ます。

        テープデバイスの型を調べます。これはキャラクタ型でなければ
        ならず、メジャー番号とマイナー番号は３節「デバイスファイル」に
        解説している番号でなければなりません。

    6.  テープが指定した記録密度で読めますが書き込みはエラーになります。

        たいていのテープドライブは互換性維持のため、本来の記録密度よりも
        低い密度での読み込みをサポートしています。しかし、これら低い密度
        での書き込みはできないものもあります。

        QIC ドライブは特にこの傾向があり、古い 60M のテープを読むことが
        できますが、120、150、250 と 525M しか書き込みとフォーマットが
        できません。

                                −・−

３節  デバイスファイル

    SCSI テープデバイスのメジャー番号は 9 です。

    16 ビットの dev_t の内 8 ビットだけをマイナー番号に割り当てる
    という Linux の制限のため、SCSI テープドライブのマイナー番号は
    SCSI HOST/ID/LUN が最小の物から順に動的に割り当てられます。

    巻き戻し用のデバイスは 0 番から始まります。一台目の SCSI テープ装置
    である /dev/rst0 は c 9 0、二台目の /dev/rst1 は c 9 1 のように
    割り当てられます。非巻き戻し用のデバイスは、マイナー番号の
    再上位ビットが 1 になります。例えば /dev/nrst0 は c 9 128 です。

    標準的なデバイス名は次の通りです。

        /dev/nrst{数字}         巻き戻さないデバイス用
        /dev/rst{数字}          巻き戻すデバイス用

______________________________________________________________________________

７章  汎用ドライバ

      この章では汎用 SCSI ドライバに関する情報を扱います。

１節  対応ハードウェア・未対応ハードウェア

    SCSI デバイス汎用ドライバは、ディスク、テープ、CDROM、
    メディア交換ロボットなど、すべての SCSI デバイスに SCSI コマンドを
    送ります。

    あなたの SCSI ボードと電気的に互換性があるものは、すべて
    動作するはずです。

                                −・−

２節  よくある問題

    ありません :-)

                                −・−

３節  デバイスファイル

    SCSI 汎用デバイスはキャラクタ型でメジャー番号が 21 です。
    16 ビットの dev_t の内 8 ビットだけをマイナー番号に割り当てる
    という Linux の制限のため、マイナー番号は 0 からデバイスごとに
    動的に割り当てられます。例えば

        /dev/sg0

    は最初の SCSI ボードの、一番小さな LUN を持つデバイスです。

______________________________________________________________________________

８章  購入案内

      よくある質問に

        「Linux は多くのボードをサポートしていますが、どの SCSI ホスト
        アダプタを使ったら良いでしょう」

      というのがあります。

      これは、どの程度の性能を期待、あるいは必要とするかに依存します。
      計画に合ったマザーボードや SCSI 装置を取り付けてください。

      転送方式に何を用いるかが性能に大きく影響します。 (ここでは性能とは
      スループットと SCSI 入出力処理中の応答性を言います）

      転送方式　　特徴／性能／推奨
      純粋な    　純粋なポーリング I/O のボードは SCSI の処理のすべてを CPU
      ボーリング　で行います。これには REQ/ACK のハンドシェークも含まれます。

　　　　　　　　　高速な CPU であっても、REQ/ACK のハンドシェーク手続きは
　　　　　　　　　単純な装置状態によって遅くなります。得られる最高転送速度
　　　　　　　　　は高速なマシンで約 150K/sec、遅いマシンでは 60K/sec 程度
　　　　　　　　　でしょう。（これはファイルシステムを用いた場合の速度です）

                  この方式のドライバは SCSI バスがビジーの場合と同じに
                  見えるほどきついループに入り、CPU を100 % 近く消費して
                  SCSI の入出力がとても遅く感じられます。
                  低速の CD-ROM は DISCONNECT/RECONNECT を行えず、この方式
                  のボードでは応答性が得られません。

　                お薦めしません。

　　　連動型    　連動型ポーリング I/O 方式のボードは本質的には純粋な
　　　ポーリング　ポーリング I/O のボードと同じです。ただ、SCSI REQ/ACK の
                  ハンドシェーク信号だけが本体のバスのハンドシェーク信号と
                  連動しています。ハンドシェーク後のすべての SCSI 処理は
                  CPU で処理されます。

                  最高転送速度はファイルシステムを利用して 500 〜 600K/sec 
                  が得られます。

                  純粋なポーリング I/O 方式のボードと同様に、このドライバも
                  SCSI バスがビジーの場合と同じに見えるほどきついループに
                  入ります。CPU の利用率はデバイスの転送効率と DISCONNECT/
                  RECONNECT を行っているかどうかに依存します。

                  CPU の利用率は 25% (標準速の CD-ROM ドライブで DISCONNECT/
                  RECONNECT を使った場合) から 100% (高速ドライブ、あるいは
                  DISCONNECT/RECONNECT ができない能力の低い CD-ROM ドライブを
                  使った場合) まで変化します。

                  筆者の 486-66 で T128 ボードを用いた場合、CPU 時間の
                  90% が 547K/sec のスループットを維持するために使われて
                  いました。なお、T128 のハードウェア性能は 1080K/sec です。

                  低価格にしたいならば低速なテープ装置と CD-ROM 装置の
                  ためにこのボードを選んでも良いでしょう。

      FIFO 型     FIFO 型ポーリング I/O 方式のボードは CPU と SCSI バスの
      ポーリング　間に小さなバッファ (たいていは 8K) を置き、ある程度の
                  インテリジェンスを持たせています。これにより、 CPU には
                  次のような時しか負荷がかからなくなります。データが最高速で
　　　　　　　　　FIFO に送られる場合、 FIFO が空のため割り込み処理が動いて
                  いない、DISCONNECT/RECONNECT が行われている、などです。

　　　　　　　　　最高転送速度はほとんどの SCSI デバイスを扱うのに十分なだけ
                  得られるでしょう。 SCSI コマンドを直接使い、64K のブロックを
                  読み取るのに、Adaptec 1520 と高速な Seagate 社の Barcuda
                   (訳者注：製品名）を使って 4M/sec が得られました。

　　　　　　　　　CPU の利用率はデバイスの転送速度に依存します。高速なデバイスは
                  単位時間に対してより多くの割込みを発生し、より多くの CPU 処理
                  時間を必要とします。高速なデバイスによって CPU の利用率が高い 
                   (75% 程度) 場合でもシステムは残りの CPU 時間を利用できます。
                  このボードは DISCONNECT/RECONNECT ができない、能力の低い CD-ROM
                  ドライブ (たいていは安い CD-ROM ドライブ) でも優れた応答性
                  を得られます。

                  予算の少ない方にお薦めします。

      スレーブ型  このボード用のドライバはスレーブ DMA を用いるように PC の DMA
      DMA         コントローラの対象チャネルを設定します。これはデータ転送の際
                  に行い、CPU に制御を返します。

                  最高転送速度は、通常貧弱な DMA コントローラを用いている PC に
                  不利です。8 ビットのボードはメインボードによっては
                  140〜150K/sec より早い速度で問題を起こすことがあります。

                  CPU 利用率は非常に手頃で、FIFO ポーリング型 I/O ボードよりも
                  若干少なくなります。このボードは DISCONNECT/RECONNECT が
                  できない、能力の低いデバイス (たいていは安い CD-ROM ドライブ)
                  にも耐えられます。

                  低速 CD-ROM ドライブやテープなどに使えます。

      バスマスタ  インテリジェントなボードです。このボード用のドライバは SCSI
      型DMA       コマンドを発行して、宛先の装置とLUN 、領域の何処へ転送すれば
                  良いか、そして「やぁ、私は貴方宛のコマンドを持っていますよ」
                  ということを知らせます。ドライバの通知は様々な動作中の
                  プログラムを制御し、その後 SCSI ボードは転送の終了を伝えます。

                  インテリジェンスはホストアダプタのファームウェアにあり、
                  ドライバにあるのではないから、ドライバはたいてい他の特徴を
                  備えています。同期転送、コマンドのキューイングなどです。

                  まとめて読み書きを行うパッチを用いて、ファイルシステムを通した
                  場合の最高転送速度は書き込みの最高速度の 100% および 読み込みの
                  それの 75% 近くが得られます。

                  CPU 利用率は最小で、I/O の負荷に影響されません。Adaptec 1540
                  に付けた倍速 CD-ROM のアクセスに 5% の CPU 消費が計測されて
                  います。また、SCSI DISK で 1.2M/sec の転送を行った場合には
                  20% でした。

                  お金がある程度あり、メインボードがそれなりで (貧弱なメイン
                  ボードではバスマスターが使えないものがあります)、
                  アプリケーションが動作開始までのスループットよりデータを
                  得られる時間を重要視するならばお勧めできます。
                   (バスマスターのオーバーヘッドは 1 秒あたり 3〜4 ミリ秒です)

      性能に関して、二番目に大事なドライバあるいはハードウェアの特徴は分散／収集
      I/O がサポートされていることです。SCSI コマンドを実行するオーバーヘッドは
      重要です … ミリ秒単位の時間がかかります。Adaptec 1540 のようなインテリ
      ジェント型のバスマスターボードは宛先がコマンドを受け取る前に SCSI コマンド
      の処理に 3〜4 ミリ秒かかります。 バッファを持たないデバイスでは、
      オーバーヘッドは常に回転待ちを引き起こし、ブロックあたり 約 60K/sec 
       (3600 PRMのドライブを仮定します) の転送速度しか得られません。最大の性能を
      得るには、一つのコマンドによって多くのデータを転送することで、与えられた
      データすべてを転送するために必要な SCSI コマンドの数を最小にすることです。
      Linux のバッファのキャッシュ方式では、隣接するディスクブロックはメモリ上
      では隣接しません。まとめて読み書きを行うパッチを用いると 4K 分のバッファを
      連接させられます。一つの SCSI コマンドで転送できるデータ総量の最大は
      まとめて読み書きするパッチなしでは 1K * 分散／収集領域数になり、パッチあり
      では 4K * 分散／収集領域数になります。実験により、一つの SCSI コマンドの
      転送量は 64K が適当のようです。64 はまとめて読み書きを行うパッチなしの場合
      の分散／収集バッファの数を意味します。パッチがある場合は 16 です。
　　　転送量を 16K から 64K に変更した場合、最高速度が 50% 改善されました。
      これは Adaptec 1540 シリーズを用い、ファイルシステムを通して読み書きした
      場合の値であり、読込みで 75%、書込みで 100% の効率が得られています。

      多くの単体 SCSI ドライブは、単品でも旧式のディスクやテープ、CD-ROM などの
      低速デバイスと組み合わせた場合でも PC のバスインターフェースの違いにより
      スループットに若干の違いが生じます。幾つかのバス方式はバスマスターに関して
      より良いバッファ操作や調停方法を提供しており、応答性が改善されています。
      また、全能力のごく一部が与えられた転送速度を維持するために使われ、ディスク
      I/O 中も適度な描画性能が得られます。Seagate 社の Baracuda のような高速の
      ドライブを用いて能力を上げたものが目立ちます。 (二重ヘッドの Baracuda で
      さえαテストで 14M/sec の最高速度を記録しています) 
      最後に、バスインターフェースの違いによるバスマスター型ボードの価格の違いは
      たいていごくわずかです。だから ISA でないボードの入手を考えると思います。
      けれども全体性能に対して VLB と ISA の違いが与える影響はバスマスターか
      否かに比べるとわずかなものです。

      SCSI バスに複数のデバイスが繋がっている場合、ホストアダプタが同時に複数の
      未実行コマンドを扱えるか知りたいと考えるでしょう。これはテープドライブと
      ディスクドライブのように、異なる速度のデバイスを混在させるときに、とても
      重要なことです。Linux のドライバが未実行コマンドを一つしかサポートしない
      ならば、例えば、デープがテープドライブ内で巻き戻されている間、ディスク
      ドライブは動かなくなります。二つのディスクドライブではこの問題は目立たず、
      スループットは二つの転送速度の合計というより、二つの転送速度の平均に
      近付きます。


ドライバの特徴比較：

ドライバ　　　　転送モード　　　　　　　同時実行可能　　SG
　　　　　　　　　　　　　　　　　　　　コマンド数      リミット
                                        total/LUN
aha152x         FIFO(8k) Polled         1s/1s           255s
aha1542         Busmastering DMA        8s/1s           16
aha1740         Busmastering DMA        32s             16
buslogic*       Busmastering DMA        Y               64s, 8196h 
fdomain         FIFO(8k) Polled         1s              64s
in2000*         FIFO(2k) Polled         1s              255s
g_NCR5380       Pure Polled             16s/2s          255s
gsi8*           Slave DMA               16s/2s          255s
PAS16           Interlocked Polled      16s/2s          255s
seagate         Interlocked Polled      1s              255s
wd7000          Busmastering DMA        8s              1
t128            Interlocked Polled      16s             255s
ultrastor       Busmastering DMA        Y       

備考：
    1. '*' 印が付けてあるドライバは配布されているカーネルには含まれて
    　 いません。配布物のままのブートイメージでは利用できないでしょう。

　　2. 数値の後に付いている 's' はソフトウェアによる制限値であり、
　　　 コンパイルの際に定義を変更すれば変更できます。

　　3. ハードウェアの制限値は 'h' を後に付記して表します。これは
　　　 ソフトウェアの制限値が、通常 Linux のドライバによって課せられている
　　　 で異なります。

　　4. 数値の後ろに何も付いていなければハードまたはソフト制限値のどちらか
　　　 であることを表します。


ボード比較：
ボード　　　　　　　　　ドライバ　　　　バス　　価格　　備考
Adaptec AIC-6260        aha152x         ISA             chip, not board
Adaptec AIC-6360        aha152x         VLB             chip, not board
Adaptec 1520            aha152x         ISA              
Adaptec 1522            aha152x         ISA     $80     1520 w/FDC
Adaptec 1510            aha152x         ISA             1520 w/out boot ROM,
                                                        won't autoprobe.
Adaptec 1540C           aha1542         ISA             
Adaptec 1542C           aha1542         ISA             1540C w/FDC
Adaptec 1540CF          aha1542         ISA             FAST SCSI-II
Adaptec 1542CF          aha1542         ISA     $200    1540CF w/FDC

Adaptec 1740            aha1740         EISA            discontinued
Adaptec 1742            aha1740         EISA            discontinued, 1740 
                                                        w/FDC
Allways IN2000          in2000          ISA
Buslogic 445S           aha1542,        VLB     $250    FAST SCSI-II, active
                        buslogic                        termination, w/FDC
Buslogic 747S           aha1542,        EISA            FAST SCSI-II, active
                        buslogic                        termination, w/FDC
DTC 3290                aha1542         EISA            Although it should work,
                                                        due to documentation
                                                        release polcies, DTC
                                                        hardware is unsupported
DTC 3292                aha1542         EISA            3290 w/FDC
Future Domain 1680      fdomain         ISA             FDC, BIOS revision 3.4
                                                        and newer boards don't
                                                        work.
Pro Audio Spectrum 16   pas16           ISA             Sound board w/SCSI
Seagate ST01            seagate         ISA     $20     BIOS only works with
                                                        some drives
Seagate ST02            seagate         ISA     $40     ST01 w/FDC
Sound Blaster 16 SCSI   aha152x         ISA             Sound board w/SCSI
Western Digital 7000    wd7000          ISA             w/FDC
Trantor T128            t128            ISA             
Trantor T128F           t128            ISA             T128 w/FDC and 
                                                        support for high IRQs
Trantor T130B           g_NCR5380       ISA             
Ultrastor 14F           ultrastor       ISA             w/FDC
Ultrastor 24F           ultrastor       EISA            w/FDC
Ultrastor 34F           ultrastor       VLB             w/FDC

備考：
  1. Trantor 社は、最近幾つかの製品について Adaptec の名前で販売できる
  　 権利を獲得しました。

　2. Ultrastor 社は、倒産の申請を行いました。技術サポートは現在行って
　　 いません。

　3. Buslogic 社のボードは 445S と 757S 以外も（おそらく）動作する
　　 でしょう。しかし、少なくとも Bt946 PCI ボードは Linux では動作
　　 しません。

  大抵の場合 Buslogic のボードが性能やアクティブターミネータを持つという
  特徴、Adaptec 1540 互換であることから最も有用でしょう。これには多数の
  製品があり、EISA、ISA、PCI と VESA ローカルバスのインターフェース、
  single end (不平衡) と differential (平衡) (訳者注：これらは SCSI の信号
  方式の違いです)、8 ビットと 16 ビットの SCSI バス幅が利用できます。

　SCSI を必要とするけれど予算は抑えたいならば Adaptec 1520 のクローンから
　選ぶと良いでしょう。これらのボードは手頃なスループットと応答性を安価で
　提供してくれます。


