[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:37570] Re: 1.25MB フォーマットのフロッピーを読むには? (一応解決)



後藤です。

On Sat, 28 Jun 2003 04:01:26 +0900
Wataru Gotoh <gotow@xxxxxxxxx> wrote:

> ただ、このチップのデータシートは手に入りましたので、少し悪あがきしてみ
> ようかとは思っています。

ということで、悪あがきしてみたところ、とりあえず何とかなりましたので報告
します。
橋本さんから教えていただいたページのパッチと説明を元に、私の環境用の処理
を追加してカーネルを再構築したところ、一応想定通りに動いているようです。

具体的な作業ですが、
まず粕川さんのページ(http://210.138.43.10/~kasukawa/linux/)で公開されて
いる kernel2.4.18 用のパッチを kernel-source-2.4.18 パッケージから展開し
たソースにあてました。
この時、drivers/block/Config.in への変更がはじかれたので、その分は手で修
正しています。
そして drivers/block 以下の、Config.in と
floppy.c に変更を加えました(最後に diff をつけておきます)
/boot/config-2.4.18-bf2.4 を使用して make oldconfig を行ない、追加分の設
定をしました。("1232KB (1.25MB) format support" と 
"3mode fdd support for National Semiconductor PC87306" を yes に)
あとは普通に make-kpkg で deb を作りインストールしました。

その後、1.25MB と 1.44MB のメディアを交互にマウントしてみたり、読み書き
をさせてみたりしましたが、特に問題なく動いているようです。
どちらのメディアも /dev/fd0 を指定するだけで、ちゃんとマウントできます。
ただ、私が追加したコードは、かなり ad-hoc なものだと思いますので、もし利
用する方は気をつけてください。

一応、Debian のカーネルパッケージにすんなりあたるように、私の環境で改め
て取り直した diff も有るんですが、アーカイブに残るようにここに投稿した方
が良いでしょうか?
もしそうなら、どのような形式で投稿するのが良いのでしょう?
ちなみに大きさは生のテキストで 10KB ほどです。

それでは最後になりましたが、フォローをくださったみなさんと、有用なパッチ
と情報を公開してくださっている粕川さんに、感謝いたします。
どうもありがとうございました。

-- 
 Wataru Gotoh <gotow@xxxxxxxxx>


----- diff ここから -----

--- Config.in.old	Mon Jun 30 14:01:14 2003
+++ Config.in	Mon Jun 30 14:01:14 2003
@@ -17,6 +17,7 @@
       bool '    3mode fdd support for Winbond W83977' CONFIG_FDC_W83977
       bool '    3mode fdd support for iTE86xx' CONFIG_FDC_IT86xx
       bool '    3mode fdd support for iTE87xx' CONFIG_FDC_IT87xx
+      bool '    3mode fdd support for National Semiconductor PC87306' CONFIG_FDC_PC87306
    fi
 fi
 if [ "$CONFIG_AMIGA" = "y" ]; then


--- floppy.c.old	Mon Jun 30 14:01:14 2003
+++ floppy.c	Mon Jun 30 14:54:41 2003
@@ -2114,6 +2114,27 @@
 		outb(0x02, 0x2f);
 	}
 #endif /* CONFIG_FDC_IT87xx */
+#ifdef CONFIG_FDC_PC87306
+	/* Mode command send.
+	 * 1st	0b00000001
+	 * 2nd	0b00000010
+	 * 3rd	0b00000000
+	 * 4th	0b(DENSEL:2)001000
+	 *	00=LOW,01=HIGH,11=Default
+	 * 5th	0b00000000
+	 */
+	output_byte(0x01);
+	output_byte(0x02);
+	output_byte(0x00);
+	if (rpm360) {
+	    output_byte(0x08);
+	    /* (0x08 | 0x00) */
+	}
+	else {
+	    output_byte(0x08 | 0xc0);
+	}
+	output_byte(0x0);
+#endif /* CONFIG_FDC_PC87306 */
 	sti();
 }
 #endif /* CONFIG_FD1232 */