![[Android稳定性] 第053篇 [方法篇] 稳定性问题分析指导](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_c3x5u5a.png?x-oss-process=style/watermark&x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第053篇 [方法篇] 稳定性问题分析指导
本文以思维导图的形式介绍了稳定性工程师在分析底层稳定性问题的基本思路,全篇详细介绍了MTK和高通平台会遇到的问题类型,以及这些类型各自的通用解决方案,并赋以对应的经典案例!
![[Android稳定性] 第000篇 Android稳定性系列开篇](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_agdmerq.jpg?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第000篇 Android稳定性系列开篇
0. 前言 还是习惯性的以前言开篇,“深入骨髓”的程序猿思想,干啥事都想从main 开始~~ 1. 方法篇 [Android稳定性] 第001篇 [方法篇] 高通Android平台稳定性分析介绍 [Android稳定性] 第017篇 [方法篇] 高通watchdog分析流程 [Android稳定性]
![[linux内存管理] 第000篇 Linux内存管理系列开篇](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_pdqfdb0.png?x-oss-process=image/resize,w_800,m_lfit)
[linux内存管理] 第000篇 Linux内存管理系列开篇
这篇文章介绍了Linux内存管理相关的知识,包括内存管理预备知识、物理内存初始化流程、各种内存分配器(如buddy分配器、percpu分配器、CMA分配器、slab分配器等),以及内存管理中的一些专业术语解释。

高通以及MTK平台内核单独编译ko的原理
本文讨论了Android项目中进行驱动移植时使用编译模块的方法来节省时间。介绍了高通和MTK平台树外驱动的编译原理及方法,以及树内驱动的编译过程。同时阐述了ko如何打包到image中,动态加载的ko会被打包到vendor_dlkm.img中,最终merge到super.img。

一篇文章全面了解Linux进程调度
进程调度是确保进程能有效工作的一个内核子系统,决定哪个进程可以投入运行,可以运行多长时间。进程和线程在创建到销毁的过程中,会经历创建、就绪、执行、阻塞、终止五种状态的转换。多任务操作系统可以分为非抢占式和抢占式两种,其中抢占式操作系统可以让多个进程处于阻塞或者睡眠状态,这些进程不会真正运行,直到等待的条件(例如键盘输入、网络数据到达、定时器)就绪。进程相关的数据结构主要包括task_struct,进程状态、pid和tgid、进程内核栈、进程标记、进程的父子、兄弟关系等。内核线程是直接由内核本身启动的进程,用于执行周期性的任务。调度器的实现基于周期性调度器函数和主调度器函数,其中周期性调度器函数负责管理内核中与整个系统和各个进程的调度相关的统计量,而主调度器函数则负责执行调度过程。Linux进程调度机制的历史经历了从Linux1.0到2.6的演变,引入了O(1)调度器和完全公平调度算法(CFS)。进程调度策略需要在响应时间和吞吐量之间寻求平衡,Linux更加倾向于优先调度I/O消耗型进程,以缩短响应时间。进程按优先级可分为硬实时进程、软实时进程、普通进程,Linux采用了两种不同的优先级范围:nice值和实时优先级。时间片是一个数值,用来表示进程被抢占前,能够持续运行的时间。调度器类是Linux以模块的方式提供的调度器,以便不同类型的进程可以选择不同的调度算法。目前Linux提供了以下调度器类:完全公平调度器类(CFS)、实时调度器类(RT)和Deadline调度器。完全公平调度类(CFS)使用红黑树来组织可运行进程队列,排序依据为虚拟运行时间vruntime。实时调度类(RT)按照POSIX标准的强制要求,除了“普通”进程之外,Linux还支持两种实时调度器类,分别是循环进程(SCHED_RR)和先进先出进程(SCHED_FIFO)。

任务调度器:从入门到放弃(二)
本文讨论了理想调度模型与实际工程实现之间的差异,分析了Linux调度器中的事件驱动机制及其带来的不确定性。文中介绍了任务调度器的两个关键指标:吞吐量(throughout)和调度精度(latency)。同时,针对big-little架构,探讨了如何界定任务的大小以及如何在不同核心之间分配任务以达到性能与功耗的平衡。文中还对比了两种负载量化模型:PELT和WALT,并讨论了它们在处理任务负载变化时的局限性。
![[Android稳定性] 第052篇 [方法篇] HMI项目中如何使用QCAP解析minidump?](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_zohrwtp.webp?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第052篇 [方法篇] HMI项目中如何使用QCAP解析minidump?
本文介绍了在HMI项目中处理minidump.gz文件的方法,包括本地解压和在线解压两种方式。解压后需对minidump文件进行拆分和可能的解密,然后通过特定脚本来生成ap_minidump.elf文件,以支持解析APPS区域的关键信息。文中详细描述了从解压、拆分、解密到生成elf文件的步骤,适用于高通平台的项目,并提供了相应的脚本示例。
![[Android稳定性] 第051篇 [原理篇] 从timer角度学习高通平台的watchdog](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_4rxbkph.png?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第051篇 [原理篇] 从timer角度学习高通平台的watchdog
本文深入剖析了Linux内核中的定时器机制,包括低精度定时器(timer_list)和高精度定时器(hrtimer),并探讨了它们在watchdog中的应用。低精度定时器基于时钟节拍和定时轮,适用于大多数内核定时器,而高精度定时器则基于硬件时钟源和红黑树,提供更高的精度和更低的抖动。文章还介绍了watchdog timer的使用,包括喂狗线程的流程和系统挂起时的处理。此外,文章还讨论了基于软件的软看门狗机制,用于检测和处理系统中的软死锁问题。最后,文章总结了定时器在watchdog中的应用,并提供了debug watchdog触发的死机问题的方法和技巧。
![[Android稳定性] 第050篇 [问题篇] slab内存泄露造成设备黑屏](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_wquzpo4.jpg?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第050篇 [问题篇] slab内存泄露造成设备黑屏
测试机经过智能长期充电后出现卡顿和黑屏现象,分析发现是slab内存泄露问题导致。通过slabtrace定位到泄漏内存的类型为“kmalloc-xxx”,并发现charger模块存在内存泄漏。最终通过修改代码,在申请内存前先判断是否已经申请过,避免重复申请,成功解决问题。
![[linux内存管理] 第027篇 Linux ARM64 虚拟地址布局](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_fqmrh3x.png?x-oss-process=image/resize,w_800,m_lfit)
[linux内存管理] 第027篇 Linux ARM64 虚拟地址布局
本文在讨论虚拟地址布局,所采用的是如下的配置: kernel版本:5.15 CONFIG_ARM64_VA_BITS=39 CONFIG_ARM64_PA_BITS=48 PAGE_SHIFT = 12 (4KB 页面) STRUCT_PAGE_MAX_SHIFT = 6 (默认值,struct p