[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[b-free: 1376] Re: HDからのブート (Re: Re^2: FD で bootする方法を教えてください )
林です。
In message <19980416182359D.night@soft.hitachi.co.jp>
"[b-free: 1373] Re: HDからのブート (Re: Re^2: FD で bootする方法を教えてください)"
"Ryuichi Naitoh <naitoh_r@soft.hitachi.co.jp>" wrote:
naitoh_r> > この場合、問題はEIDEディスクのハードウェア・インタフェースでの
naitoh_r> > CHS値を調べることですね。汎用的な方法ってありましたっけ?
naitoh_r>
naitoh_r> 一応、IDE の命令で IDE の諸々の情報を得ることができます。
naitoh_r> (B-Free だと boot/2nd/ide.h または kernel/BTRON/device/ide/ide.h で
naitoh_r> ide_id という構造体で定義している情報です)
naitoh_r> この辺は、IDE でも EIDE でも同じだと思っているんですけど、ちょっと自信
naitoh_r> がないです。
得られるのがBIOS変換値だったりして(^_^;)。
# まさかそんなことはないと思いますけど・・・。
naitoh_r> で、以下は CHS を変換している HD でどうやってアクセスするかの話のまと
naitoh_r> めです。
naitoh_r>
naitoh_r> FAQ を読んだところ、分かったことは
naitoh_r>
naitoh_r> 0) BIOS は、HD のジオメトリ (geometry: CHS の値) をハードウェアとは違っ
naitoh_r> た値に変換する。
naitoh_r> 1) BIOS は変換後の値で HD にパーティション情報を書き込む。
naitoh_r> (でないと、BIOS を使って HD の読み書きができない)
naitoh_r> 2) もちろん、ハードウェアを直接アクセスする時には BIOS が変換していな
naitoh_r> い値を指定する必要がある。
naitoh_r>
naitoh_r> ということです。
naitoh_r>
naitoh_r> OS がパーティション情報を元にパーティション内のブロックヘアクセスする
naitoh_r> 場合には、BIOS の変換後のジオメトリで書かれているパーティション情報の
naitoh_r> 値を、実際の HD のジオメトリベースに変換してからアクセスする必要がある
naitoh_r> ということみたいです。
naitoh_r>
naitoh_r> # まだ、ちょっと自信がないですが。。。
りんの理解とは一致しますね。
# あてにはならんか(^_^;)
naitoh_r> 具体的には、BIOS で変換後の CHS と変換前の CHS を求めて、この値がどう
naitoh_r> いう計算で変換しているかが分かればいいわけです。
naitoh_r>
naitoh_r> つまり、
naitoh_r>
naitoh_r> 変換前: C/H/S = (2000/16/63)
naitoh_r> 変換後: C/H/S = (1000/32/63)
naitoh_r>
naitoh_r> となっていた場合、
naitoh_r>
naitoh_r> ヘッド数を実際の値の 2 倍にして、シリンダ数を 1024 以下にしているわけ
naitoh_r> ですから、HD へのアクセスは、N = 2 と定義して、
naitoh_r>
naitoh_r> eCyl = (Cyl * N) + (Head / dHead); /* head DIV dHead */
naitoh_r> eHead = (Head % dHead); /* head MOD dHead */
naitoh_r> eSector = Sector; /* used as is */
naitoh_r>
naitoh_r> Cyl/Head/Sector は、BIOS ベースでのアクセスする位置を示したもの。
naitoh_r> eCyl/eHead/eSector は、ハードウェアベースのアクセスする位置を
naitoh_r> 示したもの。
naitoh_r> dHead は、ハードウェアのヘッド数を示したもの。
naitoh_r>
naitoh_r> にすればいいようです。
naitoh_r> あとは、OS (2nd boot) が BIOS の変換後のジオメトリを知る手続きさえ
naitoh_r> わかれば、ジオメトリを BIOS で変換している HD でもアクセスするように
naitoh_r> 変換することができそうです。
BIOSのジオメトリの方が取得が難しいのでしょうか。
INT13に何かなかったでしょうか?
# INT13が使えない?
まあハードウェア・インタフェースでのジオメトリが分かっていれば
シリンダ数が1024以下になるようにヘッダ数をN倍してやれば良いだけ
の簡単な計算で済むはずですけど。
# FAQにそうやる方法が書いてあったような・・・。
# そうすると値を取得する方法はない?
--
Takanori Hayashi
takanori@ohsaki.meidensha.co.jp