Kgdb调试linux kernel module

声明:

在注明出处的条件下可以随意应用(blog.csdn.net/innotech)。

 

 

上一篇文章(kgdb vmware设置)已经说了如何在机器上面通过虚拟机设置两个机器进行kgdb调试。在实现内核可以调试的情况下。我们下面将讲解有关module的调试方法。

 

其实module的调试方法很简单。先来说明一些问题。

系统启动时的参数如ro kgdb=ttyS*,115200 kgdboc=ttyS*,115200 kgdbwait.

这些参数都可以在系统启动后传递给模块如echo kgdboc=ttyS*,115200>/sys/module/kgdboc/parameter即可设置串口参数。echo g>/proc/sysrq-tirgger即可打开kgdb调试状态。所以说这些参数不一定要在启动是传入。并且ro是readonly的意思,如果要设置断点的话。就不能有ro参数了。

 

我们设置参数如kgdb=ttyS*,115200。进入系统。

 

在develop机器上我们输入gdb vmlinux。系统将会加载vmlinux的信息。


在target机器上我们输入echo g>/proc/sysrc-trigger[enter]。此时系统处于殭死状态。


develop)(gdb)target remote /dev/ttyS*[enter]

这个时候两台机器就会连接在一起了。即可进行调试。

develop)(gdb)c[enter]

target机器将会继续执行,我们这个时候就可以加载模块了。

target)#insmod <module name>

target)#cat /sys/modules/chardev/section/.text[enter]

target)#cat /sys/modules/chardev/section/.bss[enter]

target)#cat /sys/modules/chardev/section/.data[enter]

将会分别的到.text .bss .data的具体加载位置,为0x开头

得到位置以后我们就可以在develop机器上面调试了。中断target机器。

 

develop机器上gdb将会处于等待输入状态。这个时候我们将要加载模块的地址信息用add-symbol-file。我们将输入如下

add-symbol-file <module name> ADDR -s .data ADDR -s .bss ADDR

第一个ADDR为.text段的地址,后面两个的顺序无关。

加载成功以后会有提示。然后我们就可以设置断点了。

break function

这样断点就设置完成了。我们将要在target机器上面执行。说以让gdb continue下去。

 

这个时候target机器就属于正常操作模式了。我们将要执行相应命令来是机器可以执行到function断点出,target机器就会被中断。我们可以在develop机器上面进行调试了。

 

后记:

gdb 调试模块感觉会出现一些很怪异的问题。就是代码不断来回跳转的情况。而不是一直向下走的情况,不过不影响调试。只是比较不爽而已。

 

可以参考我的另外一篇引用的代码,基本的char 模块代码。引用自the linux kernel module programming guaid.这是一本非常适合初学者的指导,可以参考。代码是经过了一定的修改,原文的代码实在2.6.10内核上面跑的。我的机器内核为2.6.32.且改为module_init(function); module_exit(function);更近进新内核模块的代码风格。

 

我将要做的是调试无线网卡驱动的模块。不过现在不知的在哪里设置断点。这个比较尴尬啊。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值