URN Logo
UNIX Resources » Linux » China Linux Forum » CPU 与 编译器 » 7 » 内核异常死掉, 请问根据异常信息, 怎样定位是哪一行代码引起的呢?多谢
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
内核异常死掉, 请问根据异常信息, 怎样定位是哪一行代码引起的呢?多谢
 
 
 
Subject: 内核异常死掉, 请问根据异常信息, 怎样定位是哪一行代码引起的呢?多谢
Author: icando    Posted: 2005-08-06 15:58    Length: 2,925 byte(s)
[Original] [Print] [Top]
修改了内核协议栈的一部分代码, 在ip_forward里, 将如下两行代码注释掉:
if (skb_cow(skb, /*dev2->hard_header_len*/ 14))
goto drop;
iph = skb->nh.iph;

这样网络仍然能通, 用它作为ROUTER, 在PC机上通过它 用FTP DOWNLOAD数据都正常, 但用NETIQ来模拟WAN和LAN发大量数据包, 系统就DOWN掉了打印出如下信息:

<1>Unable to handle kernel paging request at virtual address c8dbde20

pgd = c0f48000

*pgd = 00000000, *pmd = 00000000

Internal error: Oops: ffffffff

CPU: 0

pc : [<c009e950>] lr : [<c0e37fe0>] Not tainted

sp : c01a3f48 ip : 0000ffff fp : c01a3f64

r10: c1a34e50 r9 : 60000093 r8 : 000001e6

r7 : 00000620 r6 : 00000021 r5 : c0154e08 r4 : c0ee3c80

r3 : c8dbde20 r2 : 00000001 r1 : 00000000 r0 : c8dbd800

Flags: NzCv IRQs off FIQs on Mode SVC_32 Segment kernel

Control: C000317F Table: 00F48000 DAC: 0000001D

Process ksoftirqd_CPU0 (pid: 3, stackpage=c01a3000)

Stack:

c01a3f20: c0e37fe0 c009e950

c01a3f40: a0000093 ffffffff c01eb960 00001e50 c0ee3b40 c1a33000 c01a3f90 c01a3f68

c01a3f60: c008f968 c009e828 c01ebaa0 00000000 c0134620 00000000 c0122080 41029220

c01a3f80: 60000013 c01a3fb4 c01a3f94 c0020ae8 c008f88c c01220d8 00000001 c0134620

c01a3fa0: fffffff0 c01220c0 c01a3fdc c01a3fb8 c0020880 c0020a80 c01a2000 c01a2000

c01a3fc0: c01a2000 c0134620 c0122d80 00011814 c01a3ffc c01a3fe0 c0020e90 c0020810

c01a3fe0: 00000000 c00128f4 c0020dfc c012cfcc 00000000 c01a4000 c0014bec c0020e0c

Backtrace:

Function entered at [<c009e818>] from [<c008f968>]

r7 = C1A33000 r6 = C0EE3B40 r5 = 00001E50 r4 = C01EB960

Function entered at [<c008f87c>] from [<c0020ae8>]

Function entered at [<c0020a70>] from [<c0020880>]

r8 = C01220C0 r7 = FFFFFFF0 r6 = C0134620 r5 = 00000001

r4 = C01220D8

Function entered at [<c0020800>] from [<c0020e90>]

Function entered at [<c0020dfc>] from [<c0014bec>]

r7 = C012CFCC r6 = C0020DFC r5 = C00128F4 r4 = 00000000


我用arm-linux-objdump -S vmlinux > 1.S

反汇编出来,但我不知道怎样才能找到对应的哪行代码, 请各位指点一下, 多谢!

若不注释这两行代码就没有问题!
[Original] [Print] [Top]
Subject: Re: 内核异常死掉, 请问根据异常信息, 怎样定位是哪一行代码引起的呢?多谢
Author: zmingliu    Posted: 2005-08-07 02:39    Length: 350 byte(s)
[Original] [Print] [Top]
/*dev2->hard_header_len*/ 14这样做是为了提高速度吗?MAC层长度是14这样考虑的吧。
我现在也在考虑一个速度方面的问题,纯粹是为了个人玩的。能不能交流一下呢。
你反汇编出来了就简单了,PC寄存器是出错时的程序指针,从汇编代码找到相应的地址,就可以了,
后边的from是内核的函数调用堆栈,更容易跟踪错误了。错误都是内核指针造成的。
----
Only interested in OS RT CPU ACE DOC MM etc. ;-)
[Original] [Print] [Top]
Subject: Re: 内核异常死掉, 请问根据异常信息, 怎样定位是哪一行代码引起的呢?多谢
Author: icando    Posted: 2005-08-08 09:54    Length: 200 byte(s)
[Original] [Print] [Top]
我那样做只是我没有定义dev2 这个变量,在这儿会做一次memory copy, 对速度影响还是蛮大的 。 我是那样找的, 但在汇编代码中的位置是alloc_skb函数里, 我觉得好象不对, 因为程序好象没有走到那儿去啦, 再试试看
[Original] [Print] [Top]
« Previous thread
一些关于使用global pointer寻址的相关问题
CPU 与 编译器
7
Next thread »
RH9.0环境下 怎样进行汇编语言的实验?
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:47:25, cost 0.06332802772522 ms.