プロテクトモードへ移行し、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モニターの使い方は、以下が参考になります。