MTK平台模块加载顺序控制 10月前 评论
MTK平台模块加载顺序控制

本文主要探讨了Android设备中模块加载顺序控制的相关知识点。首先,介绍了模块在文件系统中的位置要求,包括不同启动模式下模块的存放位置和加载顺序。接着,阐述了Android构建系统如何通过定义变量来支持模块加载,并举例说明了供应商内核模块的配置方式。然后,针对MTK平台,详细分析了模块加载控制机制,包括`ko_order_table.csv`文件的作用、编译逻辑以及树外驱动编译控制。最后,总结了设置模块加载顺序的原则,即通过调整`ko_order_table.csv`中的顺序来控制模块加载顺序,遵循先加载ramdisk模块,后加载vendor模块,且同一类型模块中,顺序靠前的先加载。

[Android稳定性] 第039篇 [问题篇] 记几次判断为DDR不稳定导致的死机问题 10月前 评论
[Android稳定性] 第039篇 [问题篇] 记几次判断为DDR不稳定导致的死机问题

在公司工厂老化测试过程中,出现多台机器死机,经技术分析后判断主要原因是DDR内存不稳定。文章详细记录了多个典型案例,展示不同核和线程在同一时间内频繁发生的异常,如内核试图在非可执行区域运行代码、遇到未定义指令错误、空指针解引用和地址翻译异常。通过对内核日志的深入解读,指出这些错误随机且大范围发生,反映出页表结构或内核代码段受损,极可能由DDR故障引发。此类高频和多样化的系统异常,为生产稳定性团队提供了宝贵的实操参考,有助于准确定位和快速解决类似硬件稳定性问题。

[Android稳定性] 第040篇 [问题篇] 高通平台tz busy造成的卡死问题 10月前 评论
[Android稳定性] 第040篇 [问题篇] 高通平台tz busy造成的卡死问题

**问题摘要:** 近期,工厂和开发版本中出现大量死机问题,原因指向tz相关的`qcom_scm_pas_auth_and_reset`函数异常。日志显示tz处于忙碌状态,且`mfido`固件更新可能为根本原因。 **问题分析:** 问题源于`qcom_scm_pas_auth_and_reset`函数返回异常,导致系统panic。日志分析发现tz处于忙碌状态,且`mfido`固件更新可能与问题相关。进一步分析显示,`mfido`在尝试读取公钥证书时失败,引发系统崩溃。 **根本原因:** 安全团队提交的`mfido`固件更新可能是导致死机的根本原因。更新后的固件在初始化过程中出现错误,导致tz无法正常响应,进而引发系统崩溃。

[Android稳定性] 第038篇 [问题篇] 在workqueue中取消自身导致的workqueue自锁 10月前 评论
[Android稳定性] 第038篇 [问题篇] 在workqueue中取消自身导致的workqueue自锁

在高低温测试后出现工模卡死问题,通过手动组合键获取dump和日志分析发现,卡死主要涉及g_reclaim_threa、kworker和电池相关进程,均处于不可中断状态,线程堆栈显示重复调度和互斥锁等待。问题集中在充电管理和电池状态处理流程,表明驱动在极端温度下存在逻辑漏洞。

[Android稳定性] 第033篇 [问题篇] suspend时shedule io操作导致线程阻塞引发死机 10月前 2 条
[Android稳定性] 第033篇 [问题篇] suspend时shedule io操作导致线程阻塞引发死机

工厂BLMMI工站一台设备死机进dump,经dmesg与任务栈分析,确认是QCOM Apps Watchdog在约67.7秒触发bark/bite,而系统最后一次喂狗停在47.7秒,中间超过20秒未喂狗。期间系统处于s2idle挂起流程中,未正常resume,定时器与调度未运行,导致watchdog无法被喂。 进一步从timer list看到,当前时刻并没有到任何定时器触发点,印证了系统在挂起状态未被唤醒。通过tasks.txt定位到关键卡死线程为......

[Android稳定性] 第036篇 [原理篇] 理解中断上下文、进程上下文以及进程调度之间的关系 10月前 评论
[Android稳定性] 第036篇 [原理篇] 理解中断上下文、进程上下文以及进程调度之间的关系

本文深入探讨了进程上下文、中断上下文以及 Linux 进程调度器(如 CFS)的概念和关联性。进程上下文是内核代码为特定进程执行任务的环境,能被调度、休眠和参与 CFS 调度。中断上下文是内核响应中断时运行的代码环境,不能睡眠,且不直接参与调度。SoftIRQ 和 Tasklet 作为中间层,处理中断后的任务。三者之间的关联性体现在中断上下文可以触发调度事件,而进程上下文可以主动调用调度器。文中还列举了在中断上下文中不能调用的函数或行为,并强调了中断上下文中禁止使用可能引起睡眠或阻塞的函数,以避免系统问题。

[Android稳定性] 第037篇 [问题篇] vote函数持锁造成经典的AB-BA死锁 10月前 评论
[Android稳定性] 第037篇 [问题篇] vote函数持锁造成经典的AB-BA死锁

您好,我是一位专业的100字左右文章摘要总结写手。根据您提供的问题背景和日志分析,本文将探讨一个在Android设备老化测试过程中遇到的问题。具体来说,当使用组合键手动进入dump状态时,设备卡在了某些进程上,无法继续执行。通过分析dmesg日志,我们发现多个进程处于D状态,且存在锁的竞争关系。最终,我们确定这是一个典型的AB-BA锁死锁问题。

【深入内核】Linux 内核栈初步了解 10月前 评论
【深入内核】Linux 内核栈初步了解

这篇文章详细介绍了Linux内核栈的概念、重要性以及与之相关的常见问题和调试方法。内核栈是Linux为每个线程在运行内核代码时专用的一块栈空间,用于保存函数调用链、局部变量、寄存器上下文等信息。文章强调了内核栈的大小固定(在ARM64架构下默认为16KB),不可扩展,并指出了在栈上分配大数组、返回栈上变量地址等常见“死亡操作”。此外,还提供了如何调试内核栈使用的方法,包括编译选项、工具和查看系统文件。最后,总结了避免内核栈溢出的建议,以确保系统稳定运行。

[Android稳定性] 第032篇 [原理篇] 高通平台 OCP & 组合键 Warm Reset 机制详解 10月前 评论
[Android稳定性] 第032篇 [原理篇] 高通平台 OCP & 组合键 Warm Reset 机制详解

本文深入探讨了Qualcomm平台Android系统中两种底层重启方式:OCP(过电流保护)触发的Warm Reset和通过组合键+Timer配置触发的Warm Reset。OCP是一种硬件保护机制,能监测供电轨是否过电流并执行Warm Reset。该重启不经过软件,重启后无last_kmsg记录。组合键+Timer配置则通过PMIC硬件监控按键状态,独立于软件,配置在Android启动后仍生效。两种重启方式均适合用于调试。

[Android稳定性] 第031篇 [原理篇] Linux内核内存检测工具KASAN 10月前 评论
[Android稳定性] 第031篇 [原理篇] Linux内核内存检测工具KASAN

Kasan(Kernel Address Sanitizer)是一个动态检测内存错误的工具,主要功能是检查内存越界访问和使用已释放的内存等问题。Kasan集成在Linux内核中,随Linux内核代码一起发布,并由内核社区维护和发展。在Android内核开发中,Android包括内核地址排错程序(KASan)。KASan是内核与编译时修改的组合,形成了一个插桩系统,可以实现更简单的bug发现和根本原因分析。KASan可以检测内核中许多类型的内存违规行为,包括堆栈、堆和全局变量中的出界读取和写入操作,并可检测释放后再使用和双重释放错误。

[Android稳定性] 第030篇 [问题篇] I2C bus hang 导致锁线程阻塞导致卡死 10月前 评论
[Android稳定性] 第030篇 [问题篇] I2C bus hang 导致锁线程阻塞导致卡死

本文分析了测试过程中出现的ANR问题,通过分析bugreport日志,发现大量内核线程卡在“不可中断睡眠”状态,表明线程正在等待I/O操作。进一步分析发现,问题可能出在电池/充电控制相关驱动上,因为涉及I²C通信和电源管理的模块出现异常。此外,fg_read_volt函数在I²C读失败后,会尝试重试,但可能因为互斥锁或I2C总线问题导致永久阻塞,进而引发系统内多个线程进入D状态。根本原因可能是I²C传输超时导致regmap_raw_read函数卡住或失败,进而导致fg_read_word和fg_read_volt函数卡住或多次失败,最终引发线程风暴。可能的原因包括硬件层面的I²C总线锁死、Fuel Gauge芯片异常、电池连接问题,以及软件层面的I²C驱动问题、多线程并发访问问题、I²C错误处理问题等。