调试分析之 根据内核报错信息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?imageView2/2/w/1000

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的实现

推荐阅读最新更新时间:2026-03-23 07:20

调试分析之 根据内核报错信息信息分析错误
错误驱动源文件: 加载错误驱动程序 1 root@EasyARM-iMX257 /mnt/nfs/module/37_debug_err_led# echo 1 /dev/errdule/37_debug_err_led# echo 1 /dev/err_led_dev 2 le kernel paging request at virtual address 43fac060 3 pgd = c3b8c000 4 *pgd=00000000 5 Internal error: Oops: 5 PREEMPT 6 Modules linked in: err_led gpio 7 C
[单片机]
ARM指针寄存器 -程序计数器PC、堆栈指针SP
堆栈是一种具有“后进先出”(LIFO---Last In First Out)特殊访问属性的存储结构。堆栈一般使用RAM 物理资源作为存储体,再加上LIFO 访问接口实现。 堆栈的实现方法: 在随机存储器区划出一块区域作为堆栈区,数据可以一个个顺序地存入(压入)到这个区域之中,这个过程称为‘压栈’(push )。通常用一个指针(堆栈指针 SP---Stack Pointer)实现做一次调整,SP 总指向最后一个压入堆栈的数据所在的数据单元(栈顶)。从堆栈中读取数据时,按照堆栈 指针指向的堆栈单元读取堆栈数据,这个过程叫做 ‘弹出’(pop ),每弹出一个数据,SP 即向相反方向做一次调整,如此就实现了后进先出的原则。 堆栈
[单片机]
9个PLC程序调试及结果分析介绍
一、小车往返运动 用S7-200实现小车往返的自动控制 ,控制过程为按下启动按钮 ,小车从左边往右边(右边往左边运动) 当运动到右边(左边)碰到右边(左边)的行程开关后 小车自动做返回运动,当碰到另一边的行程开关后又做返回运动 。如此的往返运动,直到当按下停车按钮后小车停止运动。 ▲ 电气 接线图 I/O分配表 梯形图程序 PLC 接线图 程序调试及结果分析 ▲控制平台操作面板 当按下SB2即i0.0(鼠标点击i0.0f)接通后,Q0.0接通,小车右行(即指示 灯 Q0.0 亮)。当小车运行碰到右限位开关SQ2即i0.4(用鼠标点击i0.4f, 模拟 SQ2被压下)接通,此时小车左行(指示灯Q0.
[嵌入式]
9个PLC程序<font color='red'>调试</font>及结果<font color='red'>分析</font>介绍
stm32处理器调试模式下运行正常,上电自启动后运行不正常的故障排查分析
最近负责一个项目,用到stm32f4的一款高性能芯片。研发过程中遇到一个很诡异的现象,前前后后折腾了两三天,最后才搞定。由于是新手,经验不足,排故过程很纠结~~ 现象如下: 1.采用JLINK下载程序后,断电让其上电重新启动,发现有时可以正常运行,有时候无法正常运行,大约每两、三次就有一次无法正常上电启动。 2.通过JLINK调试程序,每次均正常运行。太诡异了! 发现问题后开始定位原因。首先考虑是BOOT启动出问题了,stm32f4启动方式分三种:User FLash、SystemFlash和EmbeddedSRAM,通过BOOT0和BOOT1管脚配置。程序正常运行时从User FLash启动,如果BOOT0和BOOT1配
[单片机]
stm32调试模式下运行正常,上电自启动后运行不正常排查分析
最近用到STM32F103的芯片,芯片单步正常,直接上电不能正常工作,加上程序中里面有点bug.然后就各种莫名奇妙。 后面,单步状态把bug找完之后,理论上上电就可以正常跑了。但是总会出现莫名其面的问题。 比如,①单步正常,直接跑就异常。 ② 异常指的是程序不是死机或者hardfault而是不按照预想的逻辑,但是还是看似正常的运行。 ③用镊子复位,其可以正常起来, 百度了一下:https://blog.csdn.net/weibo1230123/article/details/80664466 多数是查时钟复位电源,但是无效。最后发现是外设启动慢导致的。 首先,明白一个道理,单步逻辑对的,那么程序就是对的
[单片机]
利用高速数字分析仪和专用内存软件调试更高速率 DDR 信号
内存 广泛应用于各种设备的单板。而随着电子产品对数据吞吐量的不断提高,内存也在更新换 代,进一步提升了速率,如新一代内存 DDR4,数据信号速率达到了 3.2Gbps。更高速率的内存信号,不仅 JEDEC 规范规定了更严格的测试要求和更多的测试项目,如对于 DDR4 还要求测试固有抖动 Dj,以及信号 的眼图模板测试等,而且对传统的内存测试 软件 中所使用的 DDR 内存信号读写分离方法,也构成了新的挑 战。本文将分析和介绍更高速率的 DDR 内存信号测试所面临的挑战以及力科的应对方案。 一、传统分析软件针对 DDR 信号的读写分离原理 常用的 DDR 内存分析软件一般是通过 DDR 内存的 DQ 数据信号与 DQS 选通信
[测试测量]
利用高速数字<font color='red'>分析</font>仪和专用内存软件<font color='red'>调试</font>更高速率 DDR 信号
便携式功率分析仪设计----键盘设计与校准、调试与测试
键盘操作 一般的测量仪器都可通过按键输入命令对仪器进行测量,按键的种类很多,从机械结构来分有机械接触式的,导电橡胶的等,但无论何种按键都具有一个最基本的特性,那就是能实现触点的通和断,然后通过电路实现电气上的逻辑通和断,从而实现功能的控制,在现代电子测量仪器中一个按键能表示一个使仪器完成某种操作的命令,也可用几个按键组合完成一个特定的命令,还能用一个按键在不同的状态下表示不同的命令,但一般每个按键都有其唯一的代码。CPU通过读代码来识别按键进行处理,按键的排列一般都是矩阵形式,每一个按键都有唯一的行、列位置,所以CPU通过确定按键的行列来确定按键的位置,键盘与CPU的连接方式有两种,一种是利用中断,当有键按下时,按键闭合,键盘板
[测试测量]
便携式功率<font color='red'>分析</font>仪设计----键盘设计与校准、<font color='red'>调试</font>与测试
示波器频域分析在电源调试的应用
  在电源噪声的分析过程中,比较经典的方法是使用示波器观察电源噪声波形并测量其幅值,据此判断电源噪声的来源。但是随着数字器件的电压逐步降低、电流逐步升高,电源设计难度增大,需要使用更加有效的测试手段来评估电源噪声。本文是使用频域方法分析电源噪声的一个案例,在观察时域波形无法定位故障时,通过FFT(快速傅立叶变换)方法进行时频转换,将时域电源噪声波形转换到频域进行分析。电路调试时,从时域和频域两个角度分别来查看信号特征,可以有效地加速调试进程。   在单板调试过程中发现一个网络的电源噪声达到80mv,已经超过器件要求,为了保证器件能够稳定工作必须降低该电源噪声。   在调试该故障前先回顾下电源噪声抑制的原理。如下图所示
[测试测量]
示波器频域<font color='red'>分析</font>在电源<font color='red'>调试</font>的应用
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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