mtdoops

linux pstore 存储内核崩溃日志 在系统运行过程中,如果内核发生了panic,那么开发人员需要通过内核报错日志来进行定位问题。但是很多时候出现问题的时候没有接调试串口,而报错日志是在内存里面的,重启后就丢失了。所以需要一种方法,可以在系统发生crash时,将crash info保存于非易失存储器中。这对分析那种小概率且没办法抓到现场的问题非常实用,尤其是现在智能互联网的设备逐渐普及的时候,远端的设备可以自己捕抓崩溃日志再通过网络传输到服务器,维护人员就可以根据收集来的日志定位和解决问题,然后通过OTA让设备升级迭代。内核使用。 阅读详情
module_init(mtdoops_init);

static int __init mtdoops_init(void)

向workstruct &cxt->work_erase 注册延期执行函数

    INIT_WORK(&cxt->work_erase, mtdoops_workfunc_erase);
    INIT_WORK(&cxt->work_write, mtdoops_workfunc_write);


注册MTD 使用者,

/**
 *    register_mtd_user - register a 'user' of MTD devices.
 *    @new: pointer to notifier info structure
 *
 *    Registers a pair of callbacks function to be called upon addition
 *    or removal of MTD devices. Causes the 'add' callback to be immediately
 *    invoked for each MTD device currently present in the system.
 */

    register_mtd_user(&mtdoops_notifier);


static struct mtd_notifier mtdoops_notifier = {

    .add    = mtdoops_notify_add,
    .remove    = mtdoops_notify_remove,
};


static void mtdoops_notify_add(struct mtd_info *mtd)

注册kmsg_dump
/**
 * kmsg_dump_register - register a kernel log dumper.
 * @dumper: pointer to the kmsg_dumper structure
 *
 * Adds a kernel log dumper to the system. The dump callback in the
 * structure will be called when the kernel oopses or panics and must be
 * set. Returns zero on success and %-EINVAL or %-EBUSY otherwise.
 */

    cxt->dump.dump = mtdoops_do_dump;
    err = kmsg_dump_register(&cxt->dump);


发生kernel panic/oops, 调用注册的kmsg_dump callback 函数:

static void mtdoops_do_dump(struct kmsg_dumper *dumper,

panic 立即执行MTD 写入

    /* Panics must be written immediately */
    if (reason != KMSG_DUMP_OOPS) {
        if (!cxt->mtd->panic_write)
            printk(KERN_ERR "mtdoops: Cannot write from panic without panic_write\n");
        else
            mtdoops_write(cxt, 1);
        return;
    }

OOPS 向标准工作队列 events 添加workstruct,
    /* For other cases, schedule work to write it "nicely" */
    schedule_work(&cxt->work_write);

scheduler 调度events 线程时,执行

static void mtdoops_workfunc_write(struct work_struct *work)
{
    struct mtdoops_context *cxt =
            container_of(work, struct mtdoops_context, work_write);

    mtdoops_write(cxt, 0);
}



kmsg_dump kmsg_dump提供一种机制在系统挂掉的时候将log转存到其他介质如ramoos或者mtd等.我们以mtd中的使用为例来分析kmsg_dump机制. 使用kmsg_dump之前要先使用kmsg_dump_register来注册一个dumper,用于实际的log写函数. 我们先来看看kmsg_dump_register的定义,只定义了一个dump_list,将系统中所有注册的dump都挂在同一 阅读详情

相关推荐

嵌入式Linux内核崩溃日志保存实战:ramoops vs mtdoops配置详解(附4.19内核适配指南)

本文深入对比了嵌入式Linux系统中ramoops与mtdoops两种内核崩溃日志保存方案,详细解析了其核心原理、硬件依赖与适用场景。重点提供了在Linux 4.19内核上配置ramoops(需预留持久化内存)与mtdoops(需MTD分区)的实战步骤与适配指南,帮助开发者有效捕获现场崩溃信息,提升产品可维护性。

weixin_29294395的博客 138

嵌入式系统linux 记录内存panic

简介 在内存发生panic时,需要把panic的日志保存下来。以方便日后进行分析。 目前有三种记录的方式: kdump; mtdoops; crashlog(这是openwrt特别的功能,正式linux内核中没有) 大家对kdump比较了解。它主要使用于x86系统。因为它使用占用大量内存和硬盘。 mtdoops和crashlog主要用于嵌入式的环境。也只是记录文本日志。 mtdo

刘末的专栏 6117

嵌入式Linux中pstore与mtdoops的崩溃日志存储机制对比

本文深入对比了嵌入式Linux中pstore与mtdoops两种内核崩溃日志存储机制。详细解析了pstore的模块化架构与ramoops配置实践,以及mtdoops的MTD设备优化特性,提供技术指标对比和选型建议,帮助开发者根据项目需求选择最佳日志存储方案。

weixin_30733003的博客 412

mtdoops 和 kdump 原理

kdump 可以记录 kernel panic 等log信息,他的原理就是建立一个工作队列,把kmsg log 备份到一个mtd分区上。 是在drivers/mtd/mtdoops.c 中实现的。 1. module_init/ module_exit module_init(mtdoops_init); module_exit(mtdoops_exit); MODULE_LICENS

2216

嵌入式Linux内核崩溃日志保存实战:ramoops vs mtdoops配置详解(附避坑指南)

本文深入探讨嵌入式Linux系统中ramoops和mtdoops两种内核崩溃日志持久化方案的配置与实践。通过对比分析存储介质、内核版本要求等关键特性,提供详细的设备树配置、日志提取方法及常见问题解决方案,帮助开发者根据项目需求选择最适合的崩溃日志保存机制。

weixin_30329623的博客 478

MTD设备存储内核崩溃日志全攻略:从传统mtdoops到新型mtdpstore迁移指南

本文详细介绍了在嵌入式Linux设备上,如何从传统的mtdoops方案迁移到基于pstore框架的新型mtdpstore方案,以实现内核崩溃日志的持久化存储。mtdpstore通过结构化文件存储、支持压缩和多日志类型等优势,为物联网设备提供了更现代、高效的崩溃日志管理方案,并指导了内核配置、设备树修改及平滑迁移的完整路径。

weixin_29309213的博客 165

panic[转]

简介 在内存发生panic时,需要把panic的日志保存下来。以方便日后进行分析。 目前有三种记录的方式: kdump; mtdoops; crashlog 大家对kdump比较了解。它主要使用于x86系统。因为它使用占用大量内存和硬盘。 mtdoops和crashlog主要用于嵌入式的环境。也只是记录文本日志。 mtdoop功能在发生oops时,把msg区写入特定的m...

awks4002的博客 260

[Realtek sdk-3.4.14b] RTL8197FH-VG开启MTD_OOPS模块操作说明

配置内核将oops堆栈跟踪写入MTD分区。这个MTD dev分区信息可以在mtdoops模块内部进行硬编码,也可以动态指定。这个组件可以作为内核的一部分或作为一个单独的模块来构建。在构建内核之前,您需要确保您的mtd设备已经注册了一个panic_write处理程序。请记住,正常的mtd写入处理程序是不够的,因为我们必须在内核oops后写入mtd内存。注意编译成模块输入m,编译到内核修改为y。保存退出,自动弹出内核配置界面。直接make linux。导入到板子,然后执行。

wgl307293845的博客 333

1-Linux 保存kernel panic信息到flash

Linux 保存kernel panic信息到flash

Creator_Ly的博客 3356

Android系统错误分析工具包:2022年1月10日bug报告详解

mtdoops.md文件是Android系统中记录内核错误报告的关键组件,通常涉及硬件相关的底层问题。在分析这一层次的错误报告时,我们通常关注的是关键字段,如日志级别、错误消息及其对应模块名称等。mtdoops.md文件遵循特定的格式规范,使其内容结构化且易于解析。下面是关于mtdoops.md文件中常见字段的表格总结:字段描述示例日志级别错误的严重性<4>表示错误模块名称错误发生的内核模块mtdoops错误消息具体错误描述时间戳。

weixin_35749786的博客 419

BK7238(XH-WB3S)固件烧录实战:从AT固件选择到稳定下载全解析

本文详细解析了BK7238(XH-WB3S)模组固件烧录的全过程,从AT固件版本选择到稳定下载的实战技巧。重点介绍了烧录前的准备工作、硬件连接的正确姿势、烧录软件的实战技巧以及疑难问题排查指南,帮助开发者高效完成BK7238模组的固件烧录。

weixin_29159441的博客 249

嵌入式Linux系统如何检测内存,嵌入式系统linux 记录内存panic

简介在内存发生panic时,需要把panic的日志保存下来。以方便日后进行分析。目前有三种记录的方式: kdump; mtdoops; crashlog(这是openwrt特别的功能,正式linux内核中没有)大家对kdump比较了解。它主要使用于x86系统。因为它使用占用大量内存和硬盘。mtdoops和crashlog主要用于嵌入式的环境。也只是记录文本日志。mtdoop功能在发生oops时,把...

weixin_29305337的博客 599

如何利用 多 张 GPU 高效运行 Ollama

通过以上步骤,我们可以确保系统尽可能地利用所有 多张GPU 来运行 Ollama。如果在配置过程中遇到问题,建议查阅 Ollama 的官方文档,确认其是否支持多 GPU 并行计算,或者对系统性能进行进一步的优化。充分利用多 GPU 的并行计算能力,可以显著提升 Ollama 的运行效率,加快模型的推理和训练速度。希望本文能帮助你顺利实现 多张 GPU 的高效利用。

weixin_44997264的博客 8031

系统的PANIC

panic并没有什么大不了的,就是禁抢占,善后, 禁止了抢占实际上就禁止了调度,因为禁止抢占的情况下除非自己放弃cpu才能调度, 但是我们看看那个死循环根本没有放弃cpu的意思。 发生panic无非就两种情形,一个是在中断上下文,另一个是在非中断上下文。 在中断上下文中 panic的话,此时的in_interrupt()一定返回真,如果此硬件中断触发了一个软中断,那么这个软中断是永远不会被执行的, 因为导致 panic的中断永远不会调用irq_exit来使得in_interrupt()返回假。 这就解释了为

秦涧泉的博客 2232

用Python+PyTorch实现DQN无人机避障:从环境搭建到实战训练(附完整代码)

本文详细介绍了如何使用Python和PyTorch框架,基于深度强化学习中的DQN算法,实现一个无人机自主避障系统。内容涵盖从自定义环境搭建、DQN智能体核心算法实现,到完整的训练流程与超参数调优,并提供了可视化演示与进阶优化方向,为开发者提供了从理论到实践的完整指南。

kubernetes8ctl的博客 640

拼多多/Temu反爬参数逆向踩坑记:从浏览器调试到补环境完整复盘

本文详细解析了拼多多/Temu反爬参数`anti_content`的逆向工程实战,从浏览器调试到补环境完整复盘。通过JavaScript逆向技术,拆解关键函数定位、反混淆算法还原及补环境技术应用,帮助开发者突破电商平台复杂反爬系统,提升数据采集效率。

weixin_33978722的博客 912

Linux pstore 实现自动“抓捕”内核崩溃日志

原地址:https://mp.weixin.qq.com/s/YkqU5_jMgc0B5_62n2QKyA 我设计的内核模块pstore/blk及其衍生的pstore/zone,mtdpstore终于在v5.8-rc1版本合入了torvalds/linux.git(见参考链接[1]),而且发现国内外对pstore的介绍都好少好少,干脆来一波科普。 简介 pstore文件系统(是的,这是个文件系统)是Persistent Storage的缩写,最早在2010年由 Tony Luck 设计并合入Linux

爱自在的专栏 1011

发那科机器人Modbus通讯配置全攻略:从IP设置到信号调试

本文详细介绍了发那科机器人Modbus通讯的配置方法,从基础认知到IP设置、端口配置、信号调试及故障排查。重点讲解了UOP和DI/DO信号的配置技巧,帮助工程师快速实现机器人与PLC的稳定通讯,提升自动化系统效率。

weixin_27872611的博客 621

【调试】pstore原理和使用方法总结

pstore最初是用于系统发生oops或panic时,自动保存内核log buffer中的日志。不过在当前内核版本中,其已经支持了更多的功能,如保存console日志、ftrace消息和用户空间日志。同时,它还支持将这些消息保存在不同的存储设备中,如内存、块设备或mtd设备。

嵌入式与Linux那些事的博客 3886

NIST随机性测试实战:从理论公式到结果解读

本文详细解析了NIST随机性测试的实战应用,从基础测试到高级测试,涵盖频数测试、块频数测试、游程测试等核心方法。通过实际案例和参数设置经验,帮助读者理解如何解读测试结果并排查常见问题,提升随机数生成质量。文章还分享了自动化测试流程和硬件RNG特殊处理技巧,适合密码学和区块链开发者参考。

weixin_29323365的博客 314

华为OD 面试手撕代码真题【判断链表是否有环】

华为OD 面试手撕代码真题【判断链表是否有环】

MISAYAONE的博客 7230
上一篇: Linux Kernel workqueue 工作队列
下一篇: < NET > PHY
windtakers
博客等级 码龄17年 94粉丝 197原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值