免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2965 | 回复: 8
打印 上一主题 下一主题

求助,用kgdb调试模块问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-05 22:44 |只看该作者 |倒序浏览
用kgdb调试内核没有问题,但调试模块始终不能成功,找不到源文件,也不能设断点,google了一段时间问题还不清楚

程序用简单的hello world

void myfunc(void)
{
        printk("<1>in myfunc\n");
}

static int __init hello_init(void)
{

        printk("<1>Hello, mod\n");
        myfunc();
        return 0;
}

static void __exit hello_exit(void)
{
        printk("<1>Hello, exit\n");
}

module_init(hello_init);
module_exit(hello_exit);

放在开发机的/home/work/hellomod目录下,然后整个目录copy到测试机下, 开发机上的内核2.6.23
测试机2.6.28, 所以copy后重新编译了hellomod.c
过程大致为:
1.  测试机重启,加启动参数kgdbwait kgdboc=ttyS0, 9600
2.  开发机设置stty ispeed 9600 ospeed 9600
     gdbmod vmlinux      
     target remote /dev/ttyS0
     continue 后又切换到开发机上来
     set solib-search-path /home/work/hellomod
     br myfunc    提示Make breakpoint pending on future shared library load? (y or [n]) y
3.  测试机上
     insmod  hellomod.ko
切不到开发机上来,设的断点没用

值得注意的2个地方:
target remote /dev/ttyS0后提示:
Remote debugging using /dev/ttyS0
0xc04686bc in kgdb_register_io_module ()
warning: shared library handler failed to enable breakpoint

另外是编译时的-g选项,不用我编译使用
obj-m := hellomod.o
default:
        $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd)
应该包含了-g吧

求高人指点!

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2009-08-06 10:49 |只看该作者
没怎么调试过,呵呵,哪位朋友调试过得,来指点一下。

论坛徽章:
0
3 [报告]
发表于 2009-08-06 14:28 |只看该作者
自己顶一下

论坛徽章:
0
4 [报告]
发表于 2009-08-06 20:49 |只看该作者
用add-symbol-file倒是可以设断点了,但设后在断点处停不下来

论坛徽章:
0
5 [报告]
发表于 2009-08-06 21:10 |只看该作者
= = 我是静态编辑进内核DEBUG

或者printk的~

论坛徽章:
0
6 [报告]
发表于 2009-08-06 21:22 |只看该作者

回复 #5 superfight 的帖子

静态有个不好的地方是每次要make, make install 这2项在我机器上要花5min左右

论坛徽章:
0
7 [报告]
发表于 2009-08-08 01:32 |只看该作者
调试模块需要加载模块的符号表,并且还要做偏移计算。

论坛徽章:
0
8 [报告]
发表于 2009-08-09 09:46 |只看该作者

回复 #7 emmoblin 的帖子

我用add-symbol-file .../hellomod.ko 添加符号,后面加的.text, .bss, .data地址是从
/sys/modules/下面看的,添加后可以设置断点,但运行时不能停在断点处。

至于地址计算,在其它帖看到说  module_list + sizeof(module_list), 但是发现没有 module_list
这个符号,可能我用的版本较新,2.6.28

论坛徽章:
0
9 [报告]
发表于 2009-08-09 16:08 |只看该作者
奇怪,很少人用kgdb调试?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP