[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 1704] Re: VMware error.(Re: OSASK ver.1.2.)



  こんにちは、川合です。


Koyanagi Masaaki さんは 2001/05/05 10:26:12 の「[OSASK 1703] VMw
are error.(Re: OSASK ver.1.2.)」で書きました:

>  非常に希少なバグで、一年前に Xserver + Netscape で一度報告されたのみ
>でそれは既に修正済とのことです。

  ご報告ありがとうございます。

>  当然ながら VMware 上で新規OSの開発をすることは、サポート範囲外なので
>あとはこちらで原因を特定するしかないですね。

  そういうことになれば、やるしかないでしょう(笑)。

  ・・・といっても、僕がやるわけではないんですが(笑)。解決への
手順を示しますので、どなたか調べてください。

---

  まず、どこで引っかかっているのか特定しなければ、回避策を検討す
ることはできません。そして、VMwareが引っかかった位置をレポートし
てくれないなら、こちらで突き止めるまでです。

  せっかくなので公開されたmake12のソースを利用することにしましょ
う。

  最初にやることは、make12をデバッグバージョンに切り替えることで
す。それは、boot.asmの70行目から78行目を以下のように書き換えます
。

			mov	 ax, word ptr ds:[VGA_mode]
		;;	cmp	 ax,0012h
		;;	je	Boot_normal2 ; !!!!
		;;	cmp0	 ah
		;;	jne	Boot_VESA
			int	10h
mov dx,03d4h
mov ax,3213h
out dx,ax

  これで起動直後にビデオBIOSを使ってVGAに切り替わるようになり、
winman0が画面を初期化する前のエラーも表示できるようになります。
このビデオBIOSコールはエミュレーション下でのコールではないので、
多分VMwareも問題なく実行できるでしょう。

  さて、次は、トラップを仕掛けます。仕掛ける場所はどこでもいいの
ですが、とりあえず、init.askaの565行目あたりがいいでしょう(それ
より前ではトラップを仕掛けても検出できません)。この部分に、

INT(0x03);

という一文を挿入してください。

  そしてmakeし、これをVMware上で実行してみます。OSASKがここまで
正常に動いていれば、トラップを検出し、例外の表示をして止まるはず
です。

  もしこれが上記のとおりになれば、ここまでは問題がなかったことに
なります。そしたら上記のINT文を消して元に戻し、もうちょっと進ん
だところ、たとえば、705行目あたりにINT(0x03);を書き込みます。こ
れでうまく行けばもっと先に仕掛けますし、このトラップが検出されな
ければ、565行目から705行目の間のどこかの文でVMwareが躓(つまづ)
いていることになります。

  これを繰り返して範囲を狭め、最後には「この一文の前まではトラッ
プが検出できるのに、その文の後ではVMwareが停止してしまってトラッ
プが検出できない」という一文を突き止めます。

  そこまでしていただいてその一文がどこであるかを指摘していただけ
れば、そこからは僕の仕事です。なぜそこで止まるのか?どうすれば回
避できるのかを検討します。

---

  この特定作業は結構しんどいです。丸一日くらいかかる時もあります
。これをやらなければいけないことは幸いなことに滅多にありませんが
それでも全くないわけではありません(デバッグ時には、VMware以外で
もとんでもない暴走が起きることがあるんです)。その時は、しょうが
ないので、僕は根気よく上記作業を自分でやっています。

  そんなわけで、お手数でもうしわけありませんが、興味のある方は調
査してご報告ください。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/