请教如何分析mips linux kernel call trace

时间:2021-03-17 16:55:31
[  233.110000] Kernel bug detected[#1]:
[  233.110000] Cpu 0
[  233.110000] $ 0   : 00000000 2ae5c001 00000001 00000020
[  233.110000] $ 4   : 00000001 8201ba80 00000010 395af224
[  233.110000] $ 8   : 31009c01 1000001e 00000000 fffffff4
[  233.110000] $12   : 7fdfe748 000000e9 614d7965 024e0000
[  233.110000] $16   : f6200000 8197df30 8064ea20 80000000
[  233.110000] $20   : 395af250 00000005 00000006 00000007
[  233.110000] $24   : 00000092 395af244
[  233.110000] $28   : 8197c000 8197df08 00000008 80210d00
[  233.110000] Hi    : 00000000
[  233.110000] Lo    : 01b77018
[  233.110000] epc   : 80210d30 do_ade+0x1c0/0x598
[  233.110000]     Not tainted
[  233.110000] ra    : 80210d00 do_ade+0x190/0x598
[  233.110000] Status: 31009c03    KERNEL EXL IE
[  233.110000] Cause : 10800034
[  233.110000] PrId  : 00019555 (MIPS 34Kc)
[  233.110000] Modules linked in: mdrv_ir
[  233.110000] Process k1_linux1 (pid: 300, threadinfo=8197c000, task=8201ba80, tls=2aad0af0)
[  233.110000] Stack : 8197c000 8197df30 00000008 006712c0 31009c03 020e84da 395af274 020e84da
[  233.110000]         395af274 80200404 003d0f00 65aa7050 65aa7518 65aae940 38a521e0 395ae270
[  233.110000]         00000000 2ae5c001 022def68 0066c88c 38ac1a08 0066ce08 0000000e 395af224
[  233.110000]         38ac1a08 0066c694 00000000 fffffff4 7fdfe748 000000e9 614d7965 024e0000
[  233.110000]         020e84da 395af274 020e84da 395af274 395af250 00000005 00000006 00000007
[  233.110000]         ...
[  233.110000] Call Trace:
[  233.110000] [<80210d30>] do_ade+0x1c0/0x598
[  233.110000] [<80200404>] ret_from_exception+0x0/0x10
[  233.110000]
[  233.110000]
[  233.110000] Code: 00021402  38420001  30420001 <00028036> 0c089285  24040001  0c0f8280  00000000  000211c0


这么多地址和寄存器值,都不知道啥意思,毫无头绪,请高手指点一二,谢谢! 

12 个解决方案

#1


1、
[ 233.110000] Kernel bug detected[#1]:前面的几行很重要,是oops的直接原因,但是你没有沾上来
2、
[ 233.110000] Call Trace:
[ 233.110000] [<80210d30>] do_ade+0x1c0/0x598
[ 233.110000] [<80200404>] ret_from_exception+0x0/0x10
这个是oops时的调用栈 
3、 do_ade+0x1c0/0x598
具体出错的位置,0x598是do_ade的长度,0x1c0是出错的指令在do_ade里的偏移。你可以通过反汇编根据0x1c0这个偏移定位到具体的c代码



你还是把[ 233.110000] Kernel bug detected[#1]:前面的几行先沾来看看

#2


[ 233.110000] Kernel bug detected[#1]:前面没有什么打印
这个错误是发生在应用启动之后的,而且kernel没有crash,终端窗口还可以输入指令。

#3


[ 233.110000] [<80210d30>] do_ade+0x1c0/0x598
[ 233.110000] [<80200404>] ret_from_exception+0x0/0x10

配合起来看是发生了未对齐的访问
你用的不是龙芯吧,我饱受这破玩意折磨。通常并不是程序的错,是内存配置不稳定。

其他mips就不知道了,只能确定发生了未对齐的访问

#4


[ 233.110000] epc : 80210d30 do_ade+0x1c0/0x598
[ 233.110000] Not tainted
[ 233.110000] ra : 80210d00 do_ade+0x190/0x598
[ 233.110000] Status: 31009c03 KERNEL EXL IE
[ 233.110000] Cause : 10800034

#5


不是龙芯。
情况是这样的,之前呢用了软浮点编译所有应用程序,一点问题没有,就是有些地方浮点运算慢些;因此改成硬浮点编译,结果就出了这么个错误,用gdb还抓不到堆栈,郁闷啊!还有没有其它好办法定位此类问题呢?

#6


[ 233.110000] Cause : 10800034
[ 233.110000] PrId : 00019555 (MIPS 34Kc)

你查一下   MIPS 34KC 的  Cause 寄存器 中的 excCode,
看看是什么原因引起的。 手里没有  MIPS 34KC 的资料。

#7


说是某个协处理器引起的,协处理器号为1,但是不确定到底是什么协处理器。

#8


请问你的问题解了没有

Kernel bug detected[#1]:
Cpu 0
$ 0   : 00000000 2af3e03e 00000011 00000001
$ 4   : 87cde000 00000010 68e25ee4 fffffffe
$ 8   : 31009c01 1000001e 00000000 68e25f14
$12   : 18245f61 00000033 69aa0da8 00000000
$16   : 87cdff30 80438a20 0087fd14 f6200000
$20   : 68e25ef4 00883820 80000000 00000007
$24   : 00000000 024ef9c0                  
$28   : 87cde000 87cdff00 00000008 80000404
Hi    : 00000001
Lo    : 00000002
epc   : 80010ed0 do_ade+0x388/0xa1c
    Not tainted
ra    : 80000404 ret_from_exception+0x0/0x10
Status: 31009c03    KERNEL EXL IE 
Cause : 00800034
PrId  : 00019750 (MIPS 74Kc)
Modules linked in: ntfs_3g mdrv_ir
Process k2_linux1 (pid: 507, threadinfo=87cde000, task=87cd1f48, tls=69aa8940)
Stack : 87cd20a0 80041ab8 87cde000 87cdff30 0227520b 68e25f1c 0227520b 68e25f1c
        68e25ef4 00000005 00000006 80000404 003d0f00 69aa1050 69aa1518 69aa8940
        2ade8960 00000000 00000000 2af3e03e 024efb74 00883780 68e25ee4 024ef9c0
        68e25ee4 024ef9c0 00000000 0000010d 00000000 68e25f14 18245f61 00000033
        69aa0da8 00000000 0227520b 68e25f1c 0227520b 68e25f1c 68e25ef4 00000005
        ...
Call Trace:
[<80010ed0>] do_ade+0x388/0xa1c
[<80000404>] ret_from_exception+0x0/0x10


Code: 00021402  38420001  30430001 <00038036> 8c820014  24420001  ac820014  8e220008  30420020 

#9


打我的分机3231
MSTAR: mark.yuan

#10


也不结贴说下如何解的!还是没有解啊? 请教如何分析mips linux kernel call trace

#11


这是mips core 报异常了。也就是status的bit 1置位了。
在status的bit1(EXL) 置位的时候, coprocessor 0的某些寄存器可以帮助你分析具体出错的位置,以及原因。

一般,如果不是一些特别的error错误,看epc就可以找到引起kernel panic的位置,可以理解为引起exception的pc值,如果是某些比较特别的错误,就得看 errorepc了。

针对楼主这个问题, cause寄存器的值为 00800034, 看来使用的应该是VI模式的中断机制,其中,bit 2- 6 是 01101, 也就是  13, 查一下mips的 coprocessor的手册,就会发现,其代表ExcCode, 也就是exception code,为13的话,就是发生了trap异常。
结合epc,也就是 在 指令地址为 80010ed0 do_ade+0x388/0xa1c 的位置,有一条trap指令执行了。

#12


指令集不兼容 - -

#1


1、
[ 233.110000] Kernel bug detected[#1]:前面的几行很重要,是oops的直接原因,但是你没有沾上来
2、
[ 233.110000] Call Trace:
[ 233.110000] [<80210d30>] do_ade+0x1c0/0x598
[ 233.110000] [<80200404>] ret_from_exception+0x0/0x10
这个是oops时的调用栈 
3、 do_ade+0x1c0/0x598
具体出错的位置,0x598是do_ade的长度,0x1c0是出错的指令在do_ade里的偏移。你可以通过反汇编根据0x1c0这个偏移定位到具体的c代码



你还是把[ 233.110000] Kernel bug detected[#1]:前面的几行先沾来看看

#2


[ 233.110000] Kernel bug detected[#1]:前面没有什么打印
这个错误是发生在应用启动之后的,而且kernel没有crash,终端窗口还可以输入指令。

#3


[ 233.110000] [<80210d30>] do_ade+0x1c0/0x598
[ 233.110000] [<80200404>] ret_from_exception+0x0/0x10

配合起来看是发生了未对齐的访问
你用的不是龙芯吧,我饱受这破玩意折磨。通常并不是程序的错,是内存配置不稳定。

其他mips就不知道了,只能确定发生了未对齐的访问

#4


[ 233.110000] epc : 80210d30 do_ade+0x1c0/0x598
[ 233.110000] Not tainted
[ 233.110000] ra : 80210d00 do_ade+0x190/0x598
[ 233.110000] Status: 31009c03 KERNEL EXL IE
[ 233.110000] Cause : 10800034

#5


不是龙芯。
情况是这样的,之前呢用了软浮点编译所有应用程序,一点问题没有,就是有些地方浮点运算慢些;因此改成硬浮点编译,结果就出了这么个错误,用gdb还抓不到堆栈,郁闷啊!还有没有其它好办法定位此类问题呢?

#6


[ 233.110000] Cause : 10800034
[ 233.110000] PrId : 00019555 (MIPS 34Kc)

你查一下   MIPS 34KC 的  Cause 寄存器 中的 excCode,
看看是什么原因引起的。 手里没有  MIPS 34KC 的资料。

#7


说是某个协处理器引起的,协处理器号为1,但是不确定到底是什么协处理器。

#8


请问你的问题解了没有

Kernel bug detected[#1]:
Cpu 0
$ 0   : 00000000 2af3e03e 00000011 00000001
$ 4   : 87cde000 00000010 68e25ee4 fffffffe
$ 8   : 31009c01 1000001e 00000000 68e25f14
$12   : 18245f61 00000033 69aa0da8 00000000
$16   : 87cdff30 80438a20 0087fd14 f6200000
$20   : 68e25ef4 00883820 80000000 00000007
$24   : 00000000 024ef9c0                  
$28   : 87cde000 87cdff00 00000008 80000404
Hi    : 00000001
Lo    : 00000002
epc   : 80010ed0 do_ade+0x388/0xa1c
    Not tainted
ra    : 80000404 ret_from_exception+0x0/0x10
Status: 31009c03    KERNEL EXL IE 
Cause : 00800034
PrId  : 00019750 (MIPS 74Kc)
Modules linked in: ntfs_3g mdrv_ir
Process k2_linux1 (pid: 507, threadinfo=87cde000, task=87cd1f48, tls=69aa8940)
Stack : 87cd20a0 80041ab8 87cde000 87cdff30 0227520b 68e25f1c 0227520b 68e25f1c
        68e25ef4 00000005 00000006 80000404 003d0f00 69aa1050 69aa1518 69aa8940
        2ade8960 00000000 00000000 2af3e03e 024efb74 00883780 68e25ee4 024ef9c0
        68e25ee4 024ef9c0 00000000 0000010d 00000000 68e25f14 18245f61 00000033
        69aa0da8 00000000 0227520b 68e25f1c 0227520b 68e25f1c 68e25ef4 00000005
        ...
Call Trace:
[<80010ed0>] do_ade+0x388/0xa1c
[<80000404>] ret_from_exception+0x0/0x10


Code: 00021402  38420001  30430001 <00038036> 8c820014  24420001  ac820014  8e220008  30420020 

#9


打我的分机3231
MSTAR: mark.yuan

#10


也不结贴说下如何解的!还是没有解啊? 请教如何分析mips linux kernel call trace

#11


这是mips core 报异常了。也就是status的bit 1置位了。
在status的bit1(EXL) 置位的时候, coprocessor 0的某些寄存器可以帮助你分析具体出错的位置,以及原因。

一般,如果不是一些特别的error错误,看epc就可以找到引起kernel panic的位置,可以理解为引起exception的pc值,如果是某些比较特别的错误,就得看 errorepc了。

针对楼主这个问题, cause寄存器的值为 00800034, 看来使用的应该是VI模式的中断机制,其中,bit 2- 6 是 01101, 也就是  13, 查一下mips的 coprocessor的手册,就会发现,其代表ExcCode, 也就是exception code,为13的话,就是发生了trap异常。
结合epc,也就是 在 指令地址为 80010ed0 do_ade+0x388/0xa1c 的位置,有一条trap指令执行了。

#12


指令集不兼容 - -