プロテクトモードへ移行し、C言語のmain()実行までのサンプルプログラム

x86のOSを作る際には、プロテクトモードへの移行など、やらなければならないことがあります。
考え方にもよりますが、この部分は、ソースコードを理解した上で、既存のものを流用して済ましてしまいたい箇所です。


そこで、Linux-0.01-rmのソースコードを元に、C言語のmain()を実行する所までのサンプルを作成しました。
マシン起動後、init/main.cのmain()の無限ループまでを実行します。
なので、後はC言語の世界でOSの機能を実装していくことができるサンプルになっています。

使い方

以下の記事で紹介した環境が整っていることが前提です。


git cloneして、makeすると、

Image

というファイルが生成されます。


これを、QEMUで以下のように実行します。

$ qemu -fda Image

以下でも同じことが行えます。

$ make run


main()の内容は、

volatileの変数に 0xbeefcafe という値を代入する
を無限ループで繰り返す。

というものです。


画面上には何も表示されないので、動作確認の方法としては、
Ctrl+Alt+2 で、QEMUモニターに入って、

(qemu) x/2i $eip

のようなコマンドを実行して、
現在実行している命令が妥当なものであるか見てみてください。
例)

(qemu) x/2i $eip
0x0000507b:  movl    $0xbeefcafe,0xc(%esp)
0x00005083:  jmp     0x507b


QEMUモニターの使い方は、以下が参考になります。