Android设备日志分析与电源管理问题
2026/7/11 6:46:34 网站建设 项目流程

这份日志显示了一个Android设备从唤醒(Resume)到再次休眠(Suspend)的完整过程,其中出现了两个关键错误:

主要问题分析:

1.MSDC/eMMC通信失败(核心问题)

[149013.510436][C1000000] mtk-msdc 11230000.mmc: msdc_cmd_done: cmd=6 arg=0x30F0001; rsp 0x0; cmd_error=-110; host_error=0x2 [149013.510513][C1000000] mtk-msdc 11230000.mmc: msdc_cmd_done: cmd=6 arg=0x30F0001; rsp 0x0; cmd_error=-110; host_error=0x2
  • 错误代码-110=ETIMEDOUT(超时错误)
  • 命令6:MMC_SWITCH(切换eMMC工作模式)
  • 具体表现:eMMC存储控制器在尝试切换模式时无响应,连续两次失败

2.设备访问权限违规(DEVAPC Violation)

[149013.511080][C1000000] [DEVAPC]: catch it from INFRAAXI_MI Master is: MCU_AP_M [149013.511096][C1000000] [DEVAPC]: Violation - master: MCU_AP_M access violation slave: MSDC0_S-1 [149013.511108][C1000000] [DEVAPC]: Reason: power/clock is not enabled
  • 违规源:MCU_AP_M(主处理器)尝试访问MSDC0(eMMC控制器)
  • 根本原因电源或时钟未开启状态下进行了非法访问
  • 违规类型:WRITE Violation(写操作违规)

完整的事件链分析:

阶段1:正常唤醒(149012.91秒附近)

  • 系统从休眠中恢复,由WLAN中断触发
  • eMMC控制器正常初始化,进行HS400调校
  • 各模块(WLAN、BT、CAMERA等)依次恢复

阶段2:RPMB操作期间(149013.48秒附近)

  • Trustonic TEE(安全环境)进行RPMB(安全存储)操作
  • 读取和写入RPMB分区数据
  • 这些操作触发了对eMMC的访问

阶段3:系统再次休眠(149013.42秒)

  • 系统准备进入s2idle(浅度休眠)
  • 开始冻结用户进程和可冻结任务
  • 各模块开始挂起流程

阶段4:错误发生(149013.51秒)

  1. eMMC超时:在休眠过程中,eMMC控制器无响应
  2. 访问违规:由于eMMC时钟/电源可能已关闭,但MCU仍尝试访问
  3. 系统状态:此时已开始关闭外设电源,但TEE的RPMB操作仍在进行

根本原因推断:

  1. 时序竞争:在系统休眠过程中,TEE的RPMB操作与eMMC控制器电源管理存在竞争条件

  2. 电源管理冲突

    • eMMC控制器正在被挂起(msdc_runtime_suspend
    • 但安全环境(TEE)仍在进行RPMB读写操作
    • 导致访问时时钟/电源已部分关闭
  3. 可能的具体原因

    • RPMB操作未在eMMC挂起前完成
    • eMMC控制器提前进入低功耗状态
    • 电源管理策略冲突

影响评估:

  • 严重性:中度
  • 影响范围:可能影响RPMB数据完整性
  • 系统稳定性:可能导致休眠失败或数据损坏

建议解决方向:

  1. 检查TEE驱动:确保RPMB操作在系统休眠前完成
  2. 调整挂起顺序:eMMC控制器应在所有安全操作完成后才挂起
  3. 增加同步机制:在eMMC挂起和RPMB操作间添加同步锁
  4. 调试电源管理:检查MSDC0的时钟和电源管理策略

这是一个典型的电源管理时序问题,需要协调TEE安全操作与eMMC控制器电源管理的先后顺序。

系统恢复(Resume)过程:

一开始,系统从挂起状态恢复,由IRQ 138(wlan0)触发。

各个模块(如MDP、SCP、VCP、WLAN、BT等)依次恢复。

eMMC(msdc)进行了重新初始化(包括时钟设置和调校)。

系统再次挂起(Suspend)过程:

在恢复后不久(约0.5秒后),系统再次进入挂起状态(s2idle)。

挂起过程开始,冻结用户空间进程和剩余可冻结任务。

在挂起过程中,Trustonic TEE(可信执行环境)进行了多次RPMB(Replay Protected Memory
Block)操作,包括读取和写入。

错误发生:

在挂起过程中,出现了两个主要错误: a. eMMC命令超时(cmd_error=-110)。 b.
设备访问权限(DEVAPC)违规(Violation)。

错误分析:

a. eMMC命令超时:

在时间戳149013.510436和149013.510513,eMMC控制器(msdc)在发送命令6(CMD6)时超时(cmd_error=-110),这通常表示设备无响应。

这可能是由于在挂起过程中,eMMC设备已经进入低功耗状态,或者时钟被关闭,导致无法响应命令。

b. 设备访问权限违规:

紧接着,在149013.510595开始,出现了设备访问权限违规(DEVAPC)的中断。

违规信息显示,master(MCU_AP_M)试图访问slave(MSDC0_S-1)时发生违规,原因是“power/clock is
not enabled”(电源/时钟未开启)。

这进一步证实了在挂起过程中,eMMC的时钟或电源可能已经被关闭,但仍有访问尝试。

可能的根本原因:

在挂起过程中,系统可能正在关闭eMMC控制器的时钟或电源,而与此同时,TEE的RPMB操作仍在进行,导致eMMC设备无法响应命令,进而产生超时和访问违规。

日志中的其他相关事件:

在挂起过程中,TEE进行了多次RPMB操作,包括读取和写入。这些操作可能需要访问eMMC设备。

在eMMC命令超时之前,有msdc_runtime_suspend: success to release
vcore的日志,表明eMMC控制器正在被挂起(可能正在关闭电源或时钟)。

结论:

这个错误是由于在系统挂起过程中,eMMC设备被挂起(电源/时钟关闭)的同时,TEE的RPMB操作仍在尝试访问eMMC,导致访问超时和违规。

建议的解决方向:

检查TEE的RPMB操作在系统挂起过程中的处理。确保在挂起过程中,所有对eMMC的访问都已完成,并且挂起eMMC控制器的操作应在这些访问之后进行。

检查系统挂起和恢复过程中eMMC控制器与TEE的同步问题,可能需要调整挂起顺序或增加同步机制。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询