举一个例子,处理的系统panic的例子,把分析过程和处理过程都说一下

发布时间:2026/9/8 15:16:54

举一个例子,处理的系统panic的例子,把分析过程和处理过程都说一下
曾经处理过的一个嵌入式Linux(Android BSP)内核Panic为例,详细还原从现象到修复的全过程。这是一个非常经典的**“在原子上下文中休眠”**(Sleeping in Atomic Context)导致的Panic,常见于驱动开发或电源管理调试中。一、 问题现象(现场还原)测试场景:设备正在进行1000次挂起/恢复(Suspend/Resume)压力测试。故障表现:测试进行到第700多次时,设备突然卡死,随后自动重启。串口控制台打印出红字报错,系统崩溃。二、 分析过程(抽丝剥茧)分析内核Panic的核心原则是:不看最后一行的“Kernel panic”,只看倒数第10行到倒数第30行的“Call Trace”(调用栈)。1. 锁定核心报错信息串口日志中首先出现的关键报错不是“Panic”,而是:[ 345.123456] BUG: scheduling while atomic: kworker/u8:2/1876/0x00000002 [ 345.123478] Modules linked in: my_driver(O) [ 345.123489] CPU: 1 PID: 1876 Comm: kworker/u8:2 Tainted: G W O 5.10.43 #1 [ 345.123512] Call trace: [ 345.123525] dump_backtrace+0x0/0x1a0 [ 345.123537] show_stack+0x18/0x28 [ 345.123551] dump_stack+0xd0/0x110 [ 345.123567] __schedule_bug+0x64/0x80 [ 345.123581] __schedule+0x6c0/0x8a0 [ 345.123593] schedule+0x58/0xb8 [ 345.123606] schedule_preempt_disabled+0x18/0x28 [ 345.123620] __mutex_lock.constprop.0+0x1a8/0x4d0 [ 345.123634] __mutex_lock_slowpath+0x18/0x28 [ 345.123647] mutex_lock+0x44/0x50 [ 345.123662] i2c_transfer+0x80/0x100 --- 这里调用了I2C传输 [ 345.123678] my_sensor_read+0x34/0x70 [my_driver] [ 345.123693] my_pm_resume+0x48/0x90 [my_driver] --- 恢复函数中调用 [ 345.123710] dpm_run_callback+0x58/0x1b0 [ 345.123724] device_resume+0xcc/0x230 [ 345.123737] dpm_resume+0x140/0x2d0 [ 345.123751] suspend_devices_and_enter+0x2c0/0x710 [ 345.123765] pm_suspend+0x2d4/0x380 [ 345.123780] state_store+0x7c/0xd8 ... [ 345.124000] Kernel panic - not syncing: Fatal exception in interrupt2. 解读日志(定位根因)BUG: scheduling while atomic:这是内核抛出的致命警告,意思是“在原子上下文中试图调度/休眠”。原子上下文(如持有自旋锁、中断处理程序)中不允许休眠,否则会导致CPU调度紊乱。调用栈分析:从下往上看(Call trace是从底层往顶层打印的),关键路径是:电源管理框架(state_store) → 系统恢复(dpm_resume) → 驱动恢复函数(my_pm_resume) → 读取传感器(my_sensor_read

相关新闻

嵌入式新人怎么读懂一个完整固件项目?

嵌入式新人怎么读懂一个完整固件项目?

2026/8/31 16:15:20

tags: 嵌入式,固件,ARM,单片机,新手入门,代码阅读 category: 嵌入式 type: original series: learning-method 嵌入式新人怎么读懂一个完整固件项目?一句话: 拿到一个上万行的固件项目不要从目录结构开始读。跟着 CPU 上电的执行顺序走——从 main() 的第一个函数调…

Chrome-Charset终极指南:3分钟彻底解决网页乱码问题

Chrome-Charset终极指南:3分钟彻底解决网页乱码问题

2026/9/2 19:10:01

Chrome-Charset终极指南:3分钟彻底解决网页乱码问题 【免费下载链接】Chrome-Charset An extension used to modify the page default encoding for Chromium 55 based browsers. 项目地址: https://gitcode.com/gh_mirrors/ch/Chrome-Charset 你是否曾经遇到…

3A之AE篇5

3A之AE篇5

2026/9/8 15:18:18

在一些特殊场景,如逆光场景、低光照场景等,曝光是怎么处理的?首先需要明确的一点是,到目前为止,AE算法生效都是全局的。这也就意味着,曝光提亮时,全局都是变亮的,曝光压暗时&#xf…

SpringBoot+Netty实战:构建高并发在线客服系统

SpringBoot+Netty实战:构建高并发在线客服系统

2026/9/9 9:34:02

做了几年Java后端,在线客服系统这类项目我前前后后接触过几套,自己也动手写过一版。很多人一听到“客服系统”就觉得是聊天室套壳,实际拆开看,里面涉及的长连接管理、消息推送可靠性、会话分配策略、后端与前端的状态同步&#xf…

StarMade模组开发:StarModAPI架构与实战指南

StarMade模组开发:StarModAPI架构与实战指南

2026/9/9 9:34:02

简介:这是一款面向《StarMade》玩家的Java模组开发框架,帮助有一定Java基础的开发者通过API扩展游戏机制、物品与事件逻辑,适合希望在沙盒游戏中实现自定义玩法的Mod作者。压缩包共41个文件,以30个Java源文件为核心,并…

Python接口自动化测试框架架构设计与落地实践

Python接口自动化测试框架架构设计与落地实践

2026/9/9 9:34:02

从零搭一套能长期用的接口自动化框架,最难的不是写用例,而是把架构想清楚。最近我在给“拾光优选”这个博客项目做接口自动化测试体系,从最初几十个接口的“能跑就行”,到后来逐步演进出清晰的模块边界,这中间踩了不少…

二分查找边界怎么写?从704到34彻底搞懂LeetCode高频题

二分查找边界怎么写?从704到34彻底搞懂LeetCode高频题

2026/9/9 9:34:02

1. 为什么背熟二分模板,笔试时还是写不对边界 聊到二分查找,很多人的第一反应是:“这不简单吗?left、right、while循环、mid更新,五年前就会了。”但真到LeetCode上做题,尤其是一周刷个二三十题的时候&…

Keil MDK编译报错:AC5编译器缺失解决与AC6差异

Keil MDK编译报错:AC5编译器缺失解决与AC6差异

2026/9/9 9:34:02

简介:Arm Compiler 5.06 是 ARM 官方推出的针对 Arm 处理器的编译工具链,适合嵌入式与移动端开发者,用于在 PC 上生成高性能、高代码密度的目标代码,并为后续调试与固化提供可靠基础。该版本面向 Windows x86 平台,压缩…

Spring AI集成PostgreSQL pgvector实战安装指南

Spring AI集成PostgreSQL pgvector实战安装指南

2026/9/9 9:24:02

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/9 1:14:29

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/8 4:55:53

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/8 22:37:26

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

扩散模型图像恢复实战:从DDPM原理到PyQt5可视化系统

扩散模型图像恢复实战:从DDPM原理到PyQt5可视化系统

2026/9/9 0:03:36

简介:面向毕业设计场景的PyQt5扩散模型图像恢复项目,提供完整Python源码与项目说明,适合图像处理、深度学习方向的高年级本科生与研究生参考。项目在模块设计上覆盖图像处理、扩散模型、参数配置、用户界面与结果评估五部分,具体涉…

开关电源环路裕量测试实战:相位裕量与增益裕量详解

开关电源环路裕量测试实战:相位裕量与增益裕量详解

2026/9/9 0:03:36

1. 项目概述:为什么环路裕量测试是电子工程师绕不开的“体检项目”“从零开始的电子工程师生活(6)——环路裕量测试”,这个标题一出来,老电源工程师可能已经下意识摸了摸示波器探头,新同事则大概率在想&…

定时插座芯片怎么选?专用定时IC与单片机MCU选型对比

定时插座芯片怎么选?专用定时IC与单片机MCU选型对比

2026/9/9 0:03:36

拆开市面上不同价位的定时插座,你会发现一个有意思的现象:有的里面躺着一颗黑色的软封装芯片,丝印都看不清;有的则是一块小小的蓝色或绿色PCB,上面赫然印着STM8或者STC的字样。同样叫"定时插座",…

远程协作的工作台整理

远程协作的工作台整理

2026/9/8 4:23:39

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/8 3:19:39

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/8 4:00:23

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…