缥帙各舒散,前后互相逾。这篇文章主要讲述糟糕:糟糕区域的内核访问,sig:11 - '
swapper'
- 查杀中断处理程序相关的知识,希望能为你提供帮助。
在嵌入式Linux环境中(在PowerPC上定制2.4.25)我在几个小时后得到以下内核恐慌:
Oops: kernel access of bad area, sig: 11
NIP: C9471C7C XER: 20000000 LR: C0018C74 SP: C0198E20 REGS: c0198d70 TRAP: 0800Not tainted
MSR: 00009030 EE: 1 PR: 0 FP: 0 ME: 1 IR/DR: 11
DEAR: C9876FFF, ESR: 00000000
TASK = c0197020[0] 'swapper' Last syscall: 120
last math 00000000 last altivec 00000000
PLB0: bear= 0x48041040 acr=0x00000000 besr=0x00000000
PLB0 to OPB: bear= 0x00cc1000 besr0= 0x00000000 besr1= 0x00000000GPR00: 00000000 C0198E20 C0197020 00000000 C016E494 000000C2 C01D0000 00000000
GPR08: C98701F0 C9876FFF 00008000 C768AE0F 24004022 1001B120 07FC9500 00000000
GPR16: 00000001 00000001 FFFFFFFF 007FFE00 00001032 00198EE0 00000000 C0004780
GPR24: C01D2F68 C01E0000 C0170000 C0170000 C01B0000 C9473870 00000000 C9473864
Call backtrace:
00000001 C0018C74 C0018A1C C0005E14 C0004780 C0022724 C0005D4C
C0005D60 C0002430 C01AE5BC C0002328
Kernel panic: Aiee, killing interrupt handler!
In interrupt handler - not syncing
<
0>
Rebooting in 1 seconds...
cat / proc / modules:
CustomModule1105564
CustomModule254880
CustomModule3102401
fuse355764
usb-storage284680 (unused)
keybdev30760 (unused)
mousedev61160 (unused)
hid179680 (unused)
input61920 [keybdev mouse
ksyms -m:
AddressSymbolDefined by
c9471000(11k)[CustomModule1]
c9471b74functionA[CustomModule1]
c947358cfunctionB[CustomModule1]
c9473580functionC[CustomModule1]
...
我google寻求帮助,但我找不到有用的东西。 A也想“解码”回溯,但我不明白......地址与System.map中的地址不对应。任何人都可以解释我如何找出错误?
谢谢,克里斯
答案NIP是下一个指令指针或更一般的程序计数器(a.k.a PC),它指示内核的位置。根据ksyms的输出,NIP(
0xC9471C7C
)的内容看起来像是在functionA
。你应该能够在functionA
模块上使用objdump -S并找出functionA+0x108
的指令。链接寄存器(LR)保存当前函数的返回地址,并指示
functionA
的调用者。您可以查看System.map文件以查找包含此地址的函数,也可以在vmlinux映像上使用GNU binutils程序addr2line来获取相同的信息。从那里,你应该能够更好地了解导致oops的原因。有关PPC寄存器和汇编的更多信息,请参见here和here。
另一答案【糟糕(糟糕区域的内核访问,sig:11 - ' swapper' - 查杀中断处理程序)】此内核上的配置选项CONFIG_KALLSYMS是否可用?如果是,你可以重新编译你的内核,你应该获得一个带有符号信息的oops。
正如评论所指出的,linux 2.4没有kallsyms,所以你应该启用frame_pointer和CONFIG_DEBUG。 backtrace和system.map应该是虚拟地址,并且匹配。它们可能不完全匹配,但您可以找到最接近的符号。
例如,在backtrace outptut中:
C0018C74 and C0018A1C
看起来像内核代码地址,但C9xxxxxx范围对我来说看起来不像内核地址。是否可以链接内核模块?请在system.map的末尾发布一些行
编辑:从您的ksyms输出,似乎故障发生在自定义模块的FunctionA中,因为
NIP C9471C7C
正好在c9471b74
之后:- NIP代表Next Instruction Pointer
- c9471b74是根据你的ksyms输出的Function的起始地址。
推荐阅读
- 如何在C#中更新app.config connectionstring数据源值()
- 制作applet
- 14个用于渗透测试和数字取证的免费操作系统
- 7种密码工具,可提高在线安全性
- 如何保护平台即服务(PaaS)环境()
- 适用于中小企业的7网络漏洞扫描程序
- 7种用于渗透测试的流行开源智能工具
- 12个开源Web安全扫描程序以查找漏洞
- 21个OpenSSL示例可在现实世界中为你提供帮助