2008年9月15日月曜日

kgdb on linux-2.6.26

kernel 2.6.26には kgdbがマージされている。
以下のオプションを有効にしたkernelを作成。

Kernel hacking
KGDB: kernel debugging with remote gdb
KGDB: use kgdb over the serial console

grub menu.lstのkernelオプションに以下を追加。
kgdboc=ttyS1,9600 kgdbwait

qemu のserialで kgdbに接続するなら
オプションに -serial stdin -serial pty を
付けて起動し、ホスト側で gdb を起動

cd linux-2.6.26
gdb
(gdb) file vmlinux
(gdb) set remotebaud 9600
(gdb) break init_post
(gdb) target remote /dev/pts/0

で、kgdbに接続できる。

けど、gdbを Ctrl-c で止めると再接続できないよ ^^;

結局、qemu使った方がラク

qemu -s -kernel linux-2.6.26/arch/x86/boot/bzImage -h -initrd initrd-2.6.26.img da hda.img -append "root=/dev/VolGroup00/LogVol00"

(gdb) target remote localhost:1234

... gdbの接続待ってくれないのがイマイチですが...

moduleをデバッグする場合は...
linux起動後、ターゲットモジュールを insmod して、
cat /proc/modules で アドレスを確認。
...
ne2k_pci 8680 0 - Live 0xc8815000
...

gdb で symbol をロードすれば良い。
(gdb) add-symbol-file drivers/net/ne2k-pci.ko 0xc8815000
(gdb) break ne2k_pci_open

で、ifconfig eth0 X.X.X.X/24 とかすると break する。

0 件のコメント: