【深入内核】linux ftrace详解 8月前 4 条
【深入内核】linux ftrace详解

本文主要介绍了Ftrace(Function Tracer)的概念、实现原理和使用方法。Ftrace是Linux内核自带的轻量级跟踪框架,用于记录内核内部发生的事件与函数调用,帮助开发者洞察系统最深处的执行路径、时序瓶颈与异常行为。文章详细阐述了Ftrace的实现原理,包括静态插桩和动态插桩两种方式,并介绍了Ftrace的开启方法,包括设置tracer类型、设置tracer参数、使能tracer、进行测试和提取trace结果等步骤。此外,文章还介绍了常见的trace event详解和特别注意点,如能够使用adb和开机过程中死机的情况。

[Android稳定性] 第045篇 [问题篇] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00 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。

linux-dead-lock-detect-lockdep 9月前 评论
linux-dead-lock-detect-lockdep

死锁是多进程或线程因相互等待资源而导致系统阻塞、难以自我恢复的严重问题。Linux 内核区分 D 状态死锁(因 I/O 资源长时间等待导致局部进程间互锁,多表现为系统冻结)和 R 状态死锁(进程占用 CPU 不释放,可能引发全局系统调度失败及看门狗复位)。常见死锁类型包括重复上锁、ABBA 顺序反复上锁等,尤其是 AB-BA 死锁,最易因多线程错拿锁顺序形成。为应对复杂内核环境中的死锁风险,lockdep 死锁检测模块应运而生,通过跟踪锁类以及各锁类的依赖链,提前发现潜在死锁风险并进行详细状态分析。

[Android稳定性] 第044篇 [问题篇] Unable to handle kernel write to read-only memory at virtual address 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上提交了相关代码修改。

[Android稳定性] 第042篇 [问题篇] 数组越界导致的Unexpected kernel BRK exception at EL1 9月前 评论
[Android稳定性] 第042篇 [问题篇] 数组越界导致的Unexpected kernel BRK exception at EL1

在reboot压力测试中出现一台设备死机,分析发现是由于函数 `fg_mac_read_block` 在处理数据时,没有对数组长度进行范围限制,导致数组越界,触发 `Unexpected kernel BRK exception at EL1` 异常,最终导致设备死机。通过分析汇编代码和寄存器状态,确定问题根源并提出了修复方案,即在读取数据后增加对长度的判断,防止数组越界。同时,引申出对 `trace32` 解析结果和编译器优化行为的思考,强调了在实际调试中应结合寄存器状态进行分析,并注意编译器可能进行的优化。

[Android稳定性] 第041篇 [问题篇] Unable to handle kernel paging request at virtual address 00046ffca9037bf9 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初始化与电源键中断处理耦合过紧、并发管理不合理、设备注册机制缺陷等问题,易导致系统异常或内核崩溃。