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 25 再根据汇编代码反推. 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的实现
推荐阅读最新更新时间:2024-11-02 20:03
设计资源 培训 开发板 精华推荐
- LT1021CMH-5 精密电压基准的典型应用
- 2.4A充电宝电路
- 联网||机械键轴||摩尔斯电码||电报机
- 使用 Analog Devices 的 LTC1550LCS8-2.5 的参考设计
- DI-130 - 被动式PFC LED照明电源
- 基于SLIMM智能功率模块STGIF7CH60TS-L的700W电机控制电源板
- 采用 24V 壁式适配器和铅酸电池的 LTC3126HFE 3.3V/2.5A 电源的典型应用电路
- 使用 Microchip Technology 的 TC28C47EOE 的参考设计
- LT1764AET 并联 LDO 稳压器以实现更高输出电流的典型应用
- ADA4610-1ARZ-R7 正峰值检波器运算放大器的典型应用电路