9月前
[Android稳定性] 第046篇 [方法篇] 如何使用trace32恢复AOP现场?
本文介绍了使用hansei工具解析AOP/RPM及使用trace32恢复AOP现场的方法。首先获取hansei工具,安装依赖库后执行工具,输入相关路径生成文件。然后进行恢复前的准备工作,包括下载T32脚本和准备相关文件。最后,通过执行aop_rpm_load.bat文件,选择正确的cmm文件开始恢复。
9月前
[Android稳定性] 第045篇 [问题篇] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00
本文分析了在测试DDR TT和Reboot测试专项过程中机器出现dump的问题。通过panic现场和加debug patch的分析,发现死机原因是ufs没有初始化成功,函数`ufshcd_complete_dev_init`耗时过长。进一步分析发现,`kworker/6:1`线程在执行`kfree_rcu_monitor()`时被调度出去,并长时间卡在`schedule()`中,最终导致死机。根本原因是在ufs函数执行时被串口输出调度出去,而串口输出调度优先级很高,执行console_unlock()时持锁状态下运行,不允许调度,且阻塞式串口写函数`qcom_geni_serial_poll_tx_done`会造成长时间占用CPU。
9月前
linux-dead-lock-detect-lockdep
死锁是多进程或线程因相互等待资源而导致系统阻塞、难以自我恢复的严重问题。Linux 内核区分 D 状态死锁(因 I/O 资源长时间等待导致局部进程间互锁,多表现为系统冻结)和 R 状态死锁(进程占用 CPU 不释放,可能引发全局系统调度失败及看门狗复位)。常见死锁类型包括重复上锁、ABBA 顺序反复上锁等,尤其是 AB-BA 死锁,最易因多线程错拿锁顺序形成。为应对复杂内核环境中的死锁风险,lockdep 死锁检测模块应运而生,通过跟踪锁类以及各锁类的依赖链,提前发现潜在死锁风险并进行详细状态分析。
9月前
[Android稳定性] 第044篇 [问题篇] Unable to handle kernel write to read-only memory at virtual address
在老化测试中,多台机器出现黑屏问题,主要现象为使用9-11版本时,27台机器中有25台因USB问题导致dump,且问题多出现在使用33瓦充电器时。通过LOG分析,问题出现在45次重启测试中。dmesg日志显示,问题源于内存异常踩踏,具体为操作了空指针地址的结构体成员。 根本原因分析表明,在dwc3_msm模块中,存在一个空指针赋值操作,导致数据写入异常地址。解决方案建议对涉及空指针的代码进行兼容性处理,并在gerrit上提交了相关代码修改。
9月前
[Android稳定性] 第042篇 [问题篇] 数组越界导致的Unexpected kernel BRK exception at EL1
在reboot压力测试中出现一台设备死机,分析发现是由于函数 `fg_mac_read_block` 在处理数据时,没有对数组长度进行范围限制,导致数组越界,触发 `Unexpected kernel BRK exception at EL1` 异常,最终导致设备死机。通过分析汇编代码和寄存器状态,确定问题根源并提出了修复方案,即在读取数据后增加对长度的判断,防止数组越界。同时,引申出对 `trace32` 解析结果和编译器优化行为的思考,强调了在实际调试中应结合寄存器状态进行分析,并注意编译器可能进行的优化。
9月前
[Android稳定性] 第041篇 [问题篇] Unable to handle kernel paging request at virtual address 00046ffca9037bf9
系统在休眠过程中发生死机,核心原因在于disp_feature/disp-DSI-0模块的异常。分析日志发现display初始化流程被电源键中断函数非正常触发,导致初始化时出现竞争。两个线程并发执行display相关操作,其中T710线程通过pwrkey的irq触发,导致多次试图注册disp_feature设备,引发sysfs重复命名报错(-EEXIST),随后proc目录下相关内容未能正确清理并产生资源泄漏。整个流程暴露出display初始化与电源键中断处理耦合过紧、并发管理不合理、设备注册机制缺陷等问题,易导致系统异常或内核崩溃。
10月前
[Android稳定性] 第039篇 [问题篇] 记几次判断为DDR不稳定导致的死机问题
在公司工厂老化测试过程中,出现多台机器死机,经技术分析后判断主要原因是DDR内存不稳定。文章详细记录了多个典型案例,展示不同核和线程在同一时间内频繁发生的异常,如内核试图在非可执行区域运行代码、遇到未定义指令错误、空指针解引用和地址翻译异常。通过对内核日志的深入解读,指出这些错误随机且大范围发生,反映出页表结构或内核代码段受损,极可能由DDR故障引发。此类高频和多样化的系统异常,为生产稳定性团队提供了宝贵的实操参考,有助于准确定位和快速解决类似硬件稳定性问题。
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无法正常响应,进而引发系统崩溃。
10月前
[Android稳定性] 第038篇 [问题篇] 在workqueue中取消自身导致的workqueue自锁
在高低温测试后出现工模卡死问题,通过手动组合键获取dump和日志分析发现,卡死主要涉及g_reclaim_threa、kworker和电池相关进程,均处于不可中断状态,线程堆栈显示重复调度和互斥锁等待。问题集中在充电管理和电池状态处理流程,表明驱动在极端温度下存在逻辑漏洞。