![[Android稳定性] 第045篇 [问题篇] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00](https://halo-1259291793.cos.ap-shanghai.myqcloud.com/2025/06/lbivwl4.png?imageView2/0/w/800)
[Android稳定性] 第045篇 [问题篇] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00
在测试DDR TT和Reboot测试专项过程中,机器出现了多次dump,且dump根因相同。通过分析panic现场,发现是由于UFS初始化失败导致的。具体来说,是在`ufshcd_complete_dev_init`函数中,对`fDeviceInit`标志的轮询超时,导致无法挂载必要的分区,最终引发panic。 为了进一步定位问题,我们在`ufshcd_complete_dev_init`函数中添加了debug patch,增加了时间戳计算和日志输出。通过新的dump分析,发现异常发生在轮询`fDeviceInit`标志的过程中,时间从2.25秒突然跳到了7.15秒,中间没有日志输出,表明存在长时间阻塞。 通过trace32分析,发现一个名为`kworker/6:1`的线程出现了明显的异常,执行时间长达4386毫秒。进一步分析该线程的栈和寄存器信息,发现其最后一次执行的函数是`kfree_rcu_monitor()`,即用于回收内存的后台回调。结合CPU栈分析,发现大部分CPU都在执行串口输出相关的函数,如`qcom_geni_serial_poll_tx_done`。 综合以上分析,根本原因是UFS函数执行时被高优先级的串口输出调度出去。串口输出在持锁状态下运行,不允许调度,直到输出结束;同时,阻塞式串口写函数会主动spin等待硬件完成,长时间占用CPU,导致UFS函数无法正常执行,最终引发panic。

linux-dead-lock-detect-lockdep
本文主要介绍了死锁概念、AB-BA死锁的形成、Linux中的lockdep死锁检测模块及其使用实例。 摘要: 死锁是指多个进程因为长久等待已被其他进程占有的资源而陷入阻塞的状态。Linux中的lockdep模块可以检测死锁,它通过跟踪锁类之间的依赖关系来工作。文章介绍了死锁的概念,分析了AB-BA死锁的形成原因,并给出了lockdep的使用实例,说明了如何通过lockdep检测和修复死锁问题。
![[Android稳定性] 第044篇 [问题篇] Unable to handle kernel write to read-only memory at virtual address](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/24/11/4PSuNS.png)
[Android稳定性] 第044篇 [问题篇] Unable to handle kernel write to read-only memory at virtual address
一、问题现象 老化测试时出现黑屏现象, 9/12: 今天已经确认的现象 使用9-11的版本 72台机器出现27 个黑屏,其中25个为USB问题引起的dump(2个是电量低关机),通过LOG分析是在老化45次重启测试的时候出问题(45次重启1个半小时),9-11版本带了高通的等待probe完成 wai
![[Android稳定性] 第042篇 [问题篇] 数组越界导致的Unexpected kernel BRK exception at EL1](https://iliuqi-obsidian.oss-cn-shanghai.aliyuncs.com/20250530185516136.png)
[Android稳定性] 第042篇 [问题篇] 数组越界导致的Unexpected kernel BRK exception at EL1
在reboot压力测试中,一台设备出现死机,死机类型为Unexpected kernel BRK exception at EL1,发生在CPU7上的fg_mac_read_block函数。通过分析内核调用跟踪和源码,发现死机是由于fg_checksum函数中的数组越界引起的。具体来说,t_len没有做范围限制,导致在t_buf[35]大于42时,访问t_buf数组越界。解决方案是在t_len大于42时将其限制为42。此外,分析还发现不能完全相信trace32解析处的变量结果,某些情况下需要根据寄存器值来推导实际值。此外,编译器优化也对代码执行产生了影响,例如在某些情况下直接将结果赋值给寄存器,不再运行时计算。
![[Android稳定性] 第041篇 [问题篇] Unable to handle kernel paging request at virtual address 00046ffca9037bf9](https://iliuqi-obsidian.oss-cn-shanghai.aliyuncs.com/20250520191844464.png)
[Android稳定性] 第041篇 [问题篇] Unable to handle kernel paging request at virtual address 00046ffca9037bf9
问题现象 死机 分析步骤 [ 189.052980][ T5068] Unable to handle kernel paging request at virtual address 00046ffca9037bf9 [ 189.052991][ T5068] Mem abort info:
![[Android稳定性] 第039篇 [问题篇] 记几次判断为DDR不稳定导致的死机问题](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/4/cover_android_stability_039.png)
[Android稳定性] 第039篇 [问题篇] 记几次判断为DDR不稳定导致的死机问题
本文记录了我司工厂老化测试中多台机器死机的情况,经过分析评估为DDR问题。文章记录了多个案例,并提供了判定为DDR问题的依据,供稳定性人员参考。
![[Android稳定性] 第040篇 [问题篇] 高通平台tz busy造成的卡死问题](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/4/cover_android_stability_040.png)
[Android稳定性] 第040篇 [问题篇] 高通平台tz busy造成的卡死问题
当前文章内容已隐藏,输入密码后可见。
![[Android稳定性] 第038篇 [问题篇] 在workqueue中取消自身导致的workqueue自锁](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/4/cover_android_stability_038.png)
[Android稳定性] 第038篇 [问题篇] 在workqueue中取消自身导致的workqueue自锁
当前文章内容已隐藏,输入密码后可见。
![[Android稳定性] 第033篇 [问题篇] suspend时shedule io操作导致线程阻塞引发死机](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/4/cover_android_stability_033.png)
[Android稳定性] 第033篇 [问题篇] suspend时shedule io操作导致线程阻塞引发死机
当前文章内容已隐藏,输入密码后可见。
![[Android稳定性] 第036篇 [原理篇] 理解中断上下文、进程上下文以及进程调度之间的关系](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/4/cover_android_stability_036.png)
[Android稳定性] 第036篇 [原理篇] 理解中断上下文、进程上下文以及进程调度之间的关系
一、三者概念的梳理 1.1 进程上下文(Process Context) 当内核代码是在为一个具体进程执行某项任务(比如响应系统调用)时,就是在“进程上下文”。 是普通用户或内核线程运行的上下文。 可以被调度、休眠、阻塞。 拥有完整的进程信息(task_struct)。 可以执行阻塞操作,比如 sl