動作 メーカー ボード 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 ※1IF-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塔載機種でうまく動かないことがあるようです。
PnP 機能をもっているボードでその機能を使う設定になっている場合などで、
使用する I/O ポートの開始(ベース)アドレスが CC0H,CD0H,CE0H,CF0H
のどれでもない時は、アドレスを調べてカーネルオプション
scsikernopt
として渡す必要があります。使用する I/O アドレスを調べるには Microsoft
社製の Windows95 など PnP に対応した OS か、98版 isapnp (Linux/98 のパッ
ケージに含まれています)を使ってください。
(参考:PnP 機能を有効に
すると、多くのボードで I/O アドレスが CCC0H か CCD0H から使うようにな
ります。)
いくつかの機種では、55ボードドライバがデフォルトで調べるI/Oアドレス
CD0Hに別の何かが見えるとがあります。この状況になると、起動中
に、
Kernel panic
になり起動できません。この場合も、正しい
I/Oアドレスを調べてカーネルオプション
scsikernoptで渡す必要が
あります。SCSIを使っていない環境でこの問題に遭遇した場合は、とりあえず、
CCC0Hなどをパラメータで与えて起動し、55ドライバを抜いたカーネ
ルを作り直してください。
# 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 と比較して、若干石を叩くコマンドが違うようです。
Level2コマンドの抑制。デフォルトでは抑制しない。
DMA転送を使わない。これは激しく性能が低下しますので、どうしても動かない時に試してみてください。デフォルトではDMAを使います。
ベース I/O アドレスをXXXXHに強制する。(デフォルトのポートは調べなくなります。)デフォルトでは、CC0H,CD0H,CE0H,CF0Hを順に調べます。
(Rev.19)CC0H, CE0H, CF0H, CCC0H, CD0H, CCD0H
の順に変更されました
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 */
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
55 互換のボードでは、I/O ポートを通してボードのレジスタににコマン ドを送り、ボードを操作します。 55 ボードには、1コマンドで複数の コマンドと同じ動作をするコマンドがあります。しかし、互換ボードに はこのコマンドをサポートしていないものがありますので、この機能を 抑制しないと動きません。 抑制するにはカーネルオプション scsikernoptをつかいます。
55ボードドライバは、ボードによって、DMA転送以外の転送モードをサポート します。現在のところ、一部のボードでのFIFO転送に対応しています。
I/Oストリング命令を使って、ボードから連続して効率よくデータを受けとり ます。そのため、バスマスタ転送よりも高速な転送が可能です。反面、CPUが 転送に掛かりっきりになってしまうため、転送中はシステム全体のレスポンス が極端に悪くなります。
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前後の性能が確認されています。
/dev/sgも使えます。
From: 高井さん fuki(PC-9821Xa7e)の 55ボードで generic SCSI を使って部室のスキャナ(GT-6000) を 動かすことができました。 GT-6000 は SCSIの「スキャナ・デバイス」ではなく「プロセッサ・デバイス」 として認識されます。しかもベンダIDは「EPSON SC」、プロダクトIDは 「ANNER GT-6000」となっています。 スキャンは正常にできるのですが、終了後30秒(スキャナ側のタイムアウト)で スキャナがインタフェースエラーを報告します。 どこ(デバイスドライバ、ソフト)に問題があるのかは分かりません。
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 がパーティションテーブルにあたるブロックの情報を勘違いしているのではないでしょうか.
mount: /dev/sdd is not a valid block deviceとなって、失敗しています。
また,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でお試しください。
FreeBSD でも、同じように見つかった順に、sd0, sd1, ... とします。 Solaris は、SCSI ID に対応していたかもしれません。 (野村さん)
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 ディスクを持っている方は、 追試していただけないでしょうか ^^;