ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

驱动开发crash问题debug方法之一

2020-07-23 20:32:33  阅读:355  来源: 互联网

标签:24 crash 07 16 Thu Jul 2020 debug 驱动


有时候在开发过程中遇到crash的问题,back trace印的比较少或者没有印,或者看到back trace你觉得可以不是死在这边,都可以用下面的方法进行debug,定位到具体是哪一个函数的某一行。

[Thu Jul 16 07:24:18.560 2020] [ 9.983629] Internal error: Oops: 86000007 [#1] PREEMPT SMP
[Thu Jul 16 07:24:18.560 2020] [ 9.989206] Modules linked in: mwgifker(PO) utpa2k(O) libdmdbraslia(O) mdrv_ldm(O) kdrv_hdr10plus_ref(O) kdrv_alg(O) kdrv_platform(O) kdrv_dolby_vision(O) iniparser(O) firmware_class kdrv_xc(O) mali_kbase(O) f81232 ftdi_sio cp210x ch341 pl2303 usbserial
[Thu Jul 16 07:24:18.560 2020] [ 10.011667] Process irq/207-(null) (pid: 1862, stack limit = 0x00000000a46a663f)
[Thu Jul 16 07:24:18.560 2020] [ 10.019068] CPU: 0 PID: 1862 Comm: irq/207-(null) Tainted: P O 4.19.79-dtv2020-t31-20200701 #1
[Thu Jul 16 07:24:18.560 2020] [ 10.028982] Hardware name: M7642 (DT)
[Thu Jul 16 07:24:18.560 2020] [ 10.032645] pstate: 80000005 (Nzcv daif -PAN -UAO)
[Thu Jul 16 07:24:18.560 2020] [ 10.037438] pc : 0x12ba228
[Thu Jul 16 07:24:18.560 2020] [ 10.040471] lr : MDrv_SC_isr+0x120/0x150 [utpa2k]
[Thu Jul 16 07:24:18.560 2020] [ 10.045176] sp : ffffff800fc43cf0
[Thu Jul 16 07:24:18.560 2020] [ 10.048490] x29: ffffff800fc43cf0 x28: 0000000000000000 
[Thu Jul 16 07:24:18.560 2020] [ 10.053806] x27: ffffffc039f442a4 x26: 0000000000000029 
[Thu Jul 16 07:24:18.560 2020] [ 10.059121] x25: 000000000000002d x24: ffffff80015a2000 
[Thu Jul 16 07:24:18.560 2020] [ 10.064435] x23: ffffff8008ddd000 x22: ffffffc03640b380 
[Thu Jul 16 07:24:18.560 2020] [ 10.069749] x21: 0000000000018000 x20: 000000000000000a 
[Thu Jul 16 07:24:18.575 2020] [ 10.075064] x19: 0000000000000001 x18: ffffff8008ddd000 
[Thu Jul 16 07:24:18.575 2020] [ 10.080378] x17: 0000000000000000 x16: 0000000000000001 
[Thu Jul 16 07:24:18.575 2020] [ 10.085693] x15: ffffffc07f567a10 x14: 0000000000000000 
[Thu Jul 16 07:24:18.575 2020] [ 10.091007] x13: ffffff80025a4000 x12: 0000000000000000 
[Thu Jul 16 07:24:18.575 2020] [ 10.096322] x11: ffffffffffffffff x10: ffffff05ffffffff 
[Thu Jul 16 07:24:18.575 2020] [ 10.101637] x9 : 04ffffffffffffff x8 : ffffff00ffffffff 
[Thu Jul 16 07:24:18.575 2020] [ 10.106951] x7 : ffffffffffffffff x6 : ff0302ffffffff01 
[Thu Jul 16 07:24:18.575 2020] [ 10.112266] x5 : ffffffffffffffff x4 : ffffff06ffffffff 
[Thu Jul 16 07:24:18.575 2020] [ 10.117580] x3 : 00000000012ba228 x2 : ffffff800d003534 
[Thu Jul 16 07:24:18.575 2020] [ 10.122894] x1 : 0000000000000000 x0 : 000000000000002d 
[Thu Jul 16 07:24:18.575 2020] [ 10.128208] Call trace:
[Thu Jul 16 07:24:18.575 2020] [ 10.130655] 0x12ba228
[Thu Jul 16 07:24:18.575 2020] [ 10.133203] MApi_CMA_Pool_Release+0xaa8/0xab0 [utpa2k]

 

找到toolchain的路径,export一下,如下

export PATH=/mtkeda/dtv/tools/mstar_toolchain/linaro_aarch64_linux-2014.09_r20170413/tools/arm/MStar/linaro_aarch64_linux-2014.09_r20170413/bin/:$PATH

aarch64-linux-gnu-objdump -D xxx.o(xxx.ko) > dump.log     //64为arm,把crash的文件给ojbdump出来,注意要是debug版本,首先,要(使用 -Wl 选项)通知链接器生成一个映像文件,并(使用 -g 选项)通知编译器生成调试符号

arm-none-linux-gnueabi-objdump

然后到dump.log里面grep 到MDrv_SC_isr  。例如下面这样就能找到对应的地址

nm  utopia.ko |grep MDrv_SC_isr

MDrv_SC_isr+0x120/0x150

》》这条trace表示,xxx.ko中MDrv_SC_isr的总长度为0x150,挂的位置为MDrv_SC_isr的起始地址+ 0x120的offset

在调用 Addr2line 工具时,要使用 -e 选项来指定可执行映像是 utopia.ko。通过使用 -f 选项,可以告诉工具输出函数名。

Addr2line 工具(它是标准的 GNU Binutils 中的一部分)是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。

00000000001c6e70 <MDrv_SC_isr>:    00000000001c6e70 + 0x120得到下面的地址

 aarch64-linux-gnu-addr2line -e utpa2k.o 1c6f90

xxx/xxx/mdrv_sc_isr.c:407

标签:24,crash,07,16,Thu,Jul,2020,debug,驱动
来源: https://www.cnblogs.com/kaosine/p/13368539.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有