使用kgdb调试内核模块

实验环境:

硬件环境:两台物理机,并使用串口连接

操作系统:  CentOS-6.3-x86CentOSRedHat的一个社区版本

调试内核:linux-2.6.32     (自从linux kernel 2.6.26已经集成kgdbkgdb再不需要单独下载)

实验原理:

实验步骤:

编译安装内核

在开发机上编译内核并将其安装在目标机。内核的编译和安装方法在此不再赘述,请参考相关资料。

验证串口

Target输入:

stty ispeed 115200 ospeed 115200 -F /dev/ttyS0

cat /dev/ttyS0

Development输入:

stty ispeed 115200 ospeed 115200 -F /dev/ttyS0

echo "hello" >/dev/ttyS0

串口添加完成后会在 Target端输出hello”,这说明说明串口通讯正常。

模块调试

Target端:

1,加载待调试模块:insmod module.ko

2,查询模块加载地址:cat /sys/module/module/sections/.text

运行该命令后,会返回一个16进制的地址,这是module模块的.text段地址。如:

0xffffffffa00b3000(把这个地址记下来,以备后用)

3echo g > /proc/sysrq-trigger

系统会中断,进入假死状态,等待远程gdb的连接。

Development端:

1 进入Linux源码目录,可以看到目录下生成了vmlinux文件,这个就是没有经过压缩的linux内核文件。执行如下操作:

gdb ./vmlinux

2设置调试参数:

(gdb) set remotebaud 115200

(gdb) target remote /dev/ttyS0

出现如下显示表示连接成功。

Remote debugging using /dev/ttyS0

kgdb_breakpoint (key=<value optimized out>, tty=<value optimized out>) at kernel/kgdb.c:1718

1718                  wmb(); /* Sync point after breakpoint */

3 加载符号文件:

(gdb) add-symbol-file /root/biangw/ldd/module/module.ko0xffffffffa00b3000

出现如下显示:

add symbol table from file "/root/biangw/ldd/module/module.ko" at

.text_addr = 0xffffffffa00b3000

(y or n) y

Reading symbols from /root/biangw/ldd/module/module.ko...done.

4 设置断点

(gdb) b module_end

Breakpoint 1 at 0xffffffffa0064009: file /root/biangw/ldd/module/module.c, line 29.

然后

(gdb) cont

Continuing.

此时,就可以到target端,进行其他操作。若触发断点,development端就会停下来,从而可以方便查看变量等信息。

参考资料

1, VMware环境下使用KGDB调试Linux内核及内核模块

2, GDB内核调试.ppt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值