[Kernel_exception5] undefined instruction

一、原理介绍:

  操作系统内部会对中断、异常等进行处理,其中有一类异常是未定义指令异常undefined instruction,

意思是CPU执行到一个未知的指令,CPU下一步不知该如何处理, 此时会触发kernel panic重启,重启时

会产生mrdump,将问题时的栈信息和相关的寄存器信息保存下来提供分析。

  产生undefined instruction情况有如下几种:

  (1)执行CPU不支持的指令,如部分CPU不支持浮点运算,但代码中做了浮点运行的操作;

  (2)CPU和cache进行数据传输时发生bitflip(位翻转)导致执行的指令发生变化;

  (3)存放在ROM中的代码段被踩坏导致执行的命令不能被CPU识别;

二、问题案例分析:

1、下面介绍出现此类问题时如何debug,如下重启的dump信息:

//KE0
[ 4028.614712] -(4)[178:chre_kthread]chre_kthread[178]: undefined instruction: pc=ffffff80080ef3c4
[ 4028.614774] -(4)[178:chre_kthread]Code: 91010021 92407c4a d360fc42 f8425c21 (db217d62) 

  从上面的log中可以看出出问题的PC地址(pc=ffffff80080ef3c4)、未定义的指令(db217d62),

2、下一步去符号表(vmlinux)中看对应PC位置的代码指令:

(1)../shell/aarch64-linux-android-objdump -d vmlinux > vmlinux.dis

  可以看到代码段的指令应该为:0x9b017d4a

(2)加载MR DUMP看出现问题时dump出来的RAM数据:

  ./shell/aarch64-linux-android-gdb vmlinux SYS_MINI_RDUMP

  查看出现问题时PC附近的RAM数据:

  可以看到出现问题时dump出来的数据和vmlinux代码段差别很大,怀疑代码段有踩坏的可能性。

(3)MTK平台有对应检查代码段工具KSST验证分析:

作者:frank_zyp 
您的支持是对博主最大的鼓励,感谢您的认真阅读。 
本文无所谓版权,欢迎转载。

猜你喜欢

转载自blog.csdn.net/frank_zyp/article/details/88423229
今日推荐