make menuconfig : Kernel Hacking-->
Compile the kernel with frame pointers勾选
KGDB:kernel debugging with remote gdb勾选
Write protect kernel read-only data structures不勾选
make
make modules_install
make install
client机运行应用程序,要调试的内核模块放到server机上,client机控制server机上内核模块的运行,client机执行gdb vmlinux。
2. 确定串口 dmesg|grep tty
dmesg|grep tty 查看新增的串口名称,假设为ttyS0
测试 server控制台输入 cat /dev/ttyS0
client控制台输入 echo hello > /dev/ttyS0
3. 在/etc/default/grub kernel行末添加kgdbwait kgdboc=ttyS0,115200
4. 内核模块调试
server端:
cat /sys/module/<module name>/sections/.text
0xda234567
得到模块的.text段地址
echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc
注册kgdboc 后, 以后用魔幻字母 "g" 控制呼出kgdb
echo "g" > /proc/sysrq-trigger
client端:
cd /usr/src/linux
gdb vmlinux
set remotebaud 115200
target remote /dev/ttyS0
add-symbol-file /path to ko/xxxx.ko 0xda234567
add-symbol-file 参数1是client上module文件的位置,参数2是得到的server端上module的.text段的地址
break func1
coutinue