加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

不再惧怕Linux内核panic (一)

05/05 10:08
511
阅读需 11 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

前言

曾经我看到Linux kernel panic,我也会很panic,感觉无从下手,但经过不断学习和摸索积累后,目前的我已经不再panic了,其实内核panic后打印的信息通常都会包含一系列关键信息,会帮助我们进一步分析诊断导致系统崩溃的根本原因。

今天就先认识一下panic信息。

以下是一个ARM64架构Linux kernel panic打印信息示例:

Kernel panic - not syncing: Fatal exception in interrupt handler
CPU: 0 PID: 250 Comm: irq/10000000-mmc0 Not tainted 5.¾.0-rc1 #1
Hardware name: Generic AArch64 (DT)
pstate: 80000005 (Nzcv daif -PAN -UAO)
pc : 0000000000000000 lr : 0000000000000000
sp : ffff800000093e20 x29: ffff800000093e00
x28: 0000000000000000 x27: 0000000000000000
x26: 0000000000000000 x25: 0000000000000000
x24: 0000000000000000 x23: 0000000000000000
x22: 0000000000000000 x21: 0000000000000000
x20: 0000000000000000 x19: 0000000000000000
x18: 0000000000000000 x17: 0000000000000000
x16: 0000000000000000 x15: 0000000000000000
x14: 0000000000000000 x13: 0000000000000000
x12: 0000000000000000 x11: 0000000000000000
x10: 0000000000000000 x9 : 0000000000000000
x8 : 0000000000000000 x7 : 0000000000000000
x6 : 0000000000000000 x5 : 0000000000000000
x4 : 0000000000000000 x3 : 0000000000000000
x2 : 0000000000000000 x1 : 0000000000000000
x0 : 0000000000000000 Call trace:
show_stack+0x14/0x20
dump_stack_lvl+0x40/0x58
dump_stack+0x.png
panic+0x17c/0x328
do_exit+0x2b8/0x45c
do_group_exit+0x3a/0xa0
SyS_exit_group+0x14/0x20
el0_svc_naked+0x28/0x2c
Modules linked in: [list of loaded modules]
---[ end trace 123456789abcdef0 ]---

Kernel panic - not syncing: Fatal exception in interrupt handler
Kernel Offset: 0x0000000000000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
---[ end Kernel panic - not syncing: Fatal exception in interrupt handler ]---

针对以上示例信息说明如下:

标题与原因

Kernel panic - not syncing: Fatal exception in interrupt handler

指明发生了内核恐慌(kernel panic),原因是遇到了致命异常(Fatal exception),且该异常发生在中断处理程序中。

CPU与进程信息

CPU: 0 PID: 250 Comm: irq/10000000-mmc0 Not tainted 5.¾.0-rc1 #1

表明出错的CPU核心是0号,引发panic的进程ID为250,进程名为irq/10000000-mmc0,表示与MMC设备相关的中断处理程序。内核版本为5.¾.0-rc1,编译构建编号为#1,并且内核未被外部代码污染(Not tainted)。

硬件信息

Hardware name: Generic AArch64 (DT)

说明运行在Generic AArch64硬件平台上,并使用设备树(Device Tree, DT)作为硬件描述方式。

处理器状态寄存器(PSTATE)值

pstate: 80000005 (Nzcv daif -PAN -UAO)

给出了当前处理器状态寄存器的值,反映了处理器的各种模式和标志位状态。在这个例子中,N、Z、C、V标志分别代表负数、零、进位、溢出,daif字段表示调试、中断、故障、同步异常禁止位,PAN和UAO标志分别与数据对齐异常和用户地址中止有关。

程序计数器(PC)、链接寄存器(LR)、栈指针(SP)与寄存器备份

接下来是一系列寄存器的值,包括程序计数器(PC)、链接寄存器(LR)、栈指针(SP)以及其他通用寄存器(x0-x30)。这些信息值有助于定位发生异常时的指令位置和当时的上下文环境。

Call trace

Call trace:
show_stack+0x14/0x20
dump_stack_lvl+0x40/0x58
dump_stack+0x.png
panic+0x17c/0x328
do_exit+0x2b8/0x45c
do_group_exit+0x3a/0xa0
SyS_exit_group+0x14/0x20
el0_svc_naked+0x28/0x2c
Modules linked in: [list of loaded modules]

展示了从异常发生点到panic函数调用的函数调用链,包括每个函数的地址偏移和函数总长度。这会有助于追踪导致panic的具体执行路径。此外,还列出了可能与问题相关的已加载模块(Modules linked in)。

Kernel Offset & Relocation Range

Kernel Offset: 0x0000000000000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)

提供内核在物理内存中的加载偏移量,以及内核可重定位范围,有助于分析理解内核映像在内存中的布局。

结束标记

---[ end trace 123456789abcdef0 ]---

Kernel panic - not syncing: Fatal exception in interrupt handler
Kernel Offset: 0x0000000000000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
---[ end Kernel panic - not syncing: Fatal exception in interrupt handler ]---

重复了panic的原因和内核相关信息,作为结束标记,便于识别panic信息的完整边界。

总结

综上所述,以Linux ARM64 panic打印信息为例看,其实包含了较多的诊断信息,可以帮助我们分析崩溃原因、定位错误代码位置,并结合其他调试手段(如内核转储、日志记录等)来定位和解决问题。所以,以后看到类似这种Linux panic信息,首先自己坚决不能panic!要勇敢面对!才会get到后续的精彩知识!

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
S29AL016J70TFI020 1 Cypress Semiconductor Flash, 1MX16, 70ns, PDSO48, TSOP-48
$10.3 查看
SST25VF080B-50-4I-S2AE-T 1 Microchip Technology Inc IC FLASH 2.7V PROM, Programmable ROM

ECAD模型

下载ECAD模型
$1.45 查看
SN74LVC1G08DCKT 1 Rochester Electronics LLC LVC/LCX/Z SERIES, 2-INPUT AND GATE, PDSO5, GREEN, PLASTIC, SC-70, 5 PIN
$0.94 查看

相关推荐

电子产业图谱

记录和分享C/C++、Linux、ARM、Android、IoT相关知识。技术相伴于生活和成长,愿你我永为少年,心中有火,眼中有光,始保热情。