永井@知能.九工大です.
表題の DVD-RAM ドライブを Linux からある程度扱えるようにできましたので
そのレポートです.
この DVD-RAM ドライブは,そのままでは Linux において
単なる CD-ROM としてしか使えません.
LUN 0 に対してしか返答せず,その際,自分は CD-ROM であると
答えるためです.
そこでカーネルにパッチをあてる必要があります.
テストは kernel 2.0.33 ,SCSI-IF は APA-1460J (PC カード) にて
行いました ( pcmcia-cs は 2.9.11 です).
今回の方法で利用できたのは,音楽 CD, CD-ROM(CD-R), PD, DVD-RAM です.
その他の DVD-ROM などは所有していないため,テストできません.
ただし,DVD-RAM については,使用できるといっても Win95 との間で
ディスクを共有してデータ交換に使用することはできません (後述).
PD での Win95 との間のデータ交換はテストしていませんが,
過去の実績から見て,できるであろうと思います.
(1) 640MO の場合と同様,2048 byte/sector パッチが必要です.
http://liniere.gen.u-tokyo.ac.jp/2048.html から入手してください.
パッチが一部リジェクトされるはずですが,
無視してもかまわないでしょう.
(2) LF-D100J がうまく扱えないのは,デフォルトでは CD-ROM ドライブと
なってしまうためですから,カーネルソースの drivers/scsi/scsi.c に
次のパッチをあて,強引にリムーバブルデバイスとして MO と同じに
認識させます.このパッチではさらに,これも強引に,同じデバイスの
同じ LUN ( LUN == 0 ) で,CD-ROM ドライブとしても認識させています.
=======================================================================
--- scsi.c~ Fri May 22 18:31:35 1998
+++ scsi.c Fri May 22 18:32:22 1998
@@ -534,6 +534,8 @@
struct Scsi_Device_Template *sdtpnt;
Scsi_Device * SDtail, *SDpnt=*SDpnt2;
int bflags, type=-1;
+ static int PANA_DVD_RAM[2] = {-1,-1};
+ int org_lun = lun;
SDtail = scsi_devices;
if (scsi_devices)
@@ -546,6 +548,16 @@
SDpnt->lun = lun;
SDpnt->channel = channel;
+ /* MATSUSHITA DVD-RAM LF-D100 */
+ if (PANA_DVD_RAM[0] == channel && PANA_DVD_RAM[1] == dev && lun == 1) {
+ /* get CD-ROM type */
+ SDpnt->lun = lun = 0;
+ } else {
+ /* clear status */
+ PANA_DVD_RAM[0] = -1;
+ PANA_DVD_RAM[1] = -1;
+ }
+
/* Some low level driver could use device->type (DB) */
SDpnt->type = -1;
@@ -646,6 +658,21 @@
scsi_result[1] |= 0x80; /* removable */
}
+ if (!strncmp (scsi_result + 8, "MATSHITA", 8) &&
+ !strncmp (scsi_result + 16, "PD-2 LF-D100", 12) &&
+ scsi_result[0] == TYPE_ROM) {
+ if (PANA_DVD_RAM[0] == channel && PANA_DVD_RAM[1] == dev && org_lun == 1) {
+ /* MATSUSHITA DVD-RAM LF-D100 treats as ROM */
+ lun = 1;
+ } else {
+ /* MATSUSHITA DVD-RAM LF-D100 treats as MOD */
+ scsi_result[0] = TYPE_MOD;
+ scsi_result[1] |= 0x80; /* removable */
+ PANA_DVD_RAM[0] = channel;
+ PANA_DVD_RAM[1] = dev;
+ }
+ }
+
if (!strncmp (scsi_result + 8, "NEC", 3)) {
if (!strncmp (scsi_result + 16, "CD-ROM DRIVE:84 ", 16) ||
!strncmp (scsi_result + 16, "CD-ROM DRIVE:25", 15))
@@ -812,6 +839,13 @@
*max_dev_lun = 8;
return 1;
}
+
+ /* MATSUSHITA DVD-RAM LF-D100 */
+ if (PANA_DVD_RAM[0] == channel && PANA_DVD_RAM[1] == dev && org_lun == 1) {
+ *max_dev_lun = 2;
+ return 1;
+ }
+
/*
* We assume the device can't handle lun!=0 if: - it reports scsi-0 (ANSI
* SCSI Revision 0) (old drives like MAXTOR XT-3280) or - it reports scsi-1
=======================================================================
(3) 以上のパッチをあて,構築しなおしたカーネルを使えば,PD, DVD-RAM の
利用ができるはずです.DVD-RAM を mke2fs する時などは,640MB MO の
場合と同様の注意が必要です ( 2048 byte/sector のため ).
2048 byte/sector パッチを入手した WebPage の説明をよく読んでください.
パーティションを切って使うことも,切らずに whole disc で使うことも
問題なくできます.
また,ディスクの交換後 mount する際には,LF-D100J の本体のアクセス
ランプがグリーンに変化したことを確認した後に mount してください.
でないと,バッファに残っている古いディスクの情報が使われてしまう
ことがあるようです (このあたり,ドライブのファームウェア改修を
望みたいところです).
正常に動けば,workman なども普通に使うことができます.
DVD-RAM を入れて mount している際に workman を上げても
きちんと「音楽 CD は入っていない」となります.
Win95 上のドライバによって作成された DVD-RAM をそのまま使用すること
はできません.UDF フォーマットが扱えないのはドライバがないため当然
としても,FAT16 でフォーマットしたものも利用できません.
これはディスク上の block の扱いが異なるためです.
2048 byte/sector パッチでは,1 sector を512 byte の block x 4 個で
扱っていますが,Win95 上の LF-D100J ドライバでは,2048 byte を
1 block としています.ディスクのパーティション情報も FAT も,
この 2048 byte/block での値で管理されているようです.
したがって,現状ではディスクの管理方法の違いにより,
Win95 との間でのデータ交換はできません.
Win95 とのディスク共有については,いまさら FAT16 形式用の
パッチを作っても美味しくなさそうです.
UDF ドライバを作るように頑張った方がよほど有効な労力投入ですね.
( UDF ドライバって,既にどこかにあるのかな?
ご存知でしたら教えてください.)
私は,少なくとも今のところは,Win95 とのディスク共有の必要はないので,
そのためのドライバをいじる or 書くことはないでしょう.
( でも,どなたかが書いてくれると嬉しいな.(^_^) )