Android TV休眠时频繁重启致ADB断开的排查与解决问询
Android TV休眠模式下ADB频繁断开的原因、排查与解决
问题背景
Android TV(Android 10,内核4.19.75)在休眠模式下ADB连接频繁断开,观察到PowerHAL进程PID每次异常时都不同,怀疑设备频繁重启。已尝试拔掉HDMI线、重置系统,问题仍存在。
休眠时的ADB Logcat日志
03-05 00:50:40.242 9534 9647 I uicksetsdk.son: Starting a blocking GC Alloc 03-05 00:50:40.242 9534 9647 I uicksetsdk.son: Starting a blocking GC Alloc 03-05 00:50:40.271 9534 9647 I uicksetsdk.son: Alloc concurrent copying GC freed 19943(12MB) AllocSpace objects, 29(3092KB) LOS objects, 49% free, 2295KB/4590KB, paused 110us total 28.982ms 03-05 00:50:40.671 9986 9986 D LIBIWPRIV: Ethernet_WoPacket ifc_set_Ethernet_listen_port 03-05 00:50:40.671 9986 9986 D MTK PowerHAL: ACFGGGGGGGGGGGGGGGGGGGGGGGGGGGGG : AM_BRDCST_MSG_PRE_POWER_OFF 03-05 00:50:41.178 2902 9975 I BatteryStatsService: In wakeup_callback: suspend aborted 03-05 00:50:41.179 2902 3203 D AlarmManager: Wakeup history#0 Wakeup alarmType=RTC_WAKEUP package=com.mediatek.agent wakeups=1 alarms=1 whenElapsed=0 when=2023-03-04 23:47:47 nowRTC=2023-03-04 23:47:47 workSource=null uid=1000 tag="*walarm*:mtk.intent.rtctimer.set.bgm" 03-05 00:50:41.179 2902 3203 D AlarmManager: Wakeup history#1 Wakeup alarmType=ELAPSED_WAKEUP package=android wakeups=3 alarms=3 whenElapsed=-21s956ms when=-21s956ms nowRTC=2023-03-04 23:48:10 workSource=null uid=1000 tag="*walarm*:DeviceIdleController.deep" 03-05 00:50:41.179 2902 3203 D AlarmManager: Wakeup history#2 Wakeup alarmType=ELAPSED_WAKEUP package=android wakeups=4 alarms=4 whenElapsed=0 when=0 nowRTC=2023-03-05 00:50:32 workSource=null uid=1000 tag="*walarm*:DeviceIdleController.deep" 03-05 00:50:41.179 2902 3203 D AlarmManager: Wakeup alarmType=ELAPSED_WAKEUP package=android wakeups=5 alarms=5 whenElapsed=0 when=0 nowRTC=2023-03-05 00:50:41 workSource=null uid=1000 tag="*walarm*:DeviceIdleController.deep" 03-05 00:50:41.180 2902 2980 W AlarmManager: Unrecognized alarm listener com.android.server.DeviceIdleController$4@2730dbf 03-05 00:50:41.225 9810 9990 W adbd : timed out while waiting for FUNCTIONFS_BIND, trying again 03-05 00:50:41.225 9810 9990 I adbd : UsbFfs: connection terminated: monitor thread finished 03-05 00:50:41.225 9810 9810 I adbd : UsbFfs: already offline 03-05 00:50:41.225 9810 9810 I adbd : destroying transport UsbFfs 03-05 00:50:41.225 9810 9810 I adbd : UsbFfsConnection being destroyed 03-05 00:50:41.268 9810 9811 I adbd : opening control endpoint /dev/usb-ffs/adb/ep0 03-05 00:50:41.268 9810 9811 I adbd : UsbFfsConnection constructed 03-05 00:50:41.437 9993 9993 D MTK PowerHAL: for GCM case,update port info 03-05 00:50:41.437 9993 9993 D MTK PowerHAL: wopacket Sony behavior(for GCM case,update port info) 03-05 00:50:41.437 9993 9993 D MTK PowerHAL: enable WoPacket before power off 03-05 00:50:41.437 9993 9993 D MTK PowerHAL: XXXXXenter: AP 7668 a_nw_wlan_set_ip_and_port_to_driver 03-05 00:50:41.437 9993 9993 D MTK PowerHAL: XXXXX AP first clear all ethernet port 03-05 00:50:41.437 9993 9993 D LIBIWPRIV: Ethernet_WoPacket ifc_clear_listen_port 03-05 00:50:41.438 9993 9993 D MTK PowerHAL: XXXXXXXXget valid Ex v4port 40918 03-05 00:50:41.438 9993 9993 D MTK PowerHAL: (WOWL)tcp v6 port2 = set_wow_tcp 0 8008,8009,1900,40918 03-05 00:50:41.438 9993 9993 D MTK PowerHAL: XXXXXethernet tcp port0 is 8008 03-05 00:50:41.438 9993 9993 D MTK PowerHAL: XXXXXethernet tcp port1 is 8009 03-05 00:50:41.438 9993 9993 D MTK PowerHAL: XXXXXethernet tcp port2 is 1900 03-05 00:50:41.438 9993 9993 D MTK PowerHAL: XXXXXethernet tcp port3 is 40918 03-05 00:50:42.273 9810 9991 W adbd : timed out while waiting for FUNCTIONFS_BIND, trying again 03-05 00:50:42.273 9810 9991 I adbd : UsbFfs: connection terminated: monitor thread finished 03-05 00:50:42.273 9810 9810 I adbd : UsbFfs: already offline 03-05 00:50:42.273 9810 9810 I adbd : destroying transport UsbFfs 03-05 00:50:42.273 9810 9810 I adbd : UsbFfsConnection being destroyed 03-05 00:50:42.338 9810 9811 I adbd : opening control endpoint /dev/usb-ffs/adb/ep0 03-05 00:50:42.339 9810 9811 I adbd : UsbFfsConnection constructed 03-05 00:50:42.976 9993 9993 D LIBIWPRIV: Ethernet_WoPacket ifc_set_Ethernet_listen_port 03-05 00:50:42.977 9993 9993 D MTK PowerHAL: (WOWL)udp port = set_wow_udp 0 5353 03-05 00:50:42.977 9993 9993 D MTK PowerHAL: XXXXXethernet udp port0 is 5353 03-05 00:50:43.341 9810 9994 W adbd : timed out while waiting for FUNCTIONFS_BIND, trying again 03-05 00:50:43.341 9810 9994 I adbd : UsbFfs: connection terminated: monitor thread finished 03-05 00:50:43.342 9810 9810 I adbd : UsbFfs: already offline 03-05 00:50:43.342 9810 9810 I adbd : destroying transport UsbFfs 03-05 00:50:43.342 9810 9810 I adbd : UsbFfsConnection being destroyed 03-05 00:50:43.388 9810 9811 I adbd : opening control endpoint /dev/usb-ffs/adb/ep0 03-05 00:50:43.389 9810 9811 I adbd : UsbFfsConnection constructed 03-05 00:50:44.391 9810 9995 W adbd : timed out while waiting for FUNCTIONFS_BIND, trying again 03-05 00:50:44.391 9810 9995 I adbd : UsbFfs: connection terminated: monitor thread finished 03-05 00:50:44.391 9810 9810 I adbd : UsbFfs: already offline 03-05 00:50:44.391 9810 9810 I adbd : destroying transport UsbFfs 03-05 00:50:44.391 9810 9810 I adbd : UsbFfsConnection being destroyed 03-05 00:50:44.458 9810 9811 I adbd : opening control endpoint /dev/usb-ffs/adb/ep0 03-05 00:50:44.458 9810 9811 I adbd : UsbFfsConnection constructed 03-05 00:50:44.515 9993 9993 D LIBIWPRIV: Ethernet_WoPacket ifc_set_Ethernet_listen_port 03-05 00:50:44.515 9993 9993 D MTK PowerHAL: ACFGGGGGGGGGGGGGGGGGGGGGGGGGGGGG : AM_BRDCST_MSG_PRE_POWER_OFF
核心原因分析
- 休眠流程异常中断:日志中
suspend aborted表明系统尝试进入休眠状态,但被唤醒事件打断,导致休眠流程反复触发。 - 深度休眠控制器频繁唤醒:
AlarmManager中多条DeviceIdleController.deep的唤醒记录,说明设备的深度空闲管理机制在频繁唤醒设备,干扰休眠流程。 - USB功能重启导致ADB断开:
adbd的FUNCTIONFS_BIND timeout和连接销毁重建日志,是因为休眠时USB子系统被关闭或重启,直接导致USB ADB连接中断。 - PowerHAL进程重启而非整机重启:PowerHAL的PID变化是因为休眠流程异常触发了进程重启,并非整机重启,整机重启会有更明显的系统启动日志。
排查步骤
- 检查唤醒锁:执行
adb shell dumpsys power,查看Wake Locks部分,确认是否有应用或系统服务持有唤醒锁阻止设备进入稳定休眠。 - 分析设备空闲模式:执行
adb shell dumpsys deviceidle,查看深度休眠模式的触发频率和状态,确认是否存在异常的唤醒调度。 - 检查系统闹钟:执行
adb shell dumpsys alarm | grep DeviceIdleController,过滤深度休眠相关的闹钟,查看是否有异常频繁的唤醒计划。 - 查看内核日志:执行
adb shell dmesg,检查休眠/唤醒过程中的内核级错误,比如MTK平台的驱动问题导致休眠失败。 - 排除第三方应用干扰:暂时卸载所有第三方应用,测试休眠是否正常,排查是否是第三方应用触发的异常唤醒。
绕过方案(若为系统默认行为)
- 禁用深度休眠模式:执行
adb shell dumpsys deviceidle disable,但会增加设备功耗。 - 改用无线ADB连接:先执行
adb tcpip 5555,再通过adb connect [TV的IP地址]:5555建立无线连接,避免USB休眠导致的断开。 - 调整网络唤醒配置:如果设备已root,修改PowerHAL的WoPacket(网络唤醒)配置,减少触发频率;或在TV设置中关闭网络唤醒功能。
- 保持USB供电稳定:确保TV的USB端口在休眠时仍保持供电,部分设备可在开发者选项中开启“USB调试始终保持唤醒”。
内容的提问来源于stack exchange,提问作者optimuscomposite
相关产品推荐
相关产品推荐

