🔖

QEMU カーネルデバッグ

2022/09/16に公開

QEMU カーネルでバッグについて書いています。

カーネルビルドはmake defconfigで動作する。
make allnoconfigでは動作しなかった。

arch/x86/boot/bzImageとbusybox/initramfs.cpio.gzをlinuxディレクトリに入れる。

sudo apt install qemu-system-x86 gdb ddd

echo "add-auto-load-safe-path" vmlinux-gdb.py >> ~/.gdbinit

qemu-system-x86_64 -kernel ./bzImage -initrd ./initramfs.cpio.gz -m 1024M -nographic -append "console=ttyS0 nokaslr" -gdb tcp::1234 -S -smp 4          

-smp 4 CPU数指定

別のターミナルでgdbを起動して、接続する。

gdbの場合
gdb ./vmlinux --eval-command="target remote localhost:1234"

dddの場合
LANG=C ddd ./vmlinux --eval-command="target remote localhost:1234"

デバッグ上でcontinueするとカーネルが起動し始める。

カーネルビルド
https://zenn.dev/linux/articles/520e5f9dc7b97b

https://zenn.dev/linux/articles/2d7c0996d29706

QEMUモニタ
CTRL + ALT + 2

CTRL + ALT + 1

https://yuyubu.hatenablog.com/entry/2018/06/30/qemu_monitorを使って自作OSをデバッグする

dddでsessionでフリーズする。
~/ddd/session/initを削除したら解決した。

QEMU MONITORを使う場合 gdbでブレークできなくなる。

$ qemu-system-x86_64 -kernel ./arch/x86_64/boot/bzImage -initrd ./initramfs.cpio.gz -m 1024M -gdb tcp::1234 -S -smp 4 -monitor stdio

https://qiita.com/wataash/items/174b454d4478898a556b

Discussion