|
|
|
|
| 内核异常死掉, 请问根据异常信息, 怎样定位是哪一行代码引起的呢?多谢 |
 内核异常死掉, 请问根据异常信息, 怎样定位是哪一行代码引起的呢?多谢 - icando [ 2005-08-06 15:58 | 2,925 byte(s)]
 Re: 内核异常死掉, 请问根据异常信息, 怎样定位是哪一行代码引起的呢?多谢 - zmingliu [ 2005-08-07 02:39 | 350 byte(s)]
 Re: 内核异常死掉, 请问根据异常信息, 怎样定位是哪一行代码引起的呢?多谢 - icando [ 2005-08-08 09:54 | 200 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]
|
|
[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]
|
|
[Original]
[Print]
[Top]
|
|
我那样做只是我没有定义dev2 这个变量,在这儿会做一次memory copy, 对速度影响还是蛮大的 。 我是那样找的, 但在汇编代码中的位置是alloc_skb函数里, 我觉得好象不对, 因为程序好象没有走到那儿去啦, 再试试看
|
|
|
[Original]
[Print]
[Top]
|
|
|