[Android稳定性] 第051篇 [原理篇] 从timer角度学习高通平台的watchdog 8月前 1 条
[Android稳定性] 第051篇 [原理篇] 从timer角度学习高通平台的watchdog

本文主要介绍了Linux内核中的定时器机制,包括低精度定时器timer_list和高精度定时器hrtimer,以及它们在watchdog timer中的应用。文章首先介绍了timer_list的实现机制、核心数据结构和API,并通过一个简单的示例展示了其使用方法。接着,文章深入剖析了hrtimer的实现机制、核心数据结构和API,并给出了一个hrtimer定时器的示例驱动。随后,文章着重介绍了watchdog timer的使用,包括其初始化、喂狗线程函数和suspend/wakeup处理。此外,文章还介绍了基于软件的软看门狗机制,包括其基本原理、核心组件、检测流程和内核中的主要实现。最后,文章总结了watchdog timer的debug方法和技巧,并提供了一些常用的内核参数用于调试。

 [Android稳定性] 第049篇 [问题篇] 软中断霸占CPU导致watchdog无法及时喂狗 8月前 3 条
[Android稳定性] 第049篇 [问题篇] 软中断霸占CPU导致watchdog无法及时喂狗

系统出现死机,核心原因是Watchdog定时器未按时触发“喂狗”操作导致20秒内无回应。从dmesg和timerlist日志分析,定时器的回调因中断或内核临界区阻塞未能执行,所有CPU的最后ping均停留在同一时刻,反映定时器链路被阻塞。这突出内核定时器和中断管理对系统稳定性的关键影响。

[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稳定性] 第023篇 [问题篇] printk非空的非法指针参数导致的spinlock死锁引起Non Secure WDT 2025-02-11 评论
[Android稳定性] 第023篇 [问题篇] printk非空的非法指针参数导致的spinlock死锁引起Non Secure WDT

本文分析了Linux内核中因`Non secure wdt`导致的死机问题。通过分析ramdump,发现所有CPU都在等待一个spin lock,且锁的持有者是`kworker/u17:12`。进一步分析发现,该进程在获取锁后出现了data abort,并在异常处理流程中再次尝试获取锁,导致死锁。根本原因是`nvt_update_firmware`函数中使用了未初始化的指针作为`printk`的参数,导致打印异常。解决方案是将`kmalloc`改为`kzalloc`,以确保内存被清零。实验验证了当`printk`的参数为非法指针时,会导致死锁。