このチュートリアルに示されている単純なブートローダーをステップ実行しようとしています: http://mikeos.berlios.de/write-your-own-os.html - Qemu モニターを使用して、教育目的で一般的なレジスターを検査できます。
Qemu と gdb を接続でき、ブレークポイントがブートローダー (0x7c0) の先頭に設定されていますが、gdb で「c」を押すと、コードは最後まで実行されます。
kvmがgbdを仮想メモリアドレスと「混同」する可能性があることを読んだので、無効にしました。これはうまくいきませんでした。
また、( qemu で gdb を使用してブートローダーをデバッグする ) HEAD から gdb をコンパイルした後に Freedos ブートをデバッグするときに機能することも読みました。gdb を再コンパイルする代わりに、Freedos ブートのデバッグを試みました - うまくいきました!
したがって、私の問題は、実際にはチュートリアルのブートローダーを段階的に実行することだと思います。
私が試した他のこと(どれもうまくいきませんでした):
ブレークポイントを挿入する前に「si」を何十回も使用する 別のブレークポイント アドレスを試す qemu で -singlestep キーを使用する
これが私のqemuコマンドラインです:
qemu-system-i386 -fda disquete.img -boot a -s -S -monitor stdio
gdb内のコマンドシーケンスは次のとおりです。
(gdb) ターゲット リモート localhost:1234 (gdb) セット アーキテクチャ i8086 (gdb) br *0x7c0
次に、「c」を押すと、ブレークポイントをずっと通過します。
バージョン:
$ uname -a
Linux Brod 3.8.0-30-generic #44-Ubuntu SMP Thu Aug 22 20:52:24 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
$ gdb --バージョン
GNU gdb (GDB) 7.5.91.20130417-cvs-ubuntu
$ qemu --バージョン
QEMU エミュレーター バージョン 1.4.0 (Debian 1.4.0+dfsg-1expubuntu4)、Copyright (c) 2003-2008 Fabrice Bellard
Freedos ブートをステップ実行できるので、セットアップは問題ないと思いますが、この投稿の冒頭で述べたブートローダー チュートリアルのブート プロセスの概念的な誤解の中で失敗しているに違いありません。
すべてのヘルプは大歓迎です!