调试分析之 根据内核报错信息PC指针分析错误

发布者:快乐航程最新更新时间:2024-08-13 来源: cnblogs关键字:调试分析  PC指针 手机看文章 扫描二维码
随时随地手机看文章

27 [] (do_filp_open+0x3e4/0x7e8) from [] (do_sys_open+0x5c/0x114)

28 [] (do_sys_op (ret_fast_syscall+0x0/0x2c)

29 Code: e24dd004 ebf97d89 e59f1030 e59f0030 (e5113f9f) 

30 ---[ end trace eae81d24710820c4 ]---

31 proc00 vt100' (pid 1810) exited. Scheduling for restart.

32 starting pid 1811, tty '': '/sbin/getty -L ttymxc0 115200 vt100'

33 

34 arm-none-linux-gnueabi-gcc (GCC) 4.1.2

35 root filesystem buil0700

36 Freescale Semiconductor, Inc.


可以发现PC = c01e8c74


反汇编/linux-2.6.31/vmlinux文件.由于文件太大我们可能需要一点时间.


 1 root@Lover雪:/home/study/nfs_home/system/linux-2.6.31# 

 2 arm-none-linux-gnueabi-objdump -D vmlinux > ../../module/37_debug_err_led/vmlinux.txt

 3 root@Lover雪:/home/study/nfs_home/system/linux-2.6.31# cd ../../module/37_debug_err_led/

 4 

 5 root@Lover雪:/home/study/nfs_home/system/linux-2.6.31#vi vmlinux.txt 

 6 

 7 在vmlinux.txt 搜索c01e8c74 :   

 8  506554 c01e8c5c :

 9  506555 c01e8c5c:   e52de004    str lr, [sp, #-4]!

10  506556 c01e8c60:   e59f0038    ldr r0, [pc, #56]   ; c01e8ca0 <.text+0x1bfca0>

11  506557 c01e8c64:   e24dd004    sub sp, sp, #4  ; 0x4

12  506558 c01e8c68:   ebf97d89    bl  c0048294

13  506559 c01e8c6c:   e59f1030    ldr r1, [pc, #48]   ; c01e8ca4 <.text+0x1bfca4>

14  506560 c01e8c70:   e59f0030    ldr r0, [pc, #48]   ; c01e8ca8 <.text+0x1bfca8>

15  506561 c01e8c74:   e5113f9f    ldr r3, [r1, #-3999]

16  506562 c01e8c78:   e3c33007    bic r3, r3, #7  ; 0x7

17  506563 c01e8c7c:   e5013f9f    str r3, [r1, #-3999]

18  506564 c01e8c80:   e5112f9f    ldr r2, [r1, #-3999]

19  506565 c01e8c84:   e59f3020    ldr r3, [pc, #32]   ; c01e8cac <.text+0x1bfcac>

20  506566 c01e8c88:   e3822005    orr r2, r2, #5  ; 0x5

21  506567 c01e8c8c:   e5830000    str r0, [r3]

22  506568 c01e8c90:   e3a00000    mov r0, #0  ; 0x0

23  506569 c01e8c94:   e5012f9f    str r2, [r1, #-3999]

24 

25 再根据汇编代码反推.

3c816e32b233a2790f1a21a0fd8ab59a_AebkZz2YW6ecAAAAAElFTkSuQmCC.png

5.总结分析方法


从上面的步骤得知,不管程序是在内核中还是动态加载的,分析方法都是一样.



①.分析出错的错误代码得到PC的地址和偏移地址


②一般来说,错误代码中会给出出错的函数,我们可以直接到那个函数中去查错误.


③如果没有给出错误函数的话,我们就要根据PC的值判断驱动程序是在内核中还是insmod加载的程序


④分别打开linux-2.6.31/System.map , cat /proc/kallsyms匹配PC指针值,在system.map中的话,那就是内核的驱动程序除错,在/proc/kallsyms中的话,那就是insmod加载的驱动程序错误.


⑤如果是insmod加载的驱动程序除错,我们则将.ko文件进行反汇编,


arm-none-linux-gnueabi-objdump -D err_led.ko > err_led.txt,


从根据偏移地址和PC值分析汇编文件,推出错误的代码


⑥如果是内核中的程序除错的话,反汇编/linux-2.6.31/vmlinux


arm-none-linux-gnueabi-objdump -D vmlinux > vmlinux.txt


再反汇编文件中搜索PC便宜地址,分析反汇编文件,从而推出错误的地方


[1] [2] [3]
关键字:调试分析  PC指针 引用地址:调试分析之 根据内核报错信息PC指针分析错误

上一篇:调试分析之 根据内核报错信息栈信息分析错误
下一篇:调试分析之 imx257中proc下mymsg及myprintk的实现

推荐阅读最新更新时间:2024-11-02 20:03

9个PLC接线图及程序调试结果分析
一、小车往返运动 用S7-200实现小车往返的自动控制 ,控制过程为按下启动按钮 ,小车从左边往右边(右边往左边运动) 当运动到右边(左边)碰到右边(左边)的行程开关后 小车自动做返回运动,当碰到另一边的行程开关后又做返回运动 。如此的往返运动,直到当按下停车按钮后小车停止运动。 ▲电气接线图 I/O分配表 梯形图程序 PLC接线图 程序调试及结果分析 ▲控制平台操作面板 当按下SB2即i0.0(鼠标点击i0.0f)接通后,Q0.0接通,小车右行(即指示 灯 Q0.0 亮)。当小车运行碰到右限位开关SQ2即i0.4(用鼠标点击i0.4f, 模拟 SQ2被压下)接通,此时小车左行(指示灯Q0.0灭,指示灯
[嵌入式]
9个PLC接线图及程序<font color='red'>调试</font>结果<font color='red'>分析</font>
电源设计调试过程中的异常现象分析
调试过程中所看到的一些异常现象,以及后来的解决办法。其实很多工程师认为 设计电源 是非常重经验的一门技术,要见多识广。这种经验,不但体现在设计中,更体现在调试的过程。 当你一看到波形,就能把问题定位,那就是最高境界。接下来,我会把那些记录一点点贴上来,当然更希望网友也能在此贴里分享那些让你印象深刻的调试经验。 项目:UC3842控制电路学习板 现象:UC3842供电正常,但是Vref居然不是5V,而是高于5V。 解决办法:把管脚重新焊一遍。 分析:UC3842的GND脚焊接不良,导致电压浮起来了。 项目:某实验室一台电源坏了,拆开一看,UC3875控制的全桥,需要修理。 现象:初步检查,功率管坏了,由于没有同型号
[电源管理]
电源设计调试过程中的异常现象分析
 调试过程中所看到的一些异常现象,以及后来的解决办法。其实很多 工程师 认为设计 电源 是非常重经验的一门技术,要见多识广。这种经验,不但体现在设计中,更体现在调试的过程。   当你一看到波形,就能把问题定位,那就是最高境界。接下来,我会把那些记录一点点贴上来,当然更希望网友也能在此贴里分享那些让你印象深刻的调试经验。   项目:UC3842控制 电路 学习板   现象:UC3842供电正常,但是Vref居然不是5V,而是高于5V。   解决办法:把管脚重新焊一遍。   分析:UC3842的GND脚焊接不良,导致 电压 浮起来了。   项目:某实验室一台电源坏了,拆开一看,UC3875控制的 全桥 ,需要修理。
[电源管理]
逻辑分析仪在嵌入式开发调试中的应用
在嵌入式开发调试中,开发人员的调试手段包括断点、触发和跟踪三种。随着集成电路技术的发展,新一代的嵌入式处理器集成度和工作频率越来越高,芯片封装形式也越来越趋向表贴化。在线调试器(ICD)与逻辑分析仪的组合开发调试平台越来越多地成为广大的新一代嵌入式处理器的开发人员实现上述三种调试手段的首选。 开发人员使用断点功能控制所调试的应用程序的起和停。使应用程序运行到自己想要调试的程序上。通过观察在断点处的应用程序的变量以及寄存器和存储器的值检测所调试的应用程序运行是否正确。断点是开发人员经常使用的调试手段。 断点,顾名思义就是(应用程序)停下来的地方。断点按照其实现方法分为软件断点和硬件断点。软件断点是靠程序指令陷阱来实现的。硬件断点是
[测试测量]
调试助手——逻辑分析
单片机开发工程师和电子爱好者,每天都要和各种各样的数字电路打交道。在制作调试电路时会使用万用表、示波器等工具,但是某些电路,用示波器测量起来就有些力不从心了,这是可以借用逻辑分析仪来做测试。那么网友们会问,什么时候应该使用示波器,什么时候应该使用逻辑分析仪呢?下面残弈悟恩简单对两者做一个比较。 10.1 示波器和逻辑分析仪的比较 10.1.1 何时使用示波器? 当您需要看到信号上小的电压变化 当您需要很高的时间间隔精度 一般来说,在需要高垂直或电压分辨率时应使用示波器。即如果您需要看到如图10-1所示的每一微小电压变化,就应使用示波器。许多示波器,包括新一代数字示波器,还能够提供非常高的时间间隔分辨率。也就是
[测试测量]
<font color='red'>调试</font>助手——逻辑<font color='red'>分析</font>仪
利用新的逻辑分析工具加快调试和验证
  在新的嵌入式系统设计中,不但需要测试和调试2.5 GHz串行总线及其相关的高级协议,还要面临如何让32位传统总线工作在800 MHz高数据率下的问题,因此,复杂高速嵌入式系统的设计、开发、测试和调试面临着新的挑战,本文介绍如何利用最新的逻辑分析仪功能解决这些棘手问题。   要想成功开发一个新型嵌入式系统,上市时间和系统可靠性是两个最重要的因素,但现代嵌入式系统日益增大的复杂性使这一目标很难达成。传统的嵌入式系统结构包含各种组件和互连总线,总线通常有并行互连总线和标准外设总线。   如今的系统中除了引入RapidIO 和 PCI Express等新的高速串行互连和外设总线以外,并行总线在短期内仍将存在。于是,在新的嵌入式系
[测试测量]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved