调试内核oops

Linux内核Oops错误解析与实战调试技巧 本文深入解析Linux内核Oops错误机制,提供从日志解读到实战调试的完整指南。通过拆解错误码、PC指针和栈回溯等关键信息,并结合反汇编工具精准定位问题代码行。文章还介绍了系统宕机时的日志捕获方法及常见错误模式排查思路,是Linux内核开发者与系统运维人员处理系统崩溃的实用手册。 阅读详情

第一种方式,通过make menuconfig开启debug选项,利用gdb定位具体出错位置。

cd /kernel_path //内核代码目录

gdb vmlinux-2.6.30.10

l *0x12345678    
字符L,应该回显示出错的地方。

sip地址=12345678


第二种:查看内核的出错信息:

tail /var/log/message


第三种:


通过汇编定位panic的c代码位置
1 根据panic打印出来的栈信息找到出现问题的函数和panic出现的具体位置。
2 找到该函数所在的.o文件,使用命令objdump -D *.o > www ,反编译出汇编代码。
3 根据文件名,找到出现问题的汇编位置,通常这样经过优化的汇编很难跟踪到具体的C代码位置
4 将*.o删除,使用make V=1进行编译,找出编译该文件的具体编译命令,如:
  gcc -m32 -Wp,-MD,net/bridge/.br_forward.o.d  -nostdinc -isystem /usr b/gcc/i686-pc-linux-gnu/4.3.2/include -D__KERNEL__ -Iinclude  -include include nux/autoconf.h -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Os -pipe -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2  -march=i686 -mtune=pentium4 -mtune=generic -ffreestanding -maccumulate-outgoing-args -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -Iinclude/asm-x86/mach-generic -Iinclude/asm-x86/mach-default -fomit-frame-pointer -g  -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign     -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(br_forward)"  -D"KBUILD_MODNAME=KBUILD_STR(bridge)" -c -o net/bridge/br_forward.o net/bridge/br_forward.c

5 把"-c -o net/bridge/br_forward.o"改成 -S -g ,进行编译,这样在当前目录下会生成一个br_forward.s的文件
6 这样生成的汇编代码和原来的C代码关联性较强,比如loc 0 111 0中,111表示下面的汇编对应的c代码的行数。
7 针对两个汇编代码进行对比查找到出现问题的代码行。


LINUX内核调试相关--oops信息的… LINUX内核调试相关--oops信息的定位2 收藏 Ø  实验目的与意义 1 、掌握printk 的使用、设置及实现原理,理解分级别进行打印log 信息的实现方法 2 、掌握如何分析oops 的方法 3 、掌握strace 工具的移植和使用方法   Ø  基本原理和方法 1 、请回顾栈的工作原理,尤其是栈帧的作用 2 、请对照printk 的源代码来进行printk 相关实验,并在实验 阅读详情

相关推荐

linux内核debug(一)oops

本章开始以下面这篇文章为主体,介绍内核调试手段,本文主要介绍如何调试oops

文艺小少年的博客 379

Linux内核的Oops

什么是Oops?从语言学的角度说,Oops应该是一个拟声词。当出了点小事故,或者做了比较尴尬的事之后,你可以说"Oops",翻译成中国话就叫做“哎呦”。“哎呦,对不起,对不起,我真不是故意打碎您的杯子的”。看,Oops就是这个意思。 在Linux内核开发中的Oops是什么呢?其实,它和上面的解释也没什么本质的差别,只不过说话的主角变成了Linux。当某些比较致命的问题出现时,我们的Linux内核...

weixin_30402343的博客 831

25、内核Oops诊断与调试指南

本文详细介绍了Linux内核Oops的诊断与调试方法,涵盖内核脚本错误报告流程、中断上下文中Oops的调试技巧、ARM架构下Oops的处理方式,以及相关辅助工具的使用。通过实际案例和步骤演示,帮助开发者快速定位和解决内核模块引发的严重异常问题。

water的专栏 75

[monitor] 7. Linux几种内核故障定位方法

Linux系统崩溃有kdump机制来记录,但是由于kdump的文件内容一般很大,在嵌入式系统一般不使用,嵌入式系统一般使用把printk重定位到黑匣子中的方法来记录异常,另外还需要其他的故障检测方法来完善系统所有场景下的异常检测。除了系统的一些通用方法,我们在定位系统死机、复位故障时需要更多的手段来搜集信息,一般嵌入式系统采取的手段有: 1、创建内存、flash黑匣子,把故障点、函数调用栈等信息在复

pwl999的博客 4244

26、Linux内核调试:Oops错误解析与锁调试

本文深入解析了Linux内核调试中的Oops错误和锁调试相关内容。首先介绍了Oops错误的解析方法、实际案例、相关工具及日志获取替代方案,帮助开发者理解并处理内核崩溃问题。随后详细探讨了锁调试的核心概念,包括数据竞争的定义、检测与修复,以及如何正确使用锁机制保护关键代码路径。文章还介绍了KCSAN工具的使用方法,并通过实际案例分析了锁使用的常见错误。最后提供了锁调试的最佳实践,旨在提升内核开发的正确性和稳定性。

e1f2g的博客 134

RK3588平台开发系列讲解(内核调试篇)oops分析

📢当系统内核发生`kernel panic`的时候,系统会打印出`oops`信息,本篇主要介绍如何根据`oops`定位问题。

内核笔记 5726

linux内核定位方法总结1 ECC hung-task和原子操作 反汇编调用栈

1 CPU支持ECC的话打开ECC,并且在系统异常中断的时候打印出来,因为内存多bit ECC会导致系统异常。 MCHECK_EXCEPTION(0x200, Machine, machine_exception) =>static struct cpu_spec __initdata cpu_specs[] /* e500v2 */ .machine

shipinsky的博客 790

RK3588平台深度内核调试:解析oops分析与调试技巧

通过本文,我们深入讲解了在RK3588平台上进行oops分析与调试的技巧。Kernel Oops作为内核发生错误时的关键信息,通过详细的分析和合理的调试工具的使用,可以有效提高系统的稳定性和可靠性。希望本文对于正在进行RK3588平台开发的开发者有所启发。在实际项目中,巧妙运用内核配置和调试工具,将有助于更快地解决内核问题。如果您有任何问题或想要分享自己的经验,欢迎在评论区留言。

一直在水些技术小文 932

慢慢欣赏linux 内核定位手段printk

%pF可打印函数指针的函数名和偏移地址,%pf只打印函数指针的函数名,不打印偏移地址 所以只要内核能够编译和运行,找不到挂接的函数指针都无处遁形。 printk 使用方法 https://haohetao.iteye.com/blog/1147791 ...

shipinsky的博客 360

别再混淆了!一文彻底搞懂STM32的BootROM、BootLoader和启动模式(附启动流程图)

本文深入解析STM32的启动机制,详细讲解BootROM、BootLoader与启动模式的区别与联系,并提供实战指南。通过清晰的启动流程图和配置示例,帮助开发者彻底理解STM32启动流程,解决常见的启动问题,提升嵌入式开发效率。

weixin_33728268的博客 538

OpenMV识别颜色源码

【代码】OpenMV识别颜色源码。

dxt258013的博客 403

Linux内核OOPS调试

以前在写驱动的时候 ,遇到比较多的kernel panic oops 问题,然后 问一些 同事 ,比较多的回答都是加 printk,其实用 GDB 的中的一个功能是能很方便地调试这些问题的。整理了一下,把自己给一家培训学校写的课件 贴上来。•第一章 调试 • •1.1. 工作环境配置 • •1 )安装好编译用的 kernel-source :RedHat :kernel-devel-xxx.rpm

gowyz的专栏 1万+

小米路由器安装Misstar tools 和MIXBOX

1.该教程适用于如下路由器: 小米路由器1代硬盘版(R1D) 小米路由器mini(R1CM) 全新小米路由器硬盘版(R2D) 小米路由器3(R3) 小米路由器3G(R3G) 小米路由器Pro(R3P) 小米路由器HD(R3D) 2.Misstar2.0在线安装 方法如下: 1.根据路由器对应文件解压文件,把解压目录(比如小米3路由器为R3)和offline_install.sh到U盘根目录,并插入路由器 2.ssh登录后,cd到U盘的目录,比如小米3路...

wybarcelona的博客 2万+

linux内核oops调试跟踪

当内核出现类似用户空间的 Segmentation fault 时,oops会被打印到控制台和写入内核log缓冲区。 下面来制造一个oops,程序如下: #include <linux/init.h> #include <linux/module.h> static int __init test_init(void) { char *tmp = NULL...

chengwei_peng 2569

中科蓝讯Downloader配置实战:从软硬开关机到ANC降噪的完整指南

本文提供了中科蓝讯Downloader工具的详细配置实战指南。内容涵盖从基础的软硬开关机选择与配置,到核心的EQ音效调试、触摸按键与入耳检测优化,以及高阶的ANC降噪与电源管理设置。旨在帮助开发者快速掌握关键配置项,高效完成蓝牙耳机产品的功能调试与优化。

s4t5u6v7的博客 508

Power domain 划分该如何下手

假如PD1比PD3更always on的话,我们只需要插入普通buffer即可,因为PD3 on,PD1也肯定是ON,PD1 off,PD3肯定时off,PD1能cover PD3的电源情况,因此使用普通buffer也可,但是处于省电角度,我们还是使用AO buffer;在我们做多power domain时,在切分power domain时,需要谨慎,稍有不慎,就会出现congestion以及timing问题,那问题来了,我们在切分power domain时有什么考究么,今天小编就和大家一起讨论讨论。

芯冰乐 207

一文搞懂Linux内核Oops调试方法

常在河边走,哪能不湿鞋。用Linux,总有死机的时候,如果运气好,会看到一些所谓”Oops”信息(在屏幕上或系统日志中),Oops这个英文单词的意思是“哎呀”,当内核出错时(比如访问非法地址),输出的信息就成为Oops信息,Oops可以看成是内核级的Segmentation Fault。内核开发比用户空间开发更难的一个因素就是内核调试艰难。内核错误往往会导致系统宕机,很难保留出错时的现场,调试内核的关键在于你的对内核的深刻理解。

深度Linux 1937

YOLOv12改进策略【卷积层】| SPD-Conv 针对小目标和低分辨率图像的检测任务

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 1779

内核oops错误调试学习笔记

驱动开发中遇到的 oops 问题,导致内核崩溃,log 一般如下形式 Unable to handle kernel paging request at virtual address bfb10be0 pgd = c0003000 [bfb10be0] *pgd=80000040006003, *pmd=47ab3003, *pte=00000000 Internal error: Oo...

我的学习笔记 2914

32、高光谱遥感技术在军事领域的应用解析

高光谱遥感技术凭借其高分辨率和精细光谱分析能力,在军事领域广泛应用于战场详细侦察、伪装目标识别及目标实际温度与发射率的检测,显著提升了目标识别精度和作战支持能力。同时,该技术在内陆水体成分反演、海洋环境监测和农业管理等领域也展现出巨大潜力。尽管面临数据量大、处理复杂、技术融合不足和仪器性能限制等挑战,未来通过人工智能融合、高效算法研发和先进仪器开发,高光谱遥感技术将在多领域实现更深入应用与发展。

blue的专栏 230

如何在 R 中使用 Gamma 分布(附示例)

在统计学中,伽马分布通常用于模拟与等待时间相关的概率。我们可以使用以下函数来处理 R 中的 gamma 分布:dgamma(x, shape, rate) – 找到具有特定形状和速率参数的 gamma 分布的密度函数值。 pgamma(q, shape, rate) – 找到具有特定形状和速率参数的伽马分布的累积密度函数值。 qgamma(p, shape, rate) – 找到具有特定形状和速率参数的 gamma 分布的逆累积密度函数值。 rgamma(n, shape, rate) – 生成 n 个随机

Mrrunsen的博客 4418

深入解析ARM64内核Oops:从原理到实战调试

ARM64 内核 Oops 是内核态非法操作触发的错误报告(如空指针、非法内存访问),调试核心是定位错误指令→分析异常原因→验证修复效果。本文从 “日志解析→工具调试→实战案例” 三个维度,给出一套标准化的 ARM64 Oops 分析调试流程。

qq_26624977的博客 441

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

解锁Linux内核Oops调试:从错误到解决方案

常在河边走,哪能不湿鞋。用Linux,总有死机的时候,如果运气好,会看到一些所谓”Oops”信息(在屏幕上或系统日志中),Oops这个英文单词的意思是“哎呀”,当内核出错时(比如访问非法地址),输出的信息就成为Oops信息,Oops可以看成是内核级的Segmentation Fault。内核开发比用户空间开发更难的一个因素就是内核调试艰难。内核错误往往会导致系统宕机,很难保留出错时的现场,调试内核的关键在于你的对内核的深刻理解。

深度Linux 1570

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

科普文:软件架构之Linux系列【linux内核:Oops调试方法】

​oops_enter() ---> oops_exit() 为Oops 的处理流程,获取console 的log 级别,并通过 __die() 通过对Oops 感兴趣的模块进行callback,打印模块状态不为 MODULE_STATE_UNFORMED 的模块信息,打印PC、LR、SP、x0 等寄存器信息,打印调用栈信息,等等。当出现 oops,并且如果有源码,可以通过 arm 的 arch64-linux-gnu-objdump 工具看到出错的函数的汇编情况,也可以通过 GDB 工具分析。

为无为,事无事,味无味。 1587
上一篇: kernel生成patch
下一篇: IT人如何才能拿高薪
linuxc2008
博客等级 码龄18年 15粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值