论坛徽章: 0
20 可用积分
425的板子上跑一个netfilter的测试模块(为了省空间编进内核了),分析数据包内容并将需要的信息printk以记录日志,结果出现严重的panic错误(bad PC value),按照albcamus版主的oops调试方法,打开了kernel debug选项,幸好跑了一晚上重现到了问题,panic信息在最后(太长了,这里只给了前两次的,后面基本一样,不停在do_PrefetchAbort->asm_do_IRQ循环报错),都是backtrace到ipt_mydns_target函数再无法trace下去了。我个人的理解就是ipt_mydns_target+0x324这里调用printk的时候出了问题。做应用方面的多些,所以内核只是刚刚入门,希望各位大牛不吝赐教,这个问题郁闷狠了,google、baidu了一天都有点晕。
实现代码:
. . . . . .
printk( KERN_INFO "test %s %s %u.%u.%u.%u %s %s\n" , LOG_DNS_TEXT, LOG_SRC_TEXT, NIPQUAD( iph- > saddr) , LOG_DST_DNS, dns) ;
dns_count+ + ;
. . . . . .
汇编代码:(objdump出来的ipt_mydns_target函数)
c065bc24: 1a000013 bne c065bc78 < . text+ 0x178c78>
c065bc28: e51b6154 ldr r6, [ fp, #- 340]
c065bc2c: e59f0544 ldr r0, [ pc, #1348] ; c065c178 < . text+ 0x179178>
c065bc30: e59f1544 ldr r1, [ pc, #1348] ; c065c17c < . text+ 0x17917c>
c065bc34: e5d6200d ldrb r2, [ r6, #13]
c065bc38: e5d6300c ldrb r3, [ r6, #12]
c065bc3c: e24b7f4a sub r7, fp, #296 ; 0x128
c065bc40: e58d2000 str r2, [ sp]
c065bc44: e5d6200e ldrb r2, [ r6, #14]
c065bc48: e58d2004 str r2, [ sp, #4]
c065bc4c: e5d6c00f ldrb ip , [ r6, #15]
c065bc50: e59f2528 ldr r2, [ pc, #1320] ; c065c180 < . text+ 0x179180>
c065bc54: e58d7010 str r7, [ sp, #16]
c065bc58: e58dc008 str ip , [ sp, #8]
c065bc5c: e59fc520 ldr ip , [ pc, #1312] ; c065c184 < . text+ 0x179184>
c065bc60: e58dc00c str ip , [ sp, #12]
c065bc64: ebfa7795 bl c04f9ac0 < printk>
c065bc68: e59f2518 ldr r2, [ pc, #1304] ; c065c188 < . text+ 0x179188>
c065bc6c: e5923000 ldr r3, [ r2]
c065bc70: e2833001 add r3, r3, #1 ; 0x1
c065bc74: e5823000 str r3, [ r2]
c065bc78: e1a00008 mov r0, r8
panic信息:
[ 本帖最后由 mrfan 于 2008-6-9 00:53 编辑 ]
我来回答