文档简介
Loongson1B开发板上驱动错误常见CPU0错误,而本文档的目的在于以禅道项目管理系统上RT3070驱动错误BUG为例,讲述利用反汇编文件,跟踪CPU0错误的出错位置,并解析可能原因。共享出来希望对大家能够有所帮助。
文档总体来说分为四个部分:
A. RT3070驱动错误BUG详情
B. 跟踪过程
C. 原因分析
D. 方法总结
1. RT3070驱动错误BUG详情
RT3070无线网卡分两种驱动,分别是STA模式和软AP模式,而Loongson1B板中使用的是STA模式。由于测试需要,使用网络性能测试工具iperf测试Usb-Wifi的稳定性,连续测试22小时的时候出现CPU0错误,现场有保留,BUG由邝华款提交到禅道项目管理系统,以下列出禅道上该BUG的详情:
BUG #177::rt3070驱动错误
重现步骤:
[步骤]
使用iperf测试usb-wifi 约22小时,输出信息与错误见文件minicom.cap;调试文件见rt1.asm;使用的驱动模块为rt3070sta.ko;出错代码段见DoBulkln.c
RT3070驱动源码存储地址:\\192.168.1.48\share\测试项目\wifi
[结果]
出现CPU0错误
[期望]
2. BUG跟踪过程
2.1 BUG现场分析
首先我们查看现场的输出信息与错误LOG,查看文件minicom.cap:
------------------------------------------------------------
Client connecting to 192.168.50.101, TCP port 5001
TCP window size: 24.6 KByte (default)
------------------------------------------------------------
[ 5] local 192.168.50.102 port 45158 connected with 192.168.50.101 port 5001
[ ID] Interval Transfer Bandwidth
[ 5] 0.0- 1.0 sec 1.25 MBytes 10.5 Mbits/sec
[ 5] 1.0- 2.0 sec 1.25 MBytes 10.5 Mbits/sec
…
[ 5] 61578.0-61579.0 sec 1.25 MBytes 10.5 Mbits/sec
[ 5] 61579.0-61580.0 sec 1.25 MBytes 10.5 Mbits/sec
CPU 0 Unable to handle kernel paging request at virtual address 0000000c, epc == c0a122a0, ra == c0a122a0
Oops[#1]:
Cpu 0
$ 0 : 00000000 1000bc00 00000004 0e9e8000
$ 4 : 00000000 00006000 00408000 ae9e8000
$ 8 : 00000000 8fc04800 8fbf8c80 ac4ce000
$12 : 52441080 00000614 37363534 00004a47
$16 : c00e3bb0 00000000 00000002 c00e7000
$20 : 8022e560 8022e9b0 80740000 00015650
$24 : 00000000 c0a121b8
$28 : 8e872000 8e873ac0 2aacd9b8 c0a122a0
Hi : 000005e4
Lo : 00000000
epc : c0a122a0 DoBulkIn+0xe8/0x1b0 [rt3070sta] Not tainted
ra : c0a122a0 DoBulkIn+0xe8/0x1b0 [rt3070sta]
Status: 1000bc03 KERNEL EXL IE
Cause : 10800008
BadVA : 0000000c
PrId : 00004220
Modules linked in: rt3070sta
Process iperf (pid: 306, t