准备两台虚拟机,一台编译内核,编译后将vmlinux system.map拷贝到另一台在boot下建立软连接
这样在调试端用gdb vmlinux还可以找到代码看代码
配置两台虚拟机的串口为pipe形式,名字相同,一个为server,一个为client
被调试的虚拟机(client):
在grub中最后加kgdboc=ttyS0,115200 kgdbwait
server端的虚拟机:
(gdb) set remotebaud 115200
(gdb) target remote /dev/ttyS0
Remote debugging using /dev/ttyS0
kgdb_breakpoint (new_kgdb_io_ops=0xc0a0b7d8) at kernel/kgdb.c:1721
1721 wmb(); /* Sync point after breakpoint */
(gdb) c
continue之后,被调试的虚拟机继续启动,启动完成后,可以用 echo g > /proc/sysrq-trigger 来使调试虚拟机的gdb响应来进一步设置断点等
也可以在启动之后通过 echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc 来指定串口