SunOS 4.xでMOを使うには |
YAMAMORI Takenori ●yamamori |
MOドライブには,OSのデバイスドライバからのInquiryに対して デバイスタイプ7番(光メモリデバイス)を返すMOモードと, デバイスタイプ0番(ダイレクトアクセスデバイス)を返すハードディスクモードの 2つのモードがあります.(※注)
SunOS 4.xでMOを使う場合,MOドライブはハードディスクモードに 切替える必要があります. (Solaris 8など,SunOS 5.x系のIntel版では, ブートドライブとして使用しない限りMOモードのままでも使えます)
MOドライブのデバイスタイプは,後面または基板上のディップスイッチなどで 切替えが可能なドライブもあります. しかし現状では,切替えスイッチの付いていない,MOモード固定のドライブが多く, このままではSunOS 4.xから認識されず,MOを使用することができません.
単にSCSIデバイスタイプが違うというだけでMOドライブが使えないというのは 非常にもったいない話です.そこで本稿では,SunOS 4.xのカーネルの一部を修正し, MOモードのドライブをハードディスクとして認識させる方法を解説します.
ここで,デバイスタイプをチェックしているのはどこか考えてみます. 手がかりとして,まず/usr/include以下のヘッダファイルを調べてみましょう. すると,/usr/include/scsi/generic/inquiry.h (※注)の中に,
DTYPE_DIRECT 0x00 ← ハードディスク …省略… DTYPE_RODIRECT 0x05 ← CD-ROM …省略… DTYPE_OPTICAL 0x07 ← MO
というデバイスタイプを定義している部分が見つかります.
そこで,SunOS 4.xカーネル内で,DTYPE_OPTICALなどの値がセットされる場所を 突き止め,それをDTYPE_DIRECTに書き換えてやればよいことになります. SunOS 4.xではありませんが,公開されているSolaris 8(FCS版相当)の ソースコードもある程度参考になります.
詳しい経緯は省略しますが,DTYPE_OPTICALなどのデバイスタイプは, scsi_slave()という関数を呼び出したあとに所定の構造体にセットされることが わかっています. そこで,このscsi_slave()関数を何らかの方法でラップして, scsi_slave()の呼び出しのあとに構造体上のDTYPE_OPTICALを DTYPE_DIRECTに書き換えてやれば,SunOS 4.xにおいてMOモードのドライブを 認識するようになると考えられます.
なお,できれば関数に細工を施したりせずに, adb(SunOS標準のデバッガ)で,カーネルの/vmunixの命令コードの一部を 書き換えるなどの方法が使えればよいのですが,この場合はそうはいきません.