7603 驱动Debug

系统出异常了,会给你提示一堆调用堆栈,不过基本上没有 什么用处,

要找问题还得自己动手。

前两天编译new3的7603驱动,千辛万苦编译出来了,能启动系统,客户端也能连上,但是客户端一跑iperf3连到其他设备就异常,不过iperf3直接测无线路由没有问题,初步怀疑是nat模块的问题,重新关掉hnat,现象一样,没有办法,只有调试了。

系统提示softirq异常,稍微百度了一下,是说软中断不为空,这个时候进入可能就有问题。

关键是怎么找到调用?

首先看异常时调用堆栈,

0x8xxxxxxxxxx

0x9xxxxxxxx

......

先找出各个模块地址空间:cat /proc/modules

rt_timer_wdg 704 0 - Live 0x9b168000

......

nfnetlink 2176 1 ip_set, Live 0x9ab5e00

mt76x3_ap 1731728 1 - Live 0x9a000000

看到76x3的地址是9a000000,找出堆栈里面的地址主要有两个

0x9ad7dbc...

0x9b1d40..

nm mt76x3_ap.ko > ko.txt

在txt中查找相应的地址,注意要关注地址前面的,不会完全一致

最后定位在两个func:

RTMPSendPackets-->wdev_tx_pkts

应该就是wdev_tx_pkts中出了异常,看了几遍,看不出问题,只有加debug info定位了

用DBGPRINT最后定位在

if(ra_sw_nat_hook_tx!= NULL)

{

    unsigned long flags;

     RTMP_INT_LOCK(&pAd->page_lock, flags);

     ra_sw_nat_hook_tx(pPacket);

    RTMP_INT_UNLOCK(&pAd->page_lock, flags);

}

用了LOCK、UNLOCK,看IDE标的颜色不一致,屏蔽掉,跑起来没异常了,就是这里的问题,但是速度很慢,怀疑是ra_sw_nat_hook_tx的问题,注释掉,再跑一次,基本上OK了。

成功找出问题,但是没有分析出原因,以后再弄。

你可能感兴趣的:(7603 驱动Debug)