技術日誌

DB,Java,セキュリティ,機械学習など。興味のあることを雑多に学ぶ

QEMUにGDBを繋げてhariboteOSをデバッグする方法

QEMUGDBを繋げてhariboteOSを調査したいと思います。

とりあえず初期設定っぽいことはできました。

主に観測したい事

ブレイクポイントを適当に設定して以下のものを観測したい

  • IPLの動作でフロッピーの内容がメモリにロードされる様子
  • リアルモード・プロテクトモード切り替え前後
  • 画面描画直前・直後
  • 割り込みハンドラにブレイクポインタを置く(マルチタスクなどをデバッグ)

QEMU × GDBについて

https://en.wikibooks.org/wiki/QEMU/Debugging_with_QEMU

  • -S -gdb stdio:使えなかった
  • -S -gdb tcp::9000:使えた
  • -s -S:使えた

-SはデバッガのコマンドまでCPUを起動させないオプション。-s-gdb tcp::1234.の意味

z_tools/qemu/Makefilegdbを使うように-s -Sを書き足す

編集前

QEMU     = qemu-system-i386
QEMU_ARGS   = -L . -m 32 -localtime -vga std -fda fdimage0.bin -monitor stdio

default:
    $(QEMU) $(QEMU_ARGS)

編集後

QEMU     = qemu-system-i386
QEMU_ARGS   = -L . -m 32 -localtime -vga std -fda fdimage0.bin -monitor stdio -s -S
default:
    $(QEMU) $(QEMU_ARGS)

この状態でmake run. すると画面が黒い状態で止まる(-SオプションでCPUを止めているため)

別ウインドウを開き、gdb起動後にコンソールに以下を打ち込む

target remote localhost:1234

デバッガが接続される。この状況でcontinueと打ち込むと...

www.youtube.com

CPUが動きだしhariboteOSが起動する(break pointをまだ設定していないため特にデバッグっぽいことはできない)

主に観測したい事に関しては次回以降。。。

30日でできる! OS自作入門

30日でできる! OS自作入門