[Android稳定性] 第053篇 [方法篇] 稳定性问题分析指导
本文以思维导图的形式介绍了稳定性工程师在分析底层稳定性问题的基本思路,全篇详细介绍了MTK和高通平台会遇到的问题类型,以及这些类型各自的通用解决方案,并赋以对应的经典案例!
本文以思维导图的形式介绍了稳定性工程师在分析底层稳定性问题的基本思路,全篇详细介绍了MTK和高通平台会遇到的问题类型,以及这些类型各自的通用解决方案,并赋以对应的经典案例!
本文介绍了在HMI项目中处理minidump.gz文件的方法,包括本地解压和在线解压两种方式。解压后需对minidump文件进行拆分和可能的解密,然后通过特定脚本来生成ap_minidump.elf文件,以支持解析APPS区域的关键信息。文中详细描述了从解压、拆分、解密到生成elf文件的步骤,适用于高通平台的项目,并提供了相应的脚本示例。
本文深入剖析了Linux内核中的定时器机制,包括低精度定时器(timer_list)和高精度定时器(hrtimer),并探讨了它们在watchdog中的应用。低精度定时器基于时钟节拍和定时轮,适用于大多数内核定时器,而高精度定时器则基于硬件时钟源和红黑树,提供更高的精度和更低的抖动。文章还介绍了watchdog timer的使用,包括喂狗线程的流程和系统挂起时的处理。此外,文章还讨论了基于软件的软看门狗机制,用于检测和处理系统中的软死锁问题。最后,文章总结了定时器在watchdog中的应用,并提供了debug watchdog触发的死机问题的方法和技巧。
测试机经过智能长期充电后出现卡顿和黑屏现象,分析发现是slab内存泄露问题导致。通过slabtrace定位到泄漏内存的类型为“kmalloc-xxx”,并发现charger模块存在内存泄漏。最终通过修改代码,在申请内存前先判断是否已经申请过,避免重复申请,成功解决问题。
本文在讨论虚拟地址布局,所采用的是如下的配置: kernel版本:5.15 CONFIG_ARM64_VA_BITS=39 CONFIG_ARM64_PA_BITS=48 PAGE_SHIFT = 12 (4KB 页面) STRUCT_PAGE_MAX_SHIFT = 6 (默认值,struct p
本文介绍了Linux内核中slab内存池的创建过程。slab内存池是一种高效的内存管理机制,用于分配和回收固定大小的内存块。文章详细解释了slab cache的创建流程,包括kmem_cache_create接口函数的参数、slab cache的架构设计、内核如何安排slab对象在内存中的布局等。此外,文章还介绍了slab allocator体系的初始化过程,以及内核如何解决创建第一个slab cache时遇到的“先有鸡还是先有蛋”的问题。最后,文章总结了slab cache的创建过程和slab allocator体系的初始化过程,为读者提供了深入理解Linux内核内存管理的参考。
星风之痕
星风之痕-本文详细介绍了一款外链跳转插件的完整使用方案,包含插件功能、模板演示及安装指南
轻雅阁
寒风轻卷,落叶在寂寥中翩跹,没有繁花的喧嚣,只有枯叶与光影的低语。生活的诗意,藏在每一片倔强飘落的弧度里。
星风之痕
星风之痕-这篇文章介绍了如何使用ESTKme-RED读卡器和MEG版本的ESTK卡进行固件升级,包括硬件准备、软件准备、关闭安全中心、插入卡槽、升级读卡器和卡的固件,以及升级后的版本验证步骤。
轻雅阁
在现代Web应用中,图片处理是一个常见的需求。作为一位化学教师,在处理图片时总是四处碰壁,一些培训网站完善信息时需要上传的图片大小不能超过规定的大小我很是苦恼,为此花了些时间做了个图片压缩和转换的工具小网站,本文记录了站长如何使用JavaScript等前端技术实现一个功能强大的图片处理工具。
风记星辰
“熟悉的“陌生人”,愿世界温柔以待每一个善良的人。
轻雅阁
在乡镇生活,夜晚总是来得格外宁静。没有城市的车水马龙,没有霓虹灯的闪烁,只有微弱的路灯和远处的虫鸣。然而,就在这样一个平凡的夜晚,一阵阵清脆的蛙鸣声划破了夜的寂静。
这篇文章介绍了Linux内存管理相关的知识,包括内存管理预备知识、物理内存初始化流程、各种内存分配器(如buddy分配器、percpu分配器、CMA分配器、slab分配器等),以及内存管理中的一些专业术语解释。
本文在讨论虚拟地址布局,所采用的是如下的配置: kernel版本:5.15 CONFIG_ARM64_VA_BITS=39 CONFIG_ARM64_PA_BITS=48 PAGE_SHIFT = 12 (4KB 页面) STRUCT_PAGE_MAX_SHIFT = 6 (默认值,struct p
本文介绍了Linux内核中slab内存池的创建过程。slab内存池是一种高效的内存管理机制,用于分配和回收固定大小的内存块。文章详细解释了slab cache的创建流程,包括kmem_cache_create接口函数的参数、slab cache的架构设计、内核如何安排slab对象在内存中的布局等。此外,文章还介绍了slab allocator体系的初始化过程,以及内核如何解决创建第一个slab cache时遇到的“先有鸡还是先有蛋”的问题。最后,文章总结了slab cache的创建过程和slab allocator体系的初始化过程,为读者提供了深入理解Linux内核内存管理的参考。
本文详细介绍了 Linux 内核中用于零散小内存块分配的内存池——slab 分配器。首先回顾了 Linux 内存分配的宏观链路,然后解释了为什么需要 slab 分配器,以及它在内核中的应用场景。接着,从物理内存页 page 开始,逐步演进到完整的 slab 对象池架构,并详细介绍了 slab 的内存布局和基础信息管理。随后,阐述了 slab cache 的组织架构,包括本地 cpu 缓存 kmem_cache_cpu 和 NUMA 节点缓存 kmem_cache_node。最后,详细介绍了 slab cache 的内存分配和释放原理,包括快速路径和慢速路径,以及不同场景下的分配和释放逻辑。
linux/android稳定性文章
进入分类本文以思维导图的形式介绍了稳定性工程师在分析底层稳定性问题的基本思路,全篇详细介绍了MTK和高通平台会遇到的问题类型,以及这些类型各自的通用解决方案,并赋以对应的经典案例!
0. 前言 还是习惯性的以前言开篇,“深入骨髓”的程序猿思想,干啥事都想从main 开始~~ 1. 方法篇 [Android稳定性] 第001篇 [方法篇] 高通Android平台稳定性分析介绍 [Android稳定性] 第017篇 [方法篇] 高通watchdog分析流程 [Android稳定性]
本文介绍了在HMI项目中处理minidump.gz文件的方法,包括本地解压和在线解压两种方式。解压后需对minidump文件进行拆分和可能的解密,然后通过特定脚本来生成ap_minidump.elf文件,以支持解析APPS区域的关键信息。文中详细描述了从解压、拆分、解密到生成elf文件的步骤,适用于高通平台的项目,并提供了相应的脚本示例。
本文深入剖析了Linux内核中的定时器机制,包括低精度定时器(timer_list)和高精度定时器(hrtimer),并探讨了它们在watchdog中的应用。低精度定时器基于时钟节拍和定时轮,适用于大多数内核定时器,而高精度定时器则基于硬件时钟源和红黑树,提供更高的精度和更低的抖动。文章还介绍了watchdog timer的使用,包括喂狗线程的流程和系统挂起时的处理。此外,文章还讨论了基于软件的软看门狗机制,用于检测和处理系统中的软死锁问题。最后,文章总结了定时器在watchdog中的应用,并提供了debug watchdog触发的死机问题的方法和技巧。
{% tip success %}参考文档:Armv8-A Instruction Set Architecture.pdf {% endtip %} 一、前言 Armv8-A 中的指令集 Armv8-A 支持三种指令集:A32、T32 和 A64。 在AArch64执行状态下执行时使用A64指令集
ARM 架构可以追溯到 1985 年,但它并没有停滞不前。相反,它从早期的 ARM 内核开始大规模发展,每一步都增加了特性 和功能: ARMv4 及更早版本 这些早期的处理器仅使用 ARM 32 位指令集。ARMv4T ARMv4T 架构将 Thumb 16 位指令集添加到 ARM 32 位指令集。
AArch64执行状态提供了32个在任何时间任何特权级下都可访问的64位的通用寄存器。 每个寄存器都有64位宽,它们通常被称为寄存器X0-X30。 每个AArch64 64位通用寄存器(X0-X30)也具有32位(W0-W30)形式。
严格来说,中断是说软件执行流程的东西,但是,在arm术语中,统称为异常。异常是需要特权软件(异常处理程序)执行某些操作以确保系统顺利运行的条件或系统事件。每种异常类型都有一个异常处理程序。一旦处理完异常,特权软件就会让内核准备好恢复它在处理异常之前所做的任何事情。下面介绍了几种异常: Interru
这里存放着没有分类的文章
进入分类这篇文章介绍了高通Android设备在启动过程中的XBL(eXtensible Boot Loader)阶段的详细启动流程。通过流程图和日志分析的方式,对XBL阶段的执行步骤进行了逐一解读,帮助理解从SBL到ABL之后的关键启动环节。
这篇文章详细介绍了Linux内核栈的概念、重要性以及在使用过程中可能遇到的常见问题。以下是摘要总结: 文章首先解释了内核栈的定义及其在内核代码运行时的作用,强调每个线程都有一块独立的内核栈。在ARM64架构下,内核栈大小默认为16KB,不可扩展。内核栈中保存了函数调用链、局部变量、寄存器上下文等信息。 文章还探讨了内核栈的常见错误操作,如分配过大的数组或返回栈上变量的地址,可能导致栈溢出等问题。并对比了内核栈与用户栈的差异。 最后,文章提供了调试内核栈的方法和内核栈溢出的日志示例,给出了避免内核栈溢出的建议,包括避免在内核栈上分配大数组、使用kmalloc分配大缓冲区以及开启DEBUG_STACK_USAGE检测等。
一、什么是RRO? 运行时资源叠加层 (RRO) 是一个软件包,可在运行时更改目标软件包的资源值。例如,安装在系统映像上的应用可能会根据资源值更改其行为。安装在不同分区中的 RRO 可能会在运行时更改应用的资源值,而不是在构建时硬编码资源值。 您可以启用或停用 RRO。您可以通过编程方式设置启用/停
0. 问题背景 我司一个android项目中,只有一个devicename的情况下,需要集成两套power_profile.xml。原因是两者的电池参数存在差异。而我们当前的设计逻辑是使用了missi的rro overlay机制来实现的。但是这种机制是依赖于devicename的,也就是说一个dev
发表在「[Android稳定性] 第051篇 [原理篇] 从timer角度学习高通平台的watchdog」
沙发!正好打算研究这个,太棒了👏「手动点赞」
发表在「[linux内存管理] 第027篇 Linux ARM64 虚拟地址布局」
「手动点赞」😏,原来是2019改的,长知识了,之前一直傻傻分不清楚到底是在高地址还是低地址🤡
发表在「 [Android稳定性] 第049篇 [问题篇] 软中断霸占CPU导致watchdog无法及时喂狗」
琦哥太强了🤞