内核Oops的几种定位方法
反汇编
报错信息
[ 1.826455] ------------[ cut here ]------------
[ 1.831091] Kernel BUG at c011fef0 [verbose debug info unavailable]
[ 1.837344] Internal error: Oops - BUG: 0 [#1] PREEMPT THUMB2
[ 1.843108] Modules linked in:
[ 1.846158] CPU: 0 PID: 1 Comm: swapper Not tainted 3.10.33 #42
[ 1.852075] task: c2058000 ti: c205a000 task.ti: c205a000
[ 1.857473] PC is at spifb_probe+0xc/0x34c
[ 1.861591] LR is at driver_probe_device+0x75/0x15c
[ 1.866440] pc : [<c011fef0>] lr : [<c013fd45>] psr: a0000133
[ 1.866440] sp : c205bd58 ip : 00000000 fp : c2256b44
[ 1.877908] r10: 00000000 r9 : c2256800 r8 : c04caea8
[ 1.883124] r7 : 00000000 r6 : c2258600 r5 : 00000000 r4 : c2258600
[ 1.889651] r3 : c058f4d8 r2 : 00000000 r1 : c225b8b0 r0 : c2258600
[ 1.896178] Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA Thumb Segment kernel
[ 1.903650] Control: 50c53c7d Table: 00004059 DAC: 00000015
......
[ 3.077561] current proc: 1 swapper
[ 3.081038] -----------------------------------------------------------------------------------
[ 3.089700] pid uTime sTime exec(ns) stat cpu task_struct
[ 3.097111] -----------------------------------------------------------------------------------
[ 3.105804] 1 0 168 1826120108 R(0) 0 c2058000 swapper
[ 3.113612] [<c00198e9>] (unwind_backtrace+0x1/0x88) from [<c0017e5f>] (show_stack+0xb/0xc)
[ 3.121969] [<c0017e5f>] (show_stack+0xb/0xc) from [<c01ed7d5>] (dump_task_info+0xad/0xe8)
[ 3.130265] [<c01ed7d5>] (dump_task_info+0xad/0xe8) from [<c0049f39>] (panic_flush+0x101/0x1c8)
[ 3.138957] [<c0049f39>] (panic_flush+0x101/0x1c8) from [<c004a223>] (crash_kexec+0xb/0x64)
[ 3.147314] [<c004a223>] (crash_kexec+0xb/0x64) from [<c0017feb>] (die+0x18b/0x27c)
[ 3.154969] [<c0017feb>] (die+0x18b/0x27c) from [<c0008267>] (do_undefinstr+0x63/0x100)
[ 3.162960] [<c0008267>] (do_undefinstr+0x63/0x100) from [<c0008ca1>] (__und_svc_finish+0x1/0x40)
[ 3.199835] [<c0008ca1>] (__und_svc_finish+0x1/0x40) from [<c011fef0>] (spifb_probe+0xc/0x34c)
[ 3.208466] [<c011fef0>] (spifb_probe+0xc/0x34c) from [<c013fd45>] (driver_probe_device+0x75/0x15c)
[ 3.217525] [<c013fd45>] (driver_probe_device+0x75/0x15c) from [<c013ee9f>] (bus_for_each_drv+0x3f/0x4a)
[ 3.227010] [<c013ee9f>] (bus_for_each_drv+0x3f/0x4a) from [<c013fca3>] (device_attach+0x3b/0x54)
[ 3.235855] [<c013fca3>] (device_attach+0x3b/0x54) from [<c013f6b3>] (bus_probe_device+0x17/0x60)
[ 3.244731] [<c013f6b3>] (bus_probe_device+0x17/0x60) from [<c013e8a9>] (device_add+0x2c9/0x374)
[ 3.253545] [<c013e8a9>] (device_add+0x2c9/0x374) from [<c016d665>] (spi_add_device+0x95/0xd0)
[ 3.262146] [<c016d665>] (spi_add_device+0x95/0xd0) from [<c016e063>] (spi_register_master+0x3cf/0x40c)
[ 3.271540] [<c016e063>] (spi_register_master+0x3cf/0x40c) from [<c016f4bd>] (asr_spi_probe+0x2a1/0x440)
[ 3.281026] [<c016f4bd>] (asr_spi_probe+0x2a1/0x440) from [<c013fd45>] (driver_probe_device+0x75/0x15c)
[ 3.290450] [<c013fd45>] (driver_probe_device+0x75/0x15c) from [<c013fe85>] (__driver_attach+0x35/0x48)
[ 3.299844] [<c013fe85>] (__driver_attach+0x35/0x48) from [<c013ee45>] (bus_for_each_dev+0x3b/0x46)
[ 3.308872] [<c013ee45>] (bus_for_each_dev+0x3b/0x46) from [<c013f80d>] (bus_add_driver+0x89/0x148)
[ 3.317930] [<c013f80d>] (bus_add_driver+0x89/0x148) from [<c01401af>] (driver_register+0x4b/0x98)
[ 3.326897] [<c01401af>] (driver_register+0x4b/0x98) from [<c0012bb9>] (do_one_initcall+0x69/0xe8)
[ 3.335864] [<c0012bb9>] (do_one_initcall+0x69/0xe8) from [<c047985b>] (kernel_init_freeable+0xab/0x140)
[ 3.345350] [<c047985b>] (kernel_init_freeable+0xab/0x140) from [<c000edd3>] (kernel_init+0x7/0xa0)
[ 3.354408] [<c000edd3>] (kernel_init+0x7/0xa0) from [<c000913d>] (ret_from_fork+0x11/0x34)
[ 3.362735] 53 0 0 1826120108 R(0) 0 c222e900 kworker/u2:1
[ 3.371000] -----------------------------------------------------------------------------------
gdb定位
./owtoolchain/linux64/bin/arm-openwrt-linux-uclibcgnueabi-gdb ./marvell/linux/vmlinux.o
disassemble /m spifb_probe867 static int spifb_probe (struct spi_device *spi)
868 {0x0012e374 <+0>: stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr}0x0012e378 <+4>: mov r6, r0869 struct device_node *np = spi->dev.of_node;
870 struct fb_info *info;
871 struct spifb_par *par;
872 int retval = -ENOMEM;0x0012e45a <+230>: mvn.w r7, #110x0012e5d0 <+604>: mvn.w r0, #110x0012e5d4 <+608>: b.n 0x12e622 <spifb_probe+686>873 struct pinctrl *pinctrl;
874 BUG_ON(np != NULL);0x0012e37a <+6>: ldr.w r3, [r0, #324] ; 0x1440x0012e37e <+10>: cbz r3, 0x12e382 <spifb_probe+14>0x0012e380 <+12>: stmiami r9!, {r1, r9, r10, r11, r12, lr, pc}875 pr_err("enter spifb_probe.\n");
addr2line
报错信息
[KR] Oops at 0xc0laf9fa in kworker/u2:2
addr2line定位
./owtoolchain/linux64/bin/arm-openwrt-linux-uclibcgnueabi-addr2line -C -f -e ./marvell/linux/arch/arm/boot/compressed/vmlinux 0xc0laf9fa
restart
/openwrt/marvell/linux/arch/arm/boot/compressed/head.S:207
函数基地址+偏移
报错信息
PC is at pl031_probe+0x120/0x1e8
addr2line定位
前置条件,内核打开CONFIG_DEBUG_INFO选项,保存
1)根据System.map找到函数基地址,示例中,pl031_probe基地址c0363878 t pl031_probe。
2)需要查询的地址为基地址+偏移地址。示例中崩溃代码虚拟地址为0xc0363878 + 0x120 = 0xc0363998
./owtoolchain/linux64/bin/arm-openwrt-linux-uclibcgnueabi-addr2line -C -f -e ./marvell/linux/arch/arm/boot/compressed/vmlinux 0xc0363998
相关文章:
内核Oops的几种定位方法
反汇编 报错信息 [ 1.826455] ------------[ cut here ]------------ [ 1.831091] Kernel BUG at c011fef0 [verbose debug info unavailable] [ 1.837344] Internal error: Oops - BUG: 0 [#1] PREEMPT THUMB2 [ 1.843108] Modules linked in: [ 1.846158] C…...
外包干了10个月,技术退步明显.......
先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…...
2024美赛C完整思路
首先,题目明确表示可以自行选择额外的玩家信息或其他数据。因此最好找一些其他选手的数据以扩大数据集,与其他选题人作出数据集上的区分。大数据集可以帮助后续的建模实验更准确。 第一问本质就是开发一个评价模型,主要针对运动员得分的时刻…...
Backtrader 文档学习- Broker - Cheat-On-Open
Backtrader 文档学习- Broker - Cheat-On-Open 1.概述 V1.9.44.116增加了Cheat On Open的支持。对于全押的人来说,这似乎是一个必需的功能,用bar的收盘价后进行计算,希望与开盘价相匹配。 当开盘价差距(上涨或下跌,取…...
基于微信浙江杭州某停车场车位预约小程序系统设计与实现 研究背景和意义、国内外现状
博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程ÿ…...
编程流程图
对于复杂流程,我做开发之前一般会 先画一下流程图。特别是多个部门有交叉的情况下: processOn: 这个是我之前 一直的选择,他可以画上面的这些,流程图,网页操作,但是他不是免费的,查过…...
2024年1月29日-2月4日(全面进行+收集虚幻商城免费资源)
从上周发现,一轮轮推就行,每轮多个时间片,每个时间片一门。周一到周五一轮,周六日多轮(比如上下午各一轮)。 周一: 7:09–9:20卫星导航定位(p3)&a…...
【python接口自动化】- 正则用例参数化
🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 …...
Java中的四种线程池详解及使用场景
前言 在Java并发编程中,JDK提供了一套强大的线程池工具类java.util.concurrent.ThreadPoolExecutor以及它的四个便捷工厂方法,这四种线程池分别对应不同的使用场景和特性。下面将详细介绍每种线程池的创建方式、工作原理以及适用场景。 1. CachedThrea…...
Google Chrome 常用的几个参数
1 右键--Google Chrome--属性--目标 参数作用--disable-infobars此计算机将不会再收到 Google Chrome 更新,因为 Windows XP 和 Windows Vista 不再受支持。适用于 xp、2003 的 49.x.x.x 版本。示例1--ingore-certificate-errors忽略证书错误--disable-background-…...
Keil软件某些汉字输出乱码,0xFD问题,51单片机
1. 问题 keil软件输入某些汉字的时候会输出乱码,例如:升、 数 2. 原因 keil软件会忽略0xFD。 升的GB2312编码为 0xc9fd,keil解析为0xc9数的GB2312编码为 0xcafd,keil解析为0xca 关于Keil软件中0xFD问题的说明 3. 解决方案1 …...
自然语言开发AI应用,利用云雀大模型打造自己的专属AI机器人
如今,大模型层出不穷,这为自然语言处理、计算机视觉、语音识别和其他领域的人工智能任务带来了重大的突破和进展。大模型通常指那些参数量庞大、层数深、拥有巨大的计算能力和数据训练集的模型。 但不能不承认的是,普通人使用大模型还是有一…...
Android中 Gradle与 AGP 版本对应关系表
Android Gradle Plugin Version版本Gradle Version版本1.0.0 - 1.1.32.2.1 - 2.31.2.0 - 1.3.12.2.1 - 2.91.5.02.2.1 - 2.132.0.0 - 2.1.22.10 - 2.132.1.3 - 2.2.32.14.12.3.03.33.0.04.13.1.04.43.2.0 - 3.2.14.63.3.0 - 3.3.34.10.13.4.0 - 3.4.35.1.13.5.0 - 3.5.45.4.13.…...
Linux基础知识合集
整理了一下学习的一些关于Linux的一些基础知识,同学们也可以通过公众号菜单栏查看! 一、基础知识 Linux基础知识 Linux命令行基础学习 Linux用户与组概念初识 Linux文件与目录权限基础 Linux中文件内容的查看 Linux系统之计划任务管理 二、服务器管理 Vm…...
跟着pink老师前端入门教程-day13
品优购案例 一、品优购项目规划 1. 品优购项目整体介绍 项目名称:品优购 项目描述:品优购是一个电商网站,我们要完成 PC 端首页、列表页、注册页面的制作 2. 品优购项目学习目的 1. 电商类网站比较综合,里面需要大量的布…...
go语言基础之泛型
1.泛型 泛型是一种独立于所使用的特定类型的编写代码的方法。使用泛型可以编写出适用于一组类型中的任何一种的函数和类型。 1.1 为什么需要泛型 func reverse(s []int) []int {l : len(s)r : make([]int, l)for i, e : range s {r[l-i-1] e}return r }fmt.Println(reverse…...
Vue.js 中子组件向父组件传值的方法
Vue.js 是一款流行的 JavaScript 前端框架,它提供了一套完整的工具和 API,使得开发者可以更加高效地构建交互式的 Web 应用程序。其中,组件化是 Vue.js 的一个核心概念,通过组件化可以将一个复杂的应用程序拆分成多个独立的部分&a…...
数据可视化 pycharts实现地理数据可视化(全球地图)
自用版 紧急整理一点可能要用的可视化代码,略粗糙 以后有机会再改 requirements: python3.6及以上pycharts1.9 数据格式为: 运行结果为: import pandas as pd from pyecharts.charts import Map, Timeline from pyecharts im…...
Mac下查看、配置和使用环境变量
Mac下查看、配置和使用环境变量 一:Mac怎么查看环境变量命令 printenv一:这个命令会一次性列出所有环境变量的键值对,输出格式为: VAR1value1 VAR2value2 ...二: 也可以通过给这个命令加上环境变量名参数࿰…...
虚拟机克隆的三种方式:全量克隆、快速全量克隆、链接克隆
虚拟机克隆的三种方式:全量克隆、快速全量克隆、链接克隆 快速全量克隆 特点:虚拟机启动快、拍平后数据独立 场景:快速发放独立的虚拟机,减少等待虚拟机部署完成时间,能够快速提供用户使用虚拟机。 实现方式:通过对…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...
