27 [ 28 [ 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 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便宜地址,分析反汇编文件,从而推出错误的地方
上一篇:调试分析之 根据内核报错信息栈信息分析错误
下一篇:调试分析之 imx257中proc下mymsg及myprintk的实现
推荐阅读最新更新时间:2026-03-23 07:20
- LDK120M12R 1.2V低压降稳压器典型应用(可调版)电路
- EVB-UTC2000-DFP、EVK-UTC2000 评估套件基于 UTC2000 USB 3.0/2.0 Type-A,即插即用 Type-C DFP
- LTC3219 演示板、250mA 通用九通道 LED 驱动器
- DC919A-D,LTC2204 CMOS 输出演示板,直流输入,40Msps 16 位 ADC,DC
- AD8618ARZ-REEL 二阶低通滤波器运算放大器的典型应用电路
- 使用 NXP Semiconductors 的 PCA9511A 的参考设计
- LT3091MPDE 恒流恒压实验室电源的典型应用
- ADR392B 4.096 Vout 微功率、低噪声精密电压基准的典型应用
- LT3470HDDB 5V 降压转换器的典型应用电路
- 使用 Diodes Incorporated 的 AZ7042ZTR-E1 的参考设计



《无线电入门与晶体管收音机》
HexView支持固件合并二进制比较
非常经典的关于LLC的杨波博士论文
ASM10DTBD-S664






京公网安备 11010802033920号