如何分析 kernel panic

ARM下Kernel panic - not syncing: Attempted to kill init!错误分析 ARM下Kernel panic - not syncing: Attempted to kill init!错误分析 1. 前言       最近在通过busybox制作rootfs的时候,发现使用不同版本的交叉编译器去编译busybox的时候,有些版本编译器编译出的busybox可执行文件不能用,它会导致系统启动过程中在加载init程序时出错。本文将分析怎么去查找这个错误具体是由什么引 阅读详情

the below is a example of kernel panic log.

[  875.497504] Unable to handle kernel paging request at virtual address 4042a00c
[  875.499110] pgd = c0004000
[  875.501797] [4042a00c] *pgd=00000000
[  875.505364] Internal error: Oops: 5 [#1] PREEMPT
[  875.509957] Modules linked in: dhd
[  875.513350] CPU: 0    Not tainted  (2.6.29 #21)
[  875.517877] PC is at lock_acquire+0x60/0x74
[  875.522024] LR is at 0x0
[  875.524544] pc : [<c0090e10>]    lr : [<00000000>]    psr: 60000093
[  875.524557] sp : c042bea0  ip : c042a000  fp : c042becc
[  875.536004] r10: 0000e0cd  r9 : 00000000  r8 : 16027ae8
[  875.541210] r7 : 0000036b  r6 : 00000000  r5 : 4042a000  r4 : 60000093
[  875.547717] r3 : 00000000  r2 : 00000000  r1 : 00000000  r0 : 00000000
[  875.554230] Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
[  875.561610] Control: 10c5787d  Table: 1c0ec019  DAC: 00000017
[  875.567337] Process swapper (pid: 0, stack limit = 0xc042a2e0)
[  875.573157] Stack: (0xc042bea0 to 0xc042c000)
[  875.577490] bea0: 00000002 00000080 00000000 c00735e4 c0036c9c c04d4b40 c00735e4 1d34ce80
[  875.585737] bec0: c042bef4 c042bed0 c02fcef8 c0090dbc 00000002 00000000 c00735e4 c04d6010
[  875.593984] bee0: 0000e0cd c04d4b40 c042bf3c c042bef8 c00735e4 c02fcebc c0082d34 c006d870
[  875.602230] bf00: c042bf60 00000001 c002e518 c045e1a8 c042bf3c 0000e0cd c04d49a0 1d34ce80
[  875.610477] bf20: 0000036b 16027ae8 00000000 0000001f c042bf94 c042bf40 c008b1f8 c00735cc
[  875.618724] bf40: 00000000 c999a0a0 1d9e6627 0000036b 0000e0cd c00622a4 60000013 c042f318
[  875.626970] bf60: 1d9e6627 0000036b 0000001f c002e518 c042a000 c002e518 c045e1a8 16027ae8
[  875.635217] bf80: 510f00f2 0000001f c042bfb4 c042bf98 c002e418 c008b028 c0889a90 c045dd64
[  875.643464] bfa0: c0029ea4 c042ec08 c042bfc4 c042bfb8 c02f76a4 c002e3f0 c042bff4 c042bfc8
[  875.651710] bfc0: c0008bc0 c02f7644 c0008514 00000000 00000000 c0029ea4 00000000 10c5387d
[  875.659957] bfe0: c045e25c c002a2a8 00000000 c042bff8 16008034 c000894c 00000000 00000000
[  875.668204] Backtrace:
[  875.670637] [<c0090db0>] (lock_acquire+0x0/0x74) from [<c02fcef8>] (_spin_lock+0x48/0x58)
[  875.678797]  r6:1d34ce80 r5:c00735e4 r4:c04d4b40
[  875.683397] [<c02fceb0>] (_spin_lock+0x0/0x58) from [<c00735e4>] (get_next_timer_interrupt+0x24/0x224)
[  875.692684]  r5:c04d4b40 r4:0000e0cd
[  875.696244] [<c00735c0>] (get_next_timer_interrupt+0x0/0x224) from [<c008b1f8>] (tick_nohz_stop_sched_tick+0x1dc/0x434)
[  875.707004] [<c008b01c>] (tick_nohz_stop_sched_tick+0x0/0x434) from [<c002e418>] (cpu_idle+0x34/0x6c)
[  875.716204] [<c002e3e4>] (cpu_idle+0x0/0x6c) from [<c02f76a4>] (rest_init+0x6c/0x80)
[  875.723937]  r7:c042ec08 r6:c0029ea4 r5:c045dd64 r4:c0889a90
[  875.729577] [<c02f7638>] (rest_init+0x0/0x80) from [<c0008bc0>] (start_kernel+0x280/0x2e4)
[  875.737824] [<c0008940>] (start_kernel+0x0/0x2e4) from [<16008034>] (0x16008034)
[  875.745197] Code: e58dc008 e59bc00c e58dc00c ebfffdc6 (e595300c)
[  875.751446] Kernel panic - not syncing: Fatal exception

1.
the below is the analysis result:
[  875.497504] Unable to handle kernel paging request at virtual address 4042a00c
the whole description of the panic.

2.
Modules linked in: dhd
it just means there is one module whose name is dhd.ko while panic happens.
not means the panic is in this module.

3.
Process swapper (pid: 0, stack limit = 0xc042a2e0)
pid of the panic process is 0.

4.
[  875.517877] PC is at lock_acquire+0x60/0x74
[  875.522024] LR is at 0x0
[  875.524544] pc : [<c0090e10>]    lr : [<00000000>]    psr: 60000093
[  875.524557] sp : c042bea0  ip : c042a000  fp : c042becc
[  875.536004] r10: 0000e0cd  r9 : 00000000  r8 : 16027ae8
[  875.541210] r7 : 0000036b  r6 : 00000000  r5 : 4042a000  r4 : 60000093
[  875.547717] r3 : 00000000  r2 : 00000000  r1 : 00000000  r0 : 0000000

the log shows the value of ARM registers.
0x74 means the whole length of lock_acquire() function in disassemble format.
0x60 means the key point while panic happens.
gdb the output file which include lock_acquire() function and then disassemble the function to make sure which line has issue.
for example.
arm-linux-gdb lockdep.o
disassemble lock_acquire

5.
[  875.573157] Stack: (0xc042bea0 to 0xc042c000)
[  875.577490] bea0: 00000002 00000080 00000000 c00735e4 c0036c9c c04d4b40 c00735e4 1d34ce80
[  875.585737] bec0: c042bef4 c042bed0 c02fcef8 c0090dbc 00000002 00000000 c00735e4 c04d6010
[  875.593984] bee0: 0000e0cd c04d4b40 c042bf3c c042bef8 c00735e4 c02fcebc c0082d34 c006d870
[  875.602230] bf00: c042bf60 00000001 c002e518 c045e1a8 c042bf3c 0000e0cd c04d49a0 1d34ce80
[  875.610477] bf20: 0000036b 16027ae8 00000000 0000001f c042bf94 c042bf40 c008b1f8 c00735cc
[  875.618724] bf40: 00000000 c999a0a0 1d9e6627 0000036b 0000e0cd c00622a4 60000013 c042f318
[  875.626970] bf60: 1d9e6627 0000036b 0000001f c002e518 c042a000 c002e518 c045e1a8 16027ae8
[  875.635217] bf80: 510f00f2 0000001f c042bfb4 c042bf98 c002e418 c008b028 c0889a90 c045dd64
[  875.643464] bfa0: c0029ea4 c042ec08 c042bfc4 c042bfb8 c02f76a4 c002e3f0 c042bff4 c042bfc8
[  875.651710] bfc0: c0008bc0 c02f7644 c0008514 00000000 00000000 c0029ea4 00000000 10c5387d
[  875.659957] bfe0: c045e25c c002a2a8 00000000 c042bff8 16008034 c000894c 00000000 00000000
it contains the context of the Stack from 0xc042bea0 to 0xc042c000.

6.
[  875.668204] Backtrace:
[  875.670637] [<c0090db0>] (lock_acquire+0x0/0x74) from [<c02fcef8>] (_spin_lock+0x48/0x58)
[  875.678797]  r6:1d34ce80 r5:c00735e4 r4:c04d4b40
[  875.683397] [<c02fceb0>] (_spin_lock+0x0/0x58) from [<c00735e4>] (get_next_timer_interrupt+0x24/0x224)
[  875.692684]  r5:c04d4b40 r4:0000e0cd
[  875.696244] [<c00735c0>] (get_next_timer_interrupt+0x0/0x224) from [<c008b1f8>] (tick_nohz_stop_sched_tick+0x1dc/0x434)
[  875.707004] [<c008b01c>] (tick_nohz_stop_sched_tick+0x0/0x434) from [<c002e418>] (cpu_idle+0x34/0x6c)
[  875.716204] [<c002e3e4>] (cpu_idle+0x0/0x6c) from [<c02f76a4>] (rest_init+0x6c/0x80)
[  875.723937]  r7:c042ec08 r6:c0029ea4 r5:c045dd64 r4:c0889a90
[  875.729577] [<c02f7638>] (rest_init+0x0/0x80) from [<c0008bc0>] (start_kernel+0x280/0x2e4)
[  875.737824] [<c0008940>] (start_kernel+0x0/0x2e4) from [<16008034>] (0x16008034)
it means function call stack. from the above log, the call stack is:
start_kernel() -> rest_init() -> cpu_idle() -> tick_nohz_stop_sched_tick() -> get_next_timer_interrupt() -> _spin_lock() -> lock_acquire().

7.
[  875.745197] Code: e58dc008 e59bc00c e58dc00c ebfffdc6 (e595300c)
it means the latest instruction.
e58dc008     str    ip, [sp, #8]
e59bc00c     ldr    ip, [fp, #12]
e58dc00c     str    ip, [sp, #12]
ebfffdc6        ......

 

http://blogold.chinaunix.net/u3/103613/showart_2068613.html

Kernel:panic/crash分析 文章目录问题entry_SYSCALL_64_after_hwframedo_syscall_64 问题 Hardware name: VMware. Inc. VMware Virtual Platform/440BX/Desktop Reference Platform, BIOS 6.00 12/12/2018 Call Trace: dump_stack+0x6b/0x83 do_exit.cold+0xb3/0xb3 do_group_exit+0x33/0xa0 __x64_sys_exit_g 阅读详情

相关推荐

Score Matching(得分匹配)

Score Matching(得分匹配)是一种统计学习方法,用于估计概率密度函数的梯度(即得分函数),而无需知道密度函数的归一化常数。这种方法由Hyvärinen在2005年提出,主要用于无监督学习,特别是在密度估计和生成模型中。

weixin_39699362的博客 2167

U-boot 移植问题解析

 问题一:Load Address  、Entry Point 设置问题     Starting kernel ...     undefined instruction     pc : [] lr : []     sp : 33f4fc10 ip : 00000001 fp : 33f4fca4     r10: 33f9e70c r9 : 33ece9cd r8 : 33f4ffdcc 

学习记录 1187

可微编程:当深度学习遇见物理定律,重塑科学计算新范式

本文探讨了可微编程如何将深度学习与物理定律相结合,重塑科学计算范式。通过自动微分技术,它将物理方程融入可微计算图,使模型在数据驱动的同时遵守物理约束。文章以神经常微分方程为例,阐述了其在连续系统建模、科学模拟器优化等领域的应用,并分析了当前面临的挑战与最佳实践路径。

weixin_29056145的博客 134

kernel panic log

kernel panic log

qq_41483419的博客 649

网络虚拟化介绍(OVS、DVS)

网络虚拟化概念网络虚拟化就是把网络层的一些功能从硬件中剥离出来,建立新的网络虚拟层;该虚拟层可以接管网络服务和配置,实现网络服务与物理层的解耦,打破物理资源限制;通过网络虚拟层能够在一个物理网络上模拟出多个逻辑网络,并且多用户在逻辑网络上相互隔离,保证网络安全网络虚拟化的特点隔离性:不同租户的流量相互之间不能互访;但是IP/MAC地址都可以独立规划可移动性:虚拟机可以跨二层/三层迁移,甚至可以跨广域网迁移(迁移前后虚拟机Vlan和IP地址都不会发生变化)可扩展性:逻辑网络的规模和数量可扩展。

m0_49864110的博客 1万+

Oracle ERP EBS R12 GL总帐业务方案 系统操作

本文档是Oracle ERP系统的总账管理模块使用手册,主要包含以下内容:1.系统架构设计,详细介绍多组织架构、会计科目设置等核心概念;2.总账日常操作流程,包括凭证录入、审核、过账等全流程管理;3.特殊业务处理,涵盖预算控制、内部往来、合并报表等专项功能;4.期末处理,说明月结、年结的操作步骤;5.系统设置指南,提供会计科目表、权限控制等配置说明;6.附录包含各业务模块的分录示例和系统操作图标说明。本手册适用于财务人员学习和使用Oracle ERP总账系统,重点讲解系统功能要点和实操步骤。

anpeng2019的博客 1888

Linux驱动调试之段错误分析_根据pc值确定出错的代码位置

Linux驱动调试之段错误分析_根据pc值确定出错的代码位置

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 2449

jdbc从入门到精通(全)

前言 Java语言连接数据库(Java DataBase Connectivity) 面向接口/抽象编程(降低程序的耦合度,提高程序的扩展力)类似多态机制

码农研究僧的博客 1757

Linux kernel oops panic 调试技巧

http://blog.chinaunix.net/uid-291731-id-3142689.html 最近在调试USB驱动的过程中,偶尔会出现拔出USB线缆时kernel会有oops错误,以下是对kernel oops错误调试的简单记录,该方法也适用于panic错误。 oops错误日志信息: Unable to handle kernel NULL poi

老鹏 5162

一篇文章足够你学习Bluez,提供史上最全的Bluez教程,让你告别Bluez从入门到放弃

Bluez是真的难,说“入门到放弃”真的毫不夸张,Bluez的学习曲线陡峭,要求对Linux 系统/驱动概念、D-Bus 通信和蓝牙协议都有要求,加上网络上其实没有一个完整的介绍Bluez系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员,都有不小的难度。

朝气蓬勃 2535

java项目反编译工具记录,共计6个工具

java项目反编译工具记录,共计6个工具

橙-极纪元-JJYCheng 1801

kernel panic 分析解决方法

1何谓OOPS Oops是美国人比较常有的口语。就是有点意外,吃惊,或突然的意思。“Oops”并不是很严重,正如在Britney Spears的“Oops I Did It Again”那首歌的歌词中,也是一种轻描淡写,有时含有抱歉的意思。 http://v.youku.com/v_show/id_XMTM0ODgxMDYw.html 对于Linux内核来说,Oops就意外着内核出了异常,此时会将产生异常时CPU的状态,出错的指令地址、数据地址及其他寄存器,函数调用的顺序甚至是栈里面的内容都打印出来..

洋葱专栏-有灵魂的程序员 6317

Zemax与Matlab交互:双胶合优化详细流程

Zemax与Matlab交互:双胶合优化详细流程

weixin_72050316的博客 629

kernel panic分析定位

1、经典博文 序号 名称 链接 1 kernel panic , Oops 等cpu异常的分析与定位 https://www.jianshu.com/p/db13bddf4bc0 2 内核调试技巧–kernel panic https://www.xuebuyuan.com/1609308.html 3 kernel panic 分析解决方法 http://blog.chi...

卓越之路 3126

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

wifi driver中的一次kernel panic分析

软件开发过程中,最怕遇见kernel panic的错误,本文记录了一次发生在wifi driver中的kernel panic的简要分析过程。 问题描述 使用VERIWAVE下APP进行无线多用户连接测试,包括关联+认证+流量+去关联过程。配置63个clients,wep加密,第一次测试能正确完成,第二次测试时AP出现kernel panic错误。系统重启后同样操作必现

cfy_ansondrew的专栏 2889

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Linux Kernel Panic 分析机制全解:一篇读懂从原理到实战

本文全面解析Linux Kernel Panic机制,从原理到实践提供系统化解决方案。首先阐释Kernel Panic本质是内核遇到致命错误时主动终止运行的保护机制,列举空指针引用、内存非法访问等典型触发场景。文章详细说明内核panic处理流程,并给出5步调试方法论:获取崩溃信息、复现步骤、使用crash工具分析、配置早期打印、启用kdump机制。针对嵌入式开发,特别介绍Yocto环境下如何配置调试支持。最后整理典型问题解答,强调搭建调试环境、掌握crash工具和熟悉常见panic场景的重要性。本文为Lin

Interview_TC的博客 3128

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Kernel panic 信息分析方法(转自高人)

Kernel  panic  息分析方法(转自高人)  Oops: 0000 [#1] PREEMPT SMP               Modules linked in: capidrv kernelcapi isdn slhc ipv6loop dm_multipath snd_ens1371 gameport snd_rawmidi snd_ac97_codec

leopard_ray的专栏 5860

Kernel panic 信息分析方法

Kernel panic 信息分析方法 Oops: 0000 [#1] PREEMPT SMP               Modules linked in: capidrv kernelcapi isdn slhc ipv6loop dm_multipath snd_ens1371 gameport snd_raw

tuxiaobing1983的专栏 569

kernel panic分析

Linux kernel panic是很难定位和排查的重大故障,一旦系统发生了kernel panic,相关的日志信息非常少,而一种常见的排查方法—重现法–又很难实现,因此遇到kernel panic的问题,一般比较头疼。 没有一个万能和完美的方法来解决所有的kernel panic问题,这篇文章仅仅只是给出一些思路,一来如何解决kernel panic的问题,二来可以尽可能减少发生kernel

张文达的博客 1402

[crash分析] Kernel panic - not syncing: Hard LOCKUP

KERNEL: /usr/lib/debug/lib/modules/3.10.0-514.26.2.el7.x86_64/vmlinux DUMPFILE: vmcore [PARTIAL DUMP] CPUS: 2 DATE: Sun Nov 17 05:56:07 2019 UPTIME: 1 days, 00:22:05 ...

4147

[Mac OS X] 内核、驱动调试 - Kernel Debug Kit---kernel panic 调试&分析

苹果官方文档:Technical Note TN2063: Understanding and Debugging Kernel Panics 阅读上述文档,就是可以调试kerne panic (也就是Mac 上的死机),找到死机是死在内核空间的哪一个点上,死在哪一行代码上。当

Ivan Young的专栏 6810

kernel panic问题分析(一)

kernel panic 分析解决方法 kernel panic 表示 Linux kernel 走到了一个不知道该怎么走下一步的状况,一 旦到这个情况,kernel就尽可能把它此时能获取的全部信息都打印出来,至于能打印出多少信息。 下面讲解几种用于查找出错函数定位的方法: 1. 查看panic现象 首先看一下出错的kernel panic 现象,下面是一个kernel panic的出错log: 2. 分析定位 如上崩溃信息,可知发生崩溃的函数为 rb_init_debugfs, 崩溃的地址为 0x8

bingyu的博客 3345

深入理解 Linux Kernel Panic:常见原因与实战分析

栈(stack)是函数调用的临时变量与返回地址的保存区,属于线程私有区域,位于内存高地址区域。栈溢出(stack overflow):函数递归太深,或局部变量太大,把整个栈顶端撑爆。内核的栈大小通常只有 4K~16K,很容易溢出。栈空(stack underflow):函数调用过程中栈帧未按预期压栈或返回,导致返回地址丢失,从而“跳”到不可预测位置。递归:函数调用自身,适合处理树形、图结构等自包含数据结构;若递归终止条件写错,会形成“死递归”,造成栈溢出。迭代:使用while或for。

Interview_TC的博客 2596
上一篇: Android 调试.so库文件
下一篇: Android权限不够问题
eustoma
博客等级 码龄18年 79粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值