6月前
评论
[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上提交了相关代码修改。
6月前
评论
[Android稳定性] 第042篇 [问题篇] 数组越界导致的Unexpected kernel BRK exception at EL1
在reboot压力测试中出现一台设备死机,分析发现是由于函数 `fg_mac_read_block` 在处理数据时,没有对数组长度进行范围限制,导致数组越界,触发 `Unexpected kernel BRK exception at EL1` 异常,最终导致设备死机。通过分析汇编代码和寄存器状态,确定问题根源并提出了修复方案,即在读取数据后增加对长度的判断,防止数组越界。同时,引申出对 `trace32` 解析结果和编译器优化行为的思考,强调了在实际调试中应结合寄存器状态进行分析,并注意编译器可能进行的优化。
6月前
评论
[音乐分享] 没有人是一座孤岛
本文主要表达了一个积极向上的观点:只要保持热情,坚持不懈,即使前路不一定一帆风顺,但仍然充满了无限的可能性。这是一种鼓励人们面对困难和挑战,持续奋斗的正能量态度。
6月前
评论
「要经历多少,才能明白这些话的意义?」
本文阐述了经历孤独、迷茫、坚持与顿悟的过程对心灵的磨砺。作者强调,每一次跌倒、每一段坚持、每一个笑着咽下委屈的夜晚,都是成长的必经之路。视频内容未知,但与文章主旨相呼应。
6月前
评论
「山上山下,皆是修行」
修行是每个人在世间的生活态度,无关身份。山上需修不傲慢、不忘本,山下则修不气馁、不自弃。生活百态皆修行场,强调修行在人心,而非仅在寺庙。
6月前
评论
[Android稳定性] 第041篇 [问题篇] Unable to handle kernel paging request at virtual address 00046ffca9037bf9
您好,根据您提供的信息,我总结了以下内容: **问题现象**:设备在系统休眠过程中出现死机。 **分析步骤**: 1. **初步定位模块**:问题出现在系统休眠过程中,设备陆续suspend,出问题的dev为disp_feature/disp-DSI-0。suspend流程中,disp-DSI-0的class被注销。 2. **第一个问题点**:display的初始化流程被电源键的中断触发函数触发,而没有走正常的display流程。 3. **第二个问题点**:`mi_disp_core_deinit`函数中,`class_destroy(g_disp_core->class)`导致class被销毁,但`g_disp_feature`仍然指向class,导致内存访问异常。 4. **第三个问题点**:`mi_disp_feature_init`函数中,kfree(df)后没有将df和g_disp_feature置为NULL,可能导致内存访问异常。 **问题总结**: * 死机原因是class的状态被销毁后没有同步给g_disp_feature。 * 需要将g_disp_core和g_disp_feature都置为NULL,并修复display初始化流程。 **建议**: * 修复display初始化流程,确保走正常流程。 * 在`mi_disp_core_deinit`函数中,将g_disp_core和g_disp_feature都置为NULL。 * 检查其他地方是否有类似的内存访问问题。 希望以上信息对您有所帮助!
7月前
评论
MTK平台模块加载顺序控制
本文主要探讨了Android设备中模块加载顺序控制的相关知识点。首先,介绍了模块在文件系统中的位置要求,包括不同启动模式下模块的存放位置和加载顺序。接着,阐述了Android构建系统如何通过定义变量来支持模块加载,并举例说明了供应商内核模块的配置方式。然后,针对MTK平台,详细分析了模块加载控制机制,包括`ko_order_table.csv`文件的作用、编译逻辑以及树外驱动编译控制。最后,总结了设置模块加载顺序的原则,即通过调整`ko_order_table.csv`中的顺序来控制模块加载顺序,遵循先加载ramdisk模块,后加载vendor模块,且同一类型模块中,顺序靠前的先加载。
7月前
评论
[Android稳定性] 第039篇 [问题篇] 记几次判断为DDR不稳定导致的死机问题
[智谱AI 摘要生成异常:Server returned HTTP response code: 429 for URL: https://open.bigmodel.cn/api/paas/v4/chat/completions | {"error":{"code":"1113","message":"余额不足或无可用资源包,请充值。"}}]
7月前
评论
[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无法正常响应,进而引发系统崩溃。
7月前
评论
[Android稳定性] 第038篇 [问题篇] 在workqueue中取消自身导致的workqueue自锁
### 一、问题背景 在441#-AS1-KKX_0411版本高低温运行测试后,出现工模卡死现象,需手动组合键进入dump。日志分析显示,卡死时刻多个线程处于D状态,包括batterysecret、charge_logger、xm_charge_work和fsa4480_usbc_analog_work_fn等。这些线程都在等待同一个IIO mutex,导致锁争用。 ### 二、根本原因 reverse_charge_monitor_workfunc函数在执行过程中,调用了iio_write_channel_raw函数,该函数持有iio_dev的mlock锁。随后,该函数又调用了smblib_handle_reverse_charge_event函数,该函数中包含cancel_delayed_work_sync(&self)操作,导致当前work无法退出,陷入死锁状态。 ### 三、解决方案 1. 修改reverse_charge_monitor_workfunc函数,将smblib_handle_reverse_charge_event函数的调用移至mutex_unlock(iio_dev->mlock)之后。 2. 考虑使用其他同步机制,如信号量或事件,避免锁争用。 ### 四、总结 通过分析日志和追踪源码,发现卡死现象是由reverse_charge_monitor_workfunc函数中的死锁导致的。通过修改函数调用顺序和使用其他同步机制,可以解决此问题。
7月前
1 条
[Android稳定性] 第033篇 [问题篇] suspend时shedule io操作导致线程阻塞引发死机
## 一、问题背景 工厂BLMMI工站的一台机器出现死机,进入dump状态。 ## 二、问题分析 ### 2.1 初步定位 通过分析dmesg日志,确定死机原因为watchdog bite,CPU0发生。 ### 2.2 定位卡死线程 分析日志发现系统在挂起后未能正确resume,导致watchdog未在20秒内被喂狗。 ### 2.3 查找阻塞的进程 通过查看tasks.txt,发现irq/141-pmic_pw线程卡在不可中断睡眠状态,推测为卡住的线程。 ## 三、根本原因分析 分析栈回溯,发现irq/141-pmic_pw线程在挂起阶段执行mtdoops dump操作时,底层block device已挂起,导致线程卡死,无法完成resume。 ## 四、解决方案 1. 在pwrkey_long_press_irq_event中仅设置标志,延迟执行dump操作。 2. 在系统resume后通过workqueue异步触发dump。 ## 五、效果 避免挂起阶段执行阻塞的dump操作,解决suspend卡死问题。 ## 六、测试建议 1. 检查按电源键时是否出现defer dump日志。 2. 检查挂起后唤醒是否出现Executing deferred mtdoops dump after resume日志。 3. 观察是否还会触发watchdog bite。
7月前
评论
[Android稳定性] 第036篇 [原理篇] 理解中断上下文、进程上下文以及进程调度之间的关系
本文深入探讨了进程上下文、中断上下文以及 Linux 进程调度器(如 CFS)的概念和关联性。进程上下文是内核代码为特定进程执行任务的环境,能被调度、休眠和参与 CFS 调度。中断上下文是内核响应中断时运行的代码环境,不能睡眠,且不直接参与调度。SoftIRQ 和 Tasklet 作为中间层,处理中断后的任务。三者之间的关联性体现在中断上下文可以触发调度事件,而进程上下文可以主动调用调度器。文中还列举了在中断上下文中不能调用的函数或行为,并强调了中断上下文中禁止使用可能引起睡眠或阻塞的函数,以避免系统问题。