linux驱动调试--段错误之oops信息分析 http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29401328&id=4923447

如:

Unable to handle kernel paging request at virtual address      // 内核使用48000000来访问时发生了错误
pgd = c3b4c000
[] *pgd=
Internal error: Oops: [#]
Modules linked in: first_drv rt5370sta zd1211rw mac80211
CPU: Not tainted (2.6.30.4-EmbedSky #)
PC is at segment_test_open+0x1c/0x28 [first_drv] // PC值
LR is at chrdev_open+0xcc/0x170
pc : [] lr : [] psr: a0000013 // 发生错误时各寄存器的值(下面五行)
sp : c3a61e30 ip : c3a61e40 fp : c3a61e3c
r10: c394bc80 r9 : r8 : c34b7600
r7 : c3b46100 r6 : c3ab84b0 r5 : c3a62180 r4 :
r3 : r2 : r1 : c3b46100 r0 :
Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
Control: c000717f Table: 33b4c000 DAC:
Process firstdrvtest (pid: , stack limit = 0xc3a60268) // 发生错误时当前进程的名称是firstdrvtest
Stack: (0xc3a61e30 to 0xc3a62000) // 栈
1e20: c3a61e64 c3a61e40 c00a8580 bf0d7010
1e40: c00adba8 c3b46100 c3ab84b0 c00a84b4 c3a61e8c c3a61e68
1e60: c00a3a7c c00a84c4 c3b46100 c2c0ae40 c3af0000 c3a61ed8
1e80: c3a61eac c3a61e90 c00a3d14 c00a39bc c2c0ae40
1ea0: c3a61f64 c3a61eb0 c00b0c80 c00a3cc0 c3a61f7c c3a61ec0 c004b714 c006f8b8
1ec0: c3a61efc beb5ad9c c3a63000 c048070c c394bc80 c34b7600
1ee0: c048077c c3a61fb0 c00441e0 c004b548
1f00: c39568a0 c3a7ec00 0000001c
1f20: c3b46100 c3a60000 c3a61f64 c3a61f40 c00b99b8
1f40: c3af0000 beb5ad9c ffffff9c c3a60000 c3a61f94 c3a61f68
1f60: c00a38d8 c00b0aa0 c3a61f9c 0000850c 000083e0
1f80: c0045008 c3a61fa4 c3a61f98 c00a3988 c00a3878 c3a61fa8
1fa0: c0044e60 c00a3974 0000850c beb5ad9c
1fc0: 0000850c 000083e0 beb5ac44
1fe0: beb5ac28 000084b8 400efd9c
Backtrace: // 回溯信息
[] (segment_test_open+0x0/0x28 [first_drv]) from [] (chrdev_open+0xcc/0x170)
[] (chrdev_open+0x0/0x170) from [] (__dentry_open+0xd0/0x270)
r7:c00a84b4 r6:c3ab84b0 r5:c3b46100 r4:
[] (__dentry_open+0x0/0x270) from [] (nameidata_to_filp+0x64/0x6c)
[] (nameidata_to_filp+0x0/0x6c) from [] (do_filp_open+0x1f0/0x7e8)
r5: r4:
[] (do_filp_open+0x0/0x7e8) from [] (do_sys_open+0x70/0xe8)
[] (do_sys_open+0x0/0xe8) from [] (sys_open+0x24/0x28)
r8:c0045008 r7: r6:000083e0 r5: r4:0000850c
[] (sys_open+0x0/0x28) from [] (ret_fast_syscall+0x0/0x2c)
Code: e59f3010 e3a00000 e5932000 e3a03034 (e5c23000)
---[ end trace d31b8aee70b25c9c ]---
Segmentation fault

一、直接确定发生错误的函数

看到这句 “PC is at segment_test_open+0x1c/0x28 [first_drv]”,出现错误时我们最关注的就是PC值,因为它就是发生错误的指令的地址,这里我们可以看到错误发生在函数 segment_test_open 的0x1c处,0x28代表这个函数的总长度(汇编代码)

二、根据PC值确定发生错误的函数

有时候不会直接告诉你发生在哪个函数,而是只把PC值告诉你。。。这种比较复杂,见参考链接。

linux设备驱动第四篇:从如何定位oops的代码行谈驱动调试方法http://blog.csdn.net/haomcu/article/details/44810709

在这个例子里面,还可以使用addr2line直接定位到具体代码行。

BUG: unable to handle kernel NULL pointer dereference at           (null)

IP: [<ffffffffc061400d>] hello_init+0xd/0x30 [helloworld]</span>

addr2line -C -f -e helloworld.o d

Linux内核的Oops http://www.cnblogs.com/wwang/archive/2010/11/14/1876735.html

驱动: oops的更多相关文章

  1. 反汇编调试内核驱动 Oops提示【转】

    以下部分内容转自:https://blog.csdn.net/jiatingqiang/article/details/7481497 反汇编调试内核驱动 arm-none-linux-gnueabi ...

  2. Linux Kernel PANIC(三)--Soft Panic/Oops调试及实例分析【转】

    转自:https://blog.csdn.net/gatieme/article/details/73715860 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...

  3. linux驱动调试--段错误之oops信息分析

    linux驱动调试--段错误之oops信息分析 http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29401328&id= ...

  4. linux设备驱动程序第四部分:从如何定位oops对代码的调试方法,驱动线

    在一个我们谈到了如何编写一个简单的字符设备驱动程序,我们不是神,编写肯定会失败的代码,在这个过程中,我们需要继续写代码调试.在普通c应用.我们经常使用printf输出信息.或者使用gdb要调试程序,然 ...

  5. 驱动调试-根据oops定位错误代码行

    1.当驱动有误时,比如,访问的内存地址是非法的,便会打印一大串的oops出来 1.1以LED驱动为例 将open()函数里的ioremap()屏蔽掉,直接使用物理地址的GPIOF,如下图所示: 1.2 ...

  6. 驱动调试(四)oops确定调用树

    目录 驱动调试(四)oops确定调用树 内核开启调用树 栈指针分析 原理 寄存器别名 基础解释 例子分析 找到PC地址的位置 栈分析 附录:原文的excel title: 驱动调试(四)oops确定调 ...

  7. 驱动调试(三)oops确定函数PC

    目录 驱动调试(三)oops确定函数PC 什么是oops 流程简述 代码仓库 模块例子分析 找到PC值 判断是否属于模块 查看符号表 找到模块 反汇编模块 内核例子分析 找到PC值 判断是否属于模块 ...

  8. 36.Linux驱动调试-根据oops定位错误代码行

    1.当驱动有误时,比如,访问的内存地址是非法的,便会打印一大串的oops出来 1.1以LED驱动为例 将open()函数里的ioremap()屏蔽掉,直接使用物理地址的GPIOF,如下图所示: 1.2 ...

  9. 26、驱动调试之根据oops信息和堆栈确定出错的代码

    a.驱动作为模块:1. 根据pc值确定该指令属于内核还是外加的模块pc=0xbf000018 它属于什么的地址?是内核还是通过insmod加载的驱动程序?先判断是否属于内核的地址: 看System.m ...

随机推荐

  1. POJ2823 Sliding Window(单调队列)

    单调队列,我用deque维护.这道题不难写,我第二次写单调队列,1次AC. -------------------------------------------------------------- ...

  2. 正则语法笔记-regular expression note

    参考文档:python正则表达式 正则表达式定义:正则是一门高度专业编程语言,内嵌在其他语言(python re模块)中使用.正则表达式包含元字符(metacharacter)列表,列表如下: . ^ ...

  3. 射频识别技术漫谈(7)——ID卡

    ID(Identification)是识别的意思,ID卡就是识别卡.ID卡包含范围广泛,只要具有识别功能的卡片都可以叫ID卡,例如条码卡,磁卡都可以是ID卡,我们这儿说的当然是射频识别卡. 射频ID卡 ...

  4. Json.Net系列教程 2.Net类型与JSON的映射关系

    原文 Json.Net系列教程 2.Net类型与JSON的映射关系 首先谢谢大家的支持和关注.本章主要介绍.Net类型与JSON是如何映射的.我们知道JSON中类型基本上有三种:值类型,数组和对象.而 ...

  5. 17.1.2?Replication Formats 复制格式:

    17.1.2?Replication Formats 复制格式: 17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Ba ...

  6. cocos2d-x中的尺寸之二

    接下来我们再做些坏事,比如给EGLView设置分辨率,代码如下: pEGLView->setDesignResolutionSize(240, 320, kResolutionExactFit) ...

  7. Eclipse创建新项目时无法输入项目名的解决方法

    放假耍了那么久,也是该收心忙活了. 今天打开Eclipse新建项目时,发生了一个很奇怪的情况,就是在下面这个位置的输入框无法输入. 经过百度之后,发现解决方案是(原地址点我) Eclipse图标右键 ...

  8. windows上放弃使用PyGTK

    windows上放弃使用PyGTK - riag的专栏 - 博客频道 - CSDN.NET windows上放弃使用PyGTK 分类: python 2010-03-31 16:47 1054人阅读 ...

  9. Unity5.0 RPG角色扮演历险类游戏之 森林历险记

    http://v.youku.com/v_show/id_XMTI1MjEyNjc4MA==.html? from=y1.7-1.2

  10. 如何判断一个变量是数组Array类型

    在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...