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

发布时间:2026/7/10 15:41:41

举一个例子,处理的系统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/7/10 15:41:41

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

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

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

2026/7/10 15:41:41

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/7/10 15:31:41

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

SimplyTyped类型安全:Nominal类型和类型守卫的深入解析

SimplyTyped类型安全:Nominal类型和类型守卫的深入解析

2026/7/10 17:21:44

SimplyTyped类型安全:Nominal类型和类型守卫的深入解析 【免费下载链接】SimplyTyped yet another Typescript type library for advanced types 项目地址: https://gitcode.com/gh_mirrors/si/SimplyTyped 在TypeScript开发中,类型安全是确保代码…

AI大模型从训练到推理,对应的硬件也将从HBM转向SSD

AI大模型从训练到推理,对应的硬件也将从HBM转向SSD

2026/7/10 17:21:44

大模型分为3个大块: 1)大模型本身:GPT系列(OpenAI),[Claude系列(Google),MAI系列(微软),DeepSeek(深度求索)&…

TMC7300与PIC32MX675F256L在直流电机控制中的高效应用

TMC7300与PIC32MX675F256L在直流电机控制中的高效应用

2026/7/10 17:21:44

1. TMC7300与PIC32MX675F256L的黄金组合解析 在小型有刷直流电机控制领域,TMC7300驱动芯片与PIC32MX675F256L微控制器的组合堪称性价比之王。这套方案特别适合需要精确控制且对功耗敏感的应用场景,比如便携式医疗设备、智能家居执行器或小型机器人关节驱…

iir1社区贡献指南:如何参与这个开源DSP项目开发

iir1社区贡献指南:如何参与这个开源DSP项目开发

2026/7/10 17:21:44

iir1社区贡献指南:如何参与这个开源DSP项目开发 【免费下载链接】iir1 DSP IIR realtime filter library written in C 项目地址: https://gitcode.com/gh_mirrors/ii/iir1 iir1是一个专业的DSP IIR实时滤波器库,采用C编写,支持高性能…

抖音批量下载器:去水印下载与自动化内容管理解决方案

抖音批量下载器:去水印下载与自动化内容管理解决方案

2026/7/10 17:21:44

抖音批量下载器:去水印下载与自动化内容管理解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…

Windows 实时操作系统 RTX64 3.6 学习(二)

Windows 实时操作系统 RTX64 3.6 学习(二)

2026/7/10 17:11:44

VS2015共享内存一、写内存端代码:1. 创建共享内存 hMapFile CreateFileMapping(INVALID_HANDLE_VALUE, // 匿名共享内存(仅用名称标识)NULL, // 默认安全属性PAGE_READWRITE, // 读写…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/9 19:40:56

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/10 6:57:56

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

终极原神FPS解锁器完整指南:轻松突破60帧限制

终极原神FPS解锁器完整指南:轻松突破60帧限制

2026/7/10 0:00:42

终极原神FPS解锁器完整指南:轻松突破60帧限制 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 原神FPS解锁器是一款专为《原神》玩家设计的开源工具,通过先进的Wri…

YesPlayMusic:如何用高颜值播放器重塑你的网易云音乐体验?[特殊字符]

YesPlayMusic:如何用高颜值播放器重塑你的网易云音乐体验?[特殊字符]

2026/7/10 0:00:42

YesPlayMusic:如何用高颜值播放器重塑你的网易云音乐体验?🎵 【免费下载链接】YesPlayMusic 高颜值的第三方网易云播放器,支持 Windows / macOS / Linux :electron: 项目地址: https://gitcode.com/gh_mirrors/ye/YesPlayMusic…

从零实现红黑树:手写C++的set与map容器

从零实现红黑树:手写C++的set与map容器

2026/7/10 0:00:42

1. 项目概述:从STL容器到自研轮子在C的日常开发中,std::set和std::map是我们再熟悉不过的伙伴了。它们一个负责管理不重复的集合,一个负责维护键值对映射,底层都依赖一颗高效的红黑树来保证数据的有序性和操作的性能。但你是否曾想…