🔖
QEMU カーネルデバッグ
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するとカーネルが起動し始める。
カーネルビルド
QEMUモニタ
CTRL + ALT + 2
CTRL + ALT + 1
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
Discussion