前のページ 次のページ 目次

8. SCSI(特にCバスSCSI)について

8.1 DMAモード(非)動作確認機種

動作 メーカー  ボード      SCSIチップ 備考
o    NEC       PC-9801-55U WD33C93A
o    緑電子    MDC-555F    WD33C93B
o    緑電子    MDC-554NA             (bugs ML 395)
o    ICM       IF-2766ET
o    ICM       IF-2767     WD33C93B  level2不可
o    ICM       IF-2768
o    ICM       IF-2769               level2不可
x    ICM       IF-2770               ※1
IF-2770
x    ICM       IF-2771ET   μPD72611GF
o    TEXA      HA55BS2     AM33C93A  Busmaster可(PCI機で確認)
o    TEXA      HA55BS3
o    TEXA      HA55BS4     WD33C93B  DMA モードと W-GT モードでは動作しますが、
                                     HS-BS モードでは dd するとよくささります
o    IO-DATA   SC-98II
x    IO-DATA   SC-98III    WD33C98B  level2不可
o    加賀電子  SC55BX6     WD33C93B  level2不可
o    Logitech  LHA-301               level2不可
o    Logitech  LHA-301A    AIC33C93B
o    Logitech  LHA-N151
x    Melco     IFN-92S               (bugs ML 1554)
o    Melco     IFC-NN      AIC33C93B level2不可

注意:備考について

level2コマンド(カーネル起動時のオプション scsikernoptで抑制)、バスマスタ(ボード側で設定[ ジャンパスイッチまたは scsibsetup等])の動作については、機種によって異なりますので、上表で不可となっていても使えることも、その逆もあります。基本的には、PCI塔載機種でうまく動かないことがあるようです。

注意:I/Oアドレスについて(その1)

PnP 機能をもっているボードでその機能を使う設定になっている場合などで、 使用する I/O ポートの開始(ベース)アドレスが CC0H,CD0H,CE0H,CF0H のどれでもない時は、アドレスを調べてカーネルオプション scsikernopt として渡す必要があります。使用する I/O アドレスを調べるには Microsoft 社製の Windows95 など PnP に対応した OS か、98版 isapnp (Linux/98 のパッ ケージに含まれています)を使ってください。
(参考:PnP 機能を有効に すると、多くのボードで I/O アドレスが CCC0H か CCD0H から使うようにな ります。)

注意:I/Oアドレスについて(その2)

いくつかの機種では、55ボードドライバがデフォルトで調べるI/Oアドレス CD0Hに別の何かが見えるとがあります。この状況になると、起動中 に、


Kernel panic

になり起動できません。この場合も、正しい I/Oアドレスを調べてカーネルオプション scsikernoptで渡す必要が あります。SCSIを使っていない環境でこの問題に遭遇した場合は、とりあえず、 CCC0Hなどをパラメータで与えて起動し、55ドライバを抜いたカーネ ルを作り直してください。

※1:IF-2770について(bugs MLより)

# IF-2770 は、wd33c93 と異なる石を用いているので、FreeBSD では使用不能
# だそうです。(参考 ftp://ftp.tokyonet.ad.jp/.15/FreeBSD-nonUS/FreeBSD-PC98/dists/2.2.5-RELEASE/98readme/HW.TROUBLE.98)
# それから、386BSD では、IF-2770 用のパッチが出ていました。
# (参考 ftp://ftp.kuis.kyoto-u.ac.jp/.mnt/.u8/386bsd/386bsd-0.1-PC98-patch/ICM-IF-2770-patch/DIST98.LZH)
# これを見ると、wd33c93 と比較して、若干石を叩くコマンドが違うようです。

8.2 カーネルオプションについて

主なオプション

wd33c93=level2:1

Level2コマンドの抑制。デフォルトでは抑制しない。

wd33c93=nodma:1

DMA転送を使わない。これは激しく性能が低下しますので、どうしても動かない時に試してみてください。デフォルトではDMAを使います。

pc980155=io:0xXXXX

ベース I/O アドレスをXXXXHに強制する。(デフォルトのポートは調べなくなります。)デフォルトでは、CC0H,CD0H,CE0H,CF0Hを順に調べます。
(Rev.19)CC0H, CE0H, CF0H, CCC0H, CD0H, CCD0H の順に変更されました

pc980155=usefifo

DMA転送のかわりに FIFO転送を使います。対応しているボードは限られます。お手持ちのボードがFIFO転送に対応しているなら、試してみる価値はあると思います。デフォルトでは使用しません。

その他のオプション

主なオプションの他にもいくつかオプションがあります。 ここには、wd33c93.c のコメントの該当部分を載せておきます。

/*
 * 'setup_strings' is a single string used to pass operating parameters and
 * settings from the kernel/module command-line to the driver. 'setup_args[]'
 * is an array of strings that define the compile-time default values for
 * these settings. If Linux boots with an amiboot or insmod command-line,
 * those settings are combined with 'setup_args[]'. Note that amiboot
 * command-lines are prefixed with 'wd33c93=' while insmod uses a
 * 'setup_strings=' prefix. The driver recognizes the following keywords
 * (lower case required) and arguments:
 *
 * -  nosync:bitmask -bitmask is a byte where the 1st 7 bits correspond with
 *                    the 7 possible SCSI devices. Set a bit to negotiate for
 *                    asynchronous transfers on that device. To maintain
 *                    backwards compatibility, a command-line such as
 *                    'wd33c93=255' will be automatically translated to
 *                    'wd33c93=nosync:0xff'.
 * -  nodma:x        -x = 1 to disable DMA, x = 0 to enable it. Argument is
 *                    optional - if not present, same as 'nodma:1'.
 * -  period:ns      -ns is the minimum # of nanoseconds in a SCSI data transfer
 *                    period. Default is 500; acceptable values are 250 - 1000.
 * -  disconnect:x   -x = 0 to never allow disconnects, 2 to always allow them.
 *                    x = 1 does 'adaptive' disconnects, which is the default
 *                    and generally the best choice.
 * -  debug:x        -If 'DEBUGGING_ON' is defined, x is a bit mask that causes
 *                    various types of debug output to printed - see the DB_xxx
 *                    defines in wd33c93.h
 * -  clock:x        -x = clock input in MHz for WD33c93 chip. Normal values
 *                    would be from 8 through 20. Default is 8.
 * -  next           -No argument. Used to separate blocks of keywords when
 *                    there's more than one host adapter in the system.
 *
 * Syntax Notes:
 * -  Numeric arguments can be decimal or the '0x' form of hex notation. There

 *    _must_ be a colon between a keyword and its numeric argument, with no
 *    spaces.
 * -  Keywords are separated by commas, no spaces, in the standard kernel
 *    command-line manner.
 * -  A keyword in the 'nth' comma-separated command-line member will overwrite
 *    the 'nth' element of setup_args[]. A blank command-line member (in
 *    other words, a comma with no preceding keyword) will _not_ overwrite
 *    the corresponding setup_args[] element.
 * -  If a keyword is used more than once, the first one applies to the first
 *    SCSI host found, the second to the second card, etc, unless the 'next'
 *    keyword is used to change the order.
 *
 * Some amiboot examples (for insmod, use 'setup_strings' instead of 'wd33c93'):
 * -  wd33c93=nosync:255
 * -  wd33c93=nodma
 * -  wd33c93=nodma:1
 * -  wd33c93=disconnect:2,nosync:0x08,period:250
 * -  wd33c93=debug:0x1c
 */

オプションの記述 Winとの違い

Windows9xでは

MSDOS.SYS

[Paths]
WinDir=A:\WINDOWS
WinBootDir=A:\WINDOWS
HostWinBootDrv=A
...

CONFIG.SYS

dos=high,umb
device=A:\WINDOWS\himem.sys
device=A:\WINDOWS\EMM386.EXE RAM
...
といったテキスト形式のファイルになっていて1項目ごとに1行を使って記述しています。一方,Linuxのカーネルオプションは1つの項目 wd33c93 に対し半角のスペースで区切って記述します。 grubのメニューで(小文字)e で編集し,b で起動します。
 wd33c93=level2:1,nodma:1 pc980155=io:0xccc0

8.3 複合コマンド(level2コマンド)について


55 互換のボードでは、I/O ポートを通してボードのレジスタににコマン ドを送り、ボードを操作します。 55 ボードには、1コマンドで複数の コマンドと同じ動作をするコマンドがあります。しかし、互換ボードに はこのコマンドをサポートしていないものがありますので、この機能を 抑制しないと動きません。 抑制するにはカーネルオプション scsikernoptをつかいます。

8.4 拡張転送モード


55ボードドライバは、ボードによって、DMA転送以外の転送モードをサポート します。現在のところ、一部のボードでのFIFO転送に対応しています。

FIFO転送

I/Oストリング命令を使って、ボードから連続して効率よくデータを受けとり ます。そのため、バスマスタ転送よりも高速な転送が可能です。反面、CPUが 転送に掛かりっきりになってしまうため、転送中はシステム全体のレスポンス が極端に悪くなります。

8.5 性能評価

dd を使い bs, count を適当に設定して 100MB の読み込み、書き込みテストをし たところ、テストを行ったどのボードでも DMA mode で次のような性能が確認さ れています。

読み込み  dd if=/dev/sd? of=/dev/null  350- 400 KB/s 程度
書き込み  dd if=/dev/zero of=/dev/sd?  200 KB/s 前後

なお、 TEXA HA55BS では Busmaster mode で読み込みテストで 640KB/s の性能 が確認されています。
さらに、PC-9821 Xa7e+IF-2768でFIFO転送を使ったテストでは、読み込み、書 き込みともで700KB/s前後の性能が確認されています。

8.6 スキャナーなど汎用ドライバによる機器の動作

/dev/sgも使えます。

From: 高井さん
fuki(PC-9821Xa7e)の 55ボードで generic SCSI を使って部室のスキャナ(GT-6000) を
動かすことができました。

GT-6000 は SCSIの「スキャナ・デバイス」ではなく「プロセッサ・デバイス」
として認識されます。しかもベンダIDは「EPSON SC」、プロダクトIDは
「ANNER GT-6000」となっています。

スキャンは正常にできるのですが、終了後30秒(スキャナ側のタイムアウト)で
スキャナがインタフェースエラーを報告します。
どこ(デバイスドライバ、ソフト)に問題があるのかは分かりません。

8.7 質問と回答編

SCSI disk のパーティション認識の際のメッセージ出力が変です

[Item] sd, partition

[投稿者] 野村さん
[日付] 日付忘れた
[質問]
SCSI 機器の認識のところで、^@が沢山出ているのが気になります。MO の場合特に沢山出ています。

[回答]
^@は '\0' ですね.よくは分かりませんが,
0005000           s   d   c   2       :     031  \0 032  \0 033  \0 034
0005020  \0 035  \0 036  \0 037  \0           s   d   c   2   [   f   r
0005040   o   m       2   1   (   2   2   /l   0   /   2   1   )   ,    
と sdc2 は 2500 ぐらいから順番になっています. Linux がパーティションテーブルにあたるブロックの情報を勘違いしているのではないでしょうか.

[投稿者] 吉山さん
[コメント]
genhd の中で IDE と SCSI ディスクで別々のルーチンが実行されているので、 将来的には統合したいな(井伊さん)。

SCSI CD-ROM が認識できますがマウントできませんよ?

[投稿者] 野村さん
[質問]
230MB MO は、vfat/ext2 で使えています。SCSI CD-ROM は、ブート時には認識 されているのですが、mount は、
mount: /dev/sdd is not a valid block device
となって、失敗しています。

[回答]
Linux では,SCSI CD-ROM ドライブは SCSI HDD と明確に区別されています. 古い Slackware では /dev/sr? という名前になっていましたが,現在では /dev/scd? というデバイス名になっています.
# というより,メジャー番号 11,マイナー番号 0〜

また,Linux では SCSI ID と /dev/sd? は対応していません.SCSI を probe して,見つかった HDD を順に /dev/sda, sdb, ... としているので, この辺は他の UNIX 系OSと大きく事なる所です.
# DOS や Windows に近いですね.

/proc/devices

...

+ Block devices:
+  1 ramdisk
+  2 fd
+  8 sd         ← SCSI HDD (major=8)
+ 11 sr         ← SCSI CD-ROM (major=11)
+ 22 ide1

SCSI CD-ROM は /dev/sd?? ではなく、 /dev/scd? になりますので、 /dev/scd0でお試しください。

[投稿者] 吉山さん
[コメント]
ドキュメントにも書いてありましたね。うまく mount して読めました。

FreeBSD でも、同じように見つかった順に、sd0, sd1, ... とします。 Solaris は、SCSI ID に対応していたかもしれません。 (野村さん)

SCSI で 92 ボードは使用できますか

[Item] SCSI, 92

[投稿者] iizukaさん
[日付] Wed, 4 Mar 1998 16:01:46 JST
[質問]
現段階で92ボートも動くのでしょうか?

[回答]
92ボードで拡張された機能を使わないなら(つまり55ボードとしてなら)動きます。 いまのところ、ジオメトリの取得はBIOSにたよっているので、92ボード も55互換ボードの一種と考えて問題ありません。

[投稿者] 鵜川さん

55 SCSI ボード用ドライバって、640M MO (2048バイト/セクタ)に対応しているのでしょうか?

[Item] SCSI, 55, 640, MO, 2048

[投稿者] 井伊さん
[日付] 1998.12.27
[質問]
ext2 ファイルシステムでフォーマットした、640M バイトの MO が
立て続けに 3 枚、論理的に破壊されました。

55 互換 SCSI ボードに接続した MO ドライブに 640 MO にフォーマット
した ext2 形式の MO ディスクを挿入し、Linux/98 上で mount 操作
を行うと、正しくマウントでき、読み取り、書き込みもできるように
見えます。
システムリブート後、この MO ドライブと MO ディスクをAT互換機の
Linux システムに接続しなおします。それから mount しようとすると、
superblock が見付かりませんといわれ、マウントできません。

この MO ドライブとディスクを再度、Linux/98 システムに接続すると、
AT 互換機と同じく、superblock がみつかりませんといわれ、マウント
できません。

superblock だけ mke2fs で書き直しても、e2fsck がまともに通らず
復旧不可能でした。

この Linux/98 システムでは PCMCIA SCSI PC CARD では正常に 640MO
が扱えています。

また、230MバイトMO では、ext2fs にフォーマットしたディスクに
Linux/98 でCバス55互換SCSIボード接続して書き込んだ後に、AT互換機
のLinux で正常に読み出せています。

というわけで、原因は

(1)SCSI-55 ボードドライバの 2048 バイト/セクタ関係のバグ(仕様)
(2)Cバスに挿している SCSI ボードの2048 バイト/セクタバグ(仕様)

のどちらか又は両方ではないかと疑いました。

使用している SCSI ボードは、ICM IF-2767 v1.01(転送モードはFIFOモード)
です。

まず、(2)に関連して、他の SCSI ボードを試そうと思いました。

しかし、緑電子 MDC553LE をつなぐと、メモリチェックのあと、
98 が起動しません。BIOS アドレス、IRQ、DMA などの設定の問題と
思うのですが、マニュアルがないのでよくわかりませんでした。
# 部室に DAIGAR というハードディスクの箱があったら、その中に
# マニュアルがないか、調べてもらえませんか? > KMC の人

つぎに、ICM IF-2760 で実験しようと思ったのですが、いにしえの
ICM 形式 SCSI コネクタと通常の SCSI コネクタのアダプタ/ケーブル
が発見できず、挫折しました。

というわけで、ここで原因追及をギブアップしました。

どなたか、論理的に破壊されてもいい 640 MO ディスクを持っている方は、
追試していただけないでしょうか ^^;

[回答]
640M MO の対応というのは low level driver ですることなのでしょうか。 多分、もっと上のレベルで処理されていると思います。
# 確認はしていませんが。

[投稿者] 鵜川さん
[日付] 1998.12.28

起動時にSCSIを認識しません。(1)

[Item] SCSI, PnP

[投稿者] 前田さん
[日付] Thu, 8 Apr 1999
[質問]
外付けのSCSIハードディスクは取りあえずfdisk98上に現れなかったので,無視してインストールを試みることにしました。 SCSIのPD&CDをplamoディスクのインストール元にするつもりが,インストーラーにある自動検索で見つかりませんでした。
ブートディスクは4通り試してみましたが,(互換やah・・・などいろいろ)どれもだめでした。
また,SCSIボードの転送方式をDMAやI/Oなど,いろいろと切り替えてみましたが,それでもだめでした。 とりあえず,やってみたことを書いてみましたが,お手上げ状態ですのでご教授下さい。よろしくお願いします。

[回答]
外付けの機器を認識できないとのことですが、ボード自体は、認識されているのでしょうか?起動時に大量にメッセージが出ると思いますが、
scsi : 1 host.
というような文字が表示されるかどうか確認してください。

[投稿者] 藤田さん
[回答]
ボードを非PnPに設定して、55互換(scsi55.img)でブートすれば認識するかも? IO-DATAのSC-98III(SMIT)はそれで認識しました。

[投稿者] 佐藤さん
[回答]
ひょっとして Plug & Play のボードじゃないでしょうか?
・Plug & Play を無効にする
・GRUBから起動するとき、kernel= の行の最後に    pc980155=io:0xccc0  とつけ加えてみる。
のどっちかを試せば使えるようになるかもしれません。

[投稿者] 北川さん
[コメント]
結局,ボードを抜いて設定変更するのは大変なので,pc980155=io:0xccc0を追加して解決しました。HDDからの起動にも成功しました。(前田さん)

[日付] 08 Apr 1999
<