免费注册 查看新帖 |

Chinaunix

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

[硬件及驱动] OOP错误调试过程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-24 16:48 |只看该作者 |倒序浏览
现在用了一个ks8851的网卡,网卡是在内核外以.ko文件形式编译的,但目前ifconfig 出现了oop错误。
~ $ ifconfig eth0 down
Unable to handle kernel paging request at virtual address 00608224
pgd = c1b68000
[00608224] *pgd=00000000
Internal error: Oops: 5 [#1]
Modules linked in: at91_ether ks8851_mll sver rled dpram
CPU: 0
PC is at fib_sync_down+0xb4/0x164
LR is at 0xc1c57420
pc : [<c01ddfa0>]    lr : [<c1c57420>]    Not tainted
sp : c1b89dfc  ip : 006081c8  fp : c1b89e18
r10: c1aa2800  r9 : 00000000  r8 : c1b89ed8
r7 : 000000ff  r6 : c1c573c0  r5 : 00000002  r4 : c1aa2800
r3 : 00000001  r2 : 00000001  r1 : c1c573a4  r0 : 00000001
Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  Segment user
Control: C000717F
Table: 21B68000  DAC: 00000015
Process ifconfig (pid: 756, stack limit = 0xc1b88250)
Stack: (0xc1b89dfc to 0xc1b8a000)
9de0:                                                                c1aa2800
9e00: c1aa2800 00000002 00000000 c1b89e2c c1b89e1c c01dc9c0 c01ddefc c02c3fd8
9e20: c1b89e40 c1b89e30 c01dcc2c c01dc9b0 c02c3fd8 c1b89e5c c1b89e44 c0043c48
9e40: c01dcbbc c1aa2800 c1aa282c 00001003 c1b89e6c c1b89e60 c0043e18 c0043c1c
9e60: c1b89e84 c1b89e70 c0196fac c0043e18 c1aa2800 00001042 c1b89ea4 c1b89e88
9e80: c0198710 c0196f1c ffffff9d c1ac2e20 c1c5b2e0 beb2fcc0 c1b89f10 c1b89ea8
9ea0: c01d51e4 c01986c0 c1b88000 00000000 c1c5b2ec 00008914 00001042 0000d524
9ec0: 401351c8 beb2ff87 30687465 00000000 00000000 00000000 00001042 0000d524
9ee0: 401351c8 beb2ff87 00008914 ffffffe7 beb2fcc0 00000000 c0022d44 c1b88000
9f00: beb2fedc c1b89f20 c1b89f14 c01d671c c01d4f14 c1b89f40 c1b89f24 c018cc58
9f20: c01d667c c0365ba0 ffffffe7 00008914 00000000 c1b89f5c c1b89f44 c0081c10
9f40: c018ca94 c0365ba0 beb2fcc0 00000003 c1b89f84 c1b89f60 c0081eec c0081be4
9f60: 00001000 00000000 c0365ba0 fffffff7 00008914 00000036 c1b89fa4 c1b89f88
9f80: c0081f4c c0081c68 00000000 000b04fc 000b05cc 00000000 00000000 c1b89fa8
9fa0: c0022ba0 c0081f1c 000b04fc 000b05cc 00000003 00008914 beb2fcc0 000b04fc
9fc0: 000b04fc 000b05cc 00000000 000937b8 0000da10 00000001 beb2fedc 000b067c
9fe0: 000c3844 beb2fc68 0003949c 401d9f34 60000010 00000003 00000000 00000000
Backtrace:
[<c01ddeec>] (fib_sync_down+0x0/0x164) from [<c01dc9c0>] (fib_disable_ip+0x20/0x3c)
r7 = 00000000  r6 = 00000002  r5 = C1AA2800  r4 = C1AA2800
[<c01dc9a0>] (fib_disable_ip+0x0/0x3c) from [<c01dcc2c>] (fib_netdev_event+0x80/0x94)
r4 = C02C3FD8
[<c01dcbac>] (fib_netdev_event+0x0/0x94) from [<c0043c48>] (notifier_call_chain+0x3c/0x54)
r4 = C02C3FD8
[<c0043c0c>] (notifier_call_chain+0x0/0x54) from [<c0043e18>] (raw_notifier_call_chain+0x10/0x14)
r6 = 00001003  r5 = C1AA282C  r4 = C1AA2800
[<c0043e08>] (raw_notifier_call_chain+0x0/0x14) from [<c0196fac>] (dev_close+0xa0/0xac)
[<c0196f0c>] (dev_close+0x0/0xac) from [<c0198710>] (dev_change_flags+0x60/0x12
r5 = 00001042  r4 = C1AA2800
[<c01986b0>] (dev_change_flags+0x0/0x12 from [<c01d51e4>] (devinet_ioctl+0x2e0/0x70
r7 = BEB2FCC0  r6 = C1C5B2E0  r5 = C1AC2E20  r4 = FFFFFF9D
[<c01d4f04>] (devinet_ioctl+0x0/0x70 from [<c01d671c>] (inet_ioctl+0xb0/0xe0)
[<c01d666c>] (inet_ioctl+0x0/0xe0) from [<c018cc58>] (sock_ioctl+0x1d4/0x22c)
[<c018ca84>] (sock_ioctl+0x0/0x22c) from [<c0081c10>] (do_ioctl+0x3c/0x84)
r7 = 00000000  r6 = 00008914  r5 = FFFFFFE7  r4 = C0365BA0
[<c0081bd4>] (do_ioctl+0x0/0x84) from [<c0081eec>] (vfs_ioctl+0x294/0x2b4)
r6 = 00000003  r5 = BEB2FCC0  r4 = C0365BA0
[<c0081c58>] (vfs_ioctl+0x0/0x2b4) from [<c0081f4c>] (sys_ioctl+0x40/0x5c)
r7 = 00000036  r6 = 00008914  r5 = FFFFFFF7  r4 = C0365BA0
[<c0081f0c>] (sys_ioctl+0x0/0x5c) from [<c0022ba0>] (ret_fast_syscall+0x0/0x2c)
r6 = 00000000  r5 = 000B05CC  r4 = 000B04FC
Code: e7931102 e1510006 0a000025 e591c008 (e59c305c)
Segmentation fault
请问哪位大神给点方法和思路? 网上的反汇编都是驱动和内核在一起才能找问题。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2016-05-24 18:09 |只看该作者
回复 1# yv9200

OOPS 中有 calltrace 的啊。


   

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:0015-16赛季CBA联赛之吉林
日期:2016-03-23 17:25:0015-16赛季CBA联赛之浙江
日期:2016-04-01 08:25:0615-16赛季CBA联赛之山西
日期:2016-04-01 10:09:1915-16赛季CBA联赛之广夏
日期:2016-06-03 15:58:212016科比退役纪念章
日期:2016-07-28 17:42:5215-16赛季CBA联赛之广东
日期:2017-02-20 23:32:43
3 [报告]
发表于 2016-05-25 11:37 |只看该作者
oops 的地址在 pc : [<c01ddfa0>]
请使用 gdb 调试 vmlinux
断点设置在 c01ddfa0,看看是哪行代码导致的 oops

论坛徽章:
0
4 [报告]
发表于 2016-05-25 13:57 |只看该作者
我现在已经找到出错误的代码了,在net/ipv4/fib_semantics.c中的fib_sync_down(__be32 local, struct net_device *dev, int force)的BUG_ON(!fi->fib_nhs);
  Update FIB if:
   - local address disappeared -> we must delete all the entries
     referring to it.
   - device went down -> we must shutdown all nexthops going via it.
*/

int fib_sync_down(__be32 local, struct net_device *dev, int force)
{
        int ret = 0;
        int scope = RT_SCOPE_NOWHERE;

        if (force)
                scope = -1;

        if (local && fib_info_laddrhash) {
                unsigned int hash = fib_laddr_hashfn(local);
                struct hlist_head *head = &fib_info_laddrhash[hash];
                struct hlist_node *node;
                struct fib_info *fi;

                hlist_for_each_entry(fi, node, head, fib_lhash) {
                        if (fi->fib_prefsrc == local) {
                                fi->fib_flags |= RTNH_F_DEAD;
                                ret++;
                        }
                }
        }

        if (dev) {
                struct fib_info *prev_fi = NULL;
                unsigned int hash = fib_devindex_hashfn(dev->ifindex);
                struct hlist_head *head = &fib_info_devhash[hash];
                struct hlist_node *node;
                struct fib_nh *nh;

                hlist_for_each_entry(nh, node, head, nh_hash) {
                        struct fib_info *fi = nh->nh_parent;
                        int dead;

                        BUG_ON(!fi->fib_nhs);
                        if (nh->nh_dev != dev || fi == prev_fi)
                                continue;
                        prev_fi = fi;
                        dead = 0;
                        change_nexthops(fi) {
                                if (nh->nh_flags&RTNH_F_DEAD)
                                        dead++;
                                else if (nh->nh_dev == dev &&
                                         nh->nh_scope != scope) {
                                        nh->nh_flags |= RTNH_F_DEAD;
#ifdef CONFIG_IP_ROUTE_MULTIPATH
                                        spin_lock_bh(&fib_multipath_lock);
                                        fi->fib_power -= nh->nh_power;
                                        nh->nh_power = 0;
                                        spin_unlock_bh(&fib_multipath_lock);
#endif
                                        dead++;
                                }
#ifdef CONFIG_IP_ROUTE_MULTIPATH
                                if (force > 1 && nh->nh_dev == dev) {
                                        dead = fi->fib_nhs;
                                        break;
                                }
#endif
                        } endfor_nexthops(fi)
                        if (dead == fi->fib_nhs) {
                                fi->fib_flags |= RTNH_F_DEAD;
                                ret++;
                        }
                }
        }

        return ret;
}
这已经是路由表的相关东西了,我仅仅改的是网卡驱动,离这里有点远。现在可能的我估计只能一点点找传参的错误了。
回复 3# Buddy_Zhang1


   

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
5 [报告]
发表于 2016-05-25 14:40 |只看该作者
回复 4# yv9200

其实不是很远。配置网络接口的一些动作,一个面通过网卡驱动生效的,另外一个方面可能会影响到路由。


   

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2016-05-25 14:40 |只看该作者
回复 4# yv9200

其实不是很远。配置网络接口的一些动作,一个面通过网卡驱动生效的,另外一个方面可能会影响到路由。


   

论坛徽章:
0
7 [报告]
发表于 2016-05-25 15:00 |只看该作者
其实很有可能是网卡驱动里某些参数没往上层传,导致上层读出来那个数是个空,导致这样的错误,但目前从这个oop看来帮助不是很大。回复 6# Godbach


   

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
8 [报告]
发表于 2016-05-25 15:02 |只看该作者
回复 7# yv9200

因为你这个 OOPS 是可以复现的。你可以顺着配置的流程看一下代码。
   

论坛徽章:
0
9 [报告]
发表于 2016-05-25 15:03 |只看该作者
其实我还是想通过这个oop错误,判断网卡驱动里哪些东西写的不对,然后去修改,但目前定位到的信息,只能靠猜来解决问题。。。。。。回复 7# yv9200


   

论坛徽章:
0
10 [报告]
发表于 2016-05-25 15:06 |只看该作者
是说根据这个backtrace的信息,跟踪下ifconfig执行的过程是这个意思吗?回复 8# Godbach


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP