尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

linux panic 流程

linux panic 流程
📅 发布时间:2026/7/31 19:32:23

linux panic 流程

Linux Kernel Panic(内核崩溃)的流程大致如下:

1. 发生严重错误

内核检测到无法继续运行的错误,例如:

  • 空指针访问(NULL Pointer Dereference)
  • 页错误(Page Fault)
  • 栈溢出(Stack Overflow)
  • 内核 BUG
  • Watchdog 超时
  • 内核内存损坏
  • 驱动访问非法地址

例如:

 
int *p = NULL;
*p = 100;
 

在内核态执行就可能触发 Oops。


2. 进入异常处理

CPU产生异常:

 
CPU
↓
Exception
↓
IDT
↓
对应异常处理函数
 

例如:

 
#PF   Page Fault
#GP General Protection
#UD Invalid Opcode
 

x86:

 
do_page_fault()
do_general_protection()
 

ARM:

 
do_mem_abort()
do_DataAbort()
 

3. 打印 Oops 信息

内核首先打印:

 
Unable to handle kernel NULL pointer dereference
 

然后输出:

 
PC
LR
SP
Call Trace
寄存器
进程名
CPU号
 

例如:

 
BUG: unable to handle kernel NULL pointer dereference

Call Trace:
driver_open()
misc_open()
do_dentry_open()
path_openat()
 

这一步叫:

 
Kernel Oops
 

4. 判断是否继续运行

内核有个参数:

 
panic_on_oops
 

查看:

 
cat /proc/sys/kernel/panic_on_oops
 

等于0

 
Oops
↓
杀死当前任务
↓
系统继续运行
 

很多服务器这样配置。


等于1

 
Oops
↓
panic()
↓
系统停止
 

5. 调用 panic()

核心函数:

 
panic()
 

源码位置:

 
kernel/panic.c
 

大致流程:

 
panic()
{
禁止抢占

停止其他CPU

输出日志

调用panic notifier

kdump

reboot/halt
}
 

6. 停止其它CPU

SMP系统:

 
CPU0
CPU1
CPU2
CPU3
 

如果CPU1崩溃:

 
CPU1 panic
↓
IPI
↓
停止CPU0 CPU2 CPU3
 

调用:

 
smp_send_stop()
 

7. 触发 Notifier

注册的模块会收到通知:

 
panic_notifier_list
 

例如:

  • watchdog
  • kdump
  • crash logger
  • BMC
 
panic
↓
notifier
↓
保存现场
 

8. Kdump

企业Linux最重要的一步。

 
panic
↓
crash kernel
↓
保存 vmcore
 

流程:

 
正常Kernel
↓ panic
Crash Kernel
↓
保存内存镜像
↓
vmcore
 

文件:

 
/var/crash/vmcore
 

之后可分析:

 
crash vmlinux vmcore
 

9. 输出 Panic 信息

屏幕会看到:

 
Kernel panic - not syncing:
Fatal exception
 

例如:

 
Kernel panic - not syncing:
Attempted to kill init!
 

或者:

 
Kernel panic - not syncing:
VFS: Unable to mount root fs
 

10. 等待重启

参数:

 
cat /proc/sys/kernel/panic
 

例如:

 
10
 

表示:

 
panic
↓
等待10秒
↓
自动重启
 

设置:

 
echo 5 > /proc/sys/kernel/panic
 

整体流程图

 
驱动BUG
↓
CPU异常
↓
Page Fault
↓
do_page_fault()
↓
Oops
↓
panic_on_oops ?
↓
├── 0
│ ↓
│ 杀死进程
│ ↓
│ 系统继续
│
└── 1
↓
panic()
↓
stop_other_cpus()
↓
panic_notifier
↓
kdump
↓
输出日志
↓
reboot/halt
 

如果你以后做 ONU/OLT、嵌入式 Linux、驱动开发面试,面试官经常会问:

  • Oops 和 Panic 的区别?
  • panic() 里面做了什么?
  • kdump 如何抓取 vmcore?
  • ARM Data Abort 如何变成 Kernel Panic?

相关新闻

  • 2026年上半年动物实验外包公司选型:资质与服务挑选指南 - 资讯纵览
  • 计算机毕业设计之jsp仓库管理系统的设计与实现
  • pmacct插件开发与性能调优实战指南

最新新闻

  • 如何用大麦抢票助手轻松搞定热门演出票?3大核心优势解析
  • 常州卖金“避坑”必修课:教你如何识破“损耗率”中的文字游戏 - 一日一测评
  • 如何通过kill-doc实现跨平台文档批量下载与自动化处理?
  • MPV_lazy:如何用预配置方案解决专业播放器的技术门槛问题
  • 2026年无锡本科弱背景名校冲刺:五家优选深度解析 - 科技焦点
  • 如何优雅地克隆/同步数据库到本地?

日新闻

  • 7步掌握KMS智能激活工具:Windows和Office永久激活完整方案
  • 如何在Windows上运行iOS应用:ipasim跨平台模拟器终极指南
  • 2026年重庆工伤赔偿律师口碑推荐:洪家木律师用专业赢得信赖 - 本地品牌推荐

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号