Oracle VM VirtualBoxでMINIX 1.1のブートストラップを見る

書籍の記載を確認するために、VirtualBoxのデバッグ機能を使って、MINIX 1.1のブートストラップ(bootblok.s)を見てみました。
・MINIXオペレーティングシステム (ISBN4-7561-0000-7)
 ⇒「APPENDIX D MINIX再構築ガイド」/「D.1 はじめに」
・MINIXリファレンスマニュアル (ISBN4-535-60004-X-C3055)
 ⇒「Chapter 3 MINIX インプリメンターガイド」/「3.1 イントロダクション」
 ⇒「Chapter 3 MINIX インプリメンターガイド」/「3.5 ブートディスケットの構築」/「3.5.1 導入」

1.準備①VirtualBoxの設定

理由はわからないが、VirtualBoxのブレークポイントを利用するために、[設定]-[システム]-[アクセラレーション]-[仮想化支援機能]のチェックボックス[VT-x/AMD-Vを有効化]のチェックを外しておく。

2.準備②MINIX起動ディスクのファイル名を変更

拡張子が無いとVirtualBoxでイメージの選択ができないため、拡張子を付与する。

オリジナルファイル名変更後ファイル名内容(“README_1.1″より)
floppy_disk1floppy_disk1.imgBoot Disk
floppy_disk2floppy_disk2.imgRoot File System
floppy_disk3floppy_disk3.img/usr
floppy_disk4floppy_disk4.img/user
floppy_disk5floppy_disk5.imgKernel, H and Include Sources
floppy_disk6floppy_disk6.imgFS and Lib Sources
floppy_disk7floppy_disk7.imgMM and Tools Sources
floppy_disk8floppy_disk8.imgCommands Sources

3.VirtualBoxでイメージを選択しデバッグ起動

VirtualBoxのフロッピーデバイス0に「floppy_disk1.img」を選択し、下記コマンドを用いて起動する。
“C:\Program Files\Oracle\VirtualBox\VBoxManage.exe” startvm “Minix_v1.1” -E VBOX_GUI_DBG_AUTO_SHOW=true -E VBOX_GUI_DBG_ENABLED=true
※”Minix_v1.1″は仮想マシン名。
※起動すると一時停止状態になる。


(他の起動方法)
“C:\Program Files\Oracle\VirtualBox\VirtualBoxVM.exe” –startvm “Minix_v1.1” –dbg
※一時停止状態ではなく、動作する。

4.使用するデバッグコマンドを確認

ウィンドウ「VBox Dbg – Console」のテキストボックス「Command」へ、「help commands」と入力し[Enter]キーを押下。

※一部抜粋。

※ウィンドウ「VBox Dbg – Console」が表示されていない場合、仮想マシンのウィンドウのメニュー[デバッグ]-[コマンドライン]で、表示できる。

※参考 – 「help commands」の結果。

5.ブレークポイントへブートプログラムの開始番地(0x7c00)を追加

ウィンドウ「VBox Dbg – Console」のテキストボックス「Command」へ、「br 0x7c00」と入力し[Enter]キーを押下。

6.仮想マシンを再開

再開し暫くすると、設定したブレークポイントで、中断し、ウィンドウ「VBox Dbg – Console」へ、アドレス「0000:00007c00」で、中断した旨が、表示される。

7.0x7c00へロードされているプログラムとブートストラップ(bootblok.s)を比較

0x7c00へロードされているプログラムを表示するために、ウィンドウ「VBox Dbg – Console」のテキストボックス「Command」へ、「u」と入力し[Enter]キーを押下。

[ブートストラップ(bootblok.s)の抜粋]

8.最後に、ブートストラップ処理を見るためにステップ実行

※「t」、「p」、「br」、「g」などを使用する。
※理由はわからないが、「g」コマンドは、「t」コマンドなどのステップ実行後でないと動作しない。
※「0000:00007c11 rep movsw」は、繰り返しのため、下記は、「0000:00007c13 jmp far 02fe0h:00018h」へブレークポイントを設定した例である。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です