GDB stub on kvm, 復活の巻

以前qemu+kvmに実装されているGDBStubに関する記事を書いた段階では、kvm に実装されている GDBstub が壊れてしまっていて、使えないという状態になっていました. しかし、本日 git から最新版を落としてきてビルド、動作させたところ、GDBstub が正常に動作するようになっていました!というわけで、以下はkvmのレポジトリから最新版を落としてきて、ビルド、GDB にアタッチするまでの作業メモです.

コンパイルとインストール

#/bin/sh
# カーネルモジュールのビルド.
git clone git://git.kernel.org/pub/scm/virt/kvm/kvm-kmod.git
cd kvm-kmod
git submodule update --init
./configure 
make sync
make
sudo make install

# Qemu のビルド.
git clone git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git
cd qemu-kvm
./configure --prefix=/usr/local/kvm/git
make
sudo make install

KVMを立ち上げる.

qemu に -s オプションをつけることで、TCPlocalhost:1234 で待ち受けることができます.

# ディスクイメージ作るのが面倒なのでカーネルイメージから直ブートする.
# 途中からHDDがないのでこけるが、gdbのテストには十分.
# kernel と initrd のパスは自分で指定すること. 
/usr/local/kvm/bin/qemu-system-x86 -hda /dev/null -s -kernel /path/to/linux-2.6/arch/x86/boot/bzImage -initrd /path/to/initrd.img 

GDB でアタッチ

さあ、いよいよGDBでアタッチです!

gdb 
(gdb) file /path/to/linux-2.6/vmlinux
(gdb) attach
Remote debugging using localhost:1234
[New Thread 1]
native_calibrate_tsc () at arch/x86/kernel/tsc.c:155
155             while ((inb(0x61) & 0x20) == 0) {
(gdb) b printk
Breakpoint 1 at 0xc04a7659: file kernel/printk.c, line 599.
(gdb) c
Continuing.

Breakpoint 1, printk (fmt=0xc057e988 "<6>TSC: PIT calibration confirmed by %s.\n") at kernel/printk.c:599
599    

キタ━━━━━━(゜∀゜)━━━━━━!!!
これで快適にカーネルハックできますね!!ぜひ皆さんもためしてみてください!