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

[fol] Re: 8GB E-IDE ディスクの顛末


<69kk6q$jbd$1 _at_ news.alles.or.jp>の記事において
zic _at_ alles.or.jpさんは書きました。

佐野@浜松です。

(この記事も職場から出したつもりになってましたが、
 停電に伴うシステム停止のため、送られていません
 でしたので、Nifty から送り直します。週末を狭んで
 フォローが遅れましたことをお詫びします。_O_)

In article <69kk6q$jbd$1 _at_ news.alles.or.jp>
 zic _at_ alles.or.jp (Zenith Inn CIIly) writes:

 >     なんか、すれ違っちゃったみたいですね。
 >     二人して解析してたみたい。

どうもお世話おかけしました。

 >     お待ちしておりました。予想通りの提案を下さってますが、これは、
 >      hdb: INVALID GEOMETRY: 255 PHYSICAL HEADS?
 > となって果てます。

。。。読まれていましたか。(まだまだ修行が足りないなあ>自分)

 >     probe_hwifにおいて、BIOS設定値を読み込んだ後に、

 > for (unit = 0; unit < MAX_DRIVES; ++unit) {
 >   ide_drive_t *drive = &hwif->drives[unit];
 >   (void) probe_for_drive (drive);
 >   if (drive->present && drive->media == ide_disk) {
 >     if ((!drive->head || drive->head > 16)
 >           && !drive->select.b.lba) {
 >       printk("%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n",

 > に入るのですが、probe_for_driveは noprobe オプションのために、
 > 直ちに何もせずに帰り、引き続くif文で drive->select.b.lba が
 > やはり偽であるために、このようになります。

確認しました。おっしゃるとおりです。_O_

 >     だから、
 >      ・プローブさせて自動認識を成功させる
 >      ・liloオプションで正しいジオメトリを渡し、かつ、プローブさせない
 >          (この場合、EZDの認識のために、forced_geomをリセットする必要がある)
 > の、どちらかしか、選択肢は無い筈です。

間違った憶測を流してしまい、失礼しました。今手元で
使用中のバージョン 2.0.32 のカーネルコードで確認
したところ、そのとおりでした。

で、ここまで時間を使わせてしまった罪滅ぼしにと、
開発版のカーネルでの状況を確認するために 2.1.78 を
調べてみました。

linux/drivers/block/ide.c を見ると、probe 関係は
 ide-probe.c に、disk 関係は ide-disk.c に移動した
ようで、いろいろ処理の流れが変更されているようでした。

# どうもパラレルポート IDE がサポートされているよう
# なのですが、2.1.xx 系をお使いのかたでこの機能を
# 試してみた方はいらっしゃいますか?どんなハードで
# 動作実績があるのか、ちょっと興味があるもので。

で、ちょっと見ると ide-probe.c の中の probe_hwif() には
 "%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n", を出力
する部分がすっぽり抜けていて、「これは改善されているの
かな?」と思ったのですが、よく調べると実は ide-disk.c 
の中の idedisk_init() の中に該当するコードがあって、
やはり drive->head が 1 から 16 の範囲に無く、かつ
 drive->select.b.lba が有効になっていないと、認識を
拒否されてしまうようです。

また、drive->select.b.lba を有効にするのは
 idedisk_capacity() ( current_capacity() から名前を変更
されたもの。コメントにはまだ以前の名前が残っている。) 
だけで、これは例の lba_capacity_is_ok() で 10% の
チェックをクリアーしないと有効にならないのも同じでした。

結局 2.1.78 でもカーネルパッチが必要というのは同じかと
思います。

probe_cmos_for_drives() で CMOS から LBA の設定を渡して
もらえるようになるとか、[EZD] を強制認識させるオプション
の新設とか、あるいは LBA アクセスを強制するオプションの
新設、などの対処を期待していたのですが、どうもまだみたい
ですね。必要性を認識していないのかもしれません。

私としては、投稿されたパッチを含めて、上のような
対処方法が用意されていても良いように思うので、
「こういう状況があって、こういう要望がある」ぐらいは
カーネル開発者に連絡してみたらどうかなという気が
しますが、どんなものでしょう 
(「連絡するべき?べきでない?」> 識者のかたへ)

---
     #わたしのおうちは浜松市、「夜のお菓子」で有名さ。
 <xlj06203 _at_ niftyserve.or.jp> : Taketoshi Sano (佐野 武俊)

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」