Android开机黑屏问题分类
首先要看一下是否是快速开关机导致,即在setting-->辅助功能-->不勾选“fast boot“,关闭快速开关机选项,如果不黑屏,说明是因为ipo这个过程中的问题,那么问题需要看看这个动画,可以找一下ipo动画的owner。
黑屏的三个阶段
分析开机过程黑屏,首先需要定位黑屏问题发生的时间段,开机过程中涉及到显示logo 或者是播放动画的主要有如下三个阶段:
显示 lk logo ;
显示kernel logo;
开机动画 Bootanimation
如下这张ENG 版本开机过程显示图,说明了主要的三个过程:
定位问题时建议采用ENG版本,同时将每个阶段的图片都换成不一样,因为ENG版本会显示 Normal boot 字样加上每个阶段图片的差异,这样就能够很容易区分到底是哪个阶段出现了黑屏。
如下解释:
(阶段1)、带有”normal boot“的lk logo,会在lk阶段显示。显示时间一般1s左右。
(阶段2)、启动到kernel的前7s左右,显示的是带”normal boot“字样的lk logo。(这里L/M版本和KK/JB版本很不同,不在此处细说)
(阶段3)、之后显示kernel logo的时间段很短,一般只有2s左右.
(阶段4)、显示bootanimation动画。
出现黑屏问题,需要注意如下几个资源检查:
1、logo.bin的大小限制在4M内
2、lk logo和kernel logo图片是RGB888格式
3、bootanimation图片是png格式
如果以上都check OK,可以参看如下的方式定位
如果是(阶段1)黑屏,即lk logo没有显示出来,那么可能是logo资源异常,或者底层没有刷出来,需要抓uart log查看,可以打log跟踪platform.c文件里面的platform_init()函数。
如果是(阶段1)和(阶段2)之间黑屏,可能是刷屏的问题,如果有异常,从uart log里面,应该可以看到display error,比如vdo mode屏,这时候等VM Done timeout等。
如果是(阶段2)中间黑屏,看uart log是否有display error/fault/timeout/fail.
如果是(阶段2)和(阶段3)之间黑屏,可能是因为加载的kernel logo异常,或者mtkfb pan display implementation的时候异常数据进入,通常此时log里面很难看到error,需要加log进去debug。
如果是(阶段3)黑屏,可以使用上面的adb命令来区分到底是kernel logo的问题还是bootanimation开始的问题。
注释:以上5个可能出现黑屏的阶段,都与driver层相关,在找对应owner前,请先排除logo资源格式客制化等影响。根据我们这么些年定位问题来总结,很大一部分客户是因为客制化,logo资源等造成的问题。如果log里面有error,属于数据流在engine处理的时候异常,较容易修正。如果log没有异常,那么可能是异常的数据格式或者异常的flow导致的,比较难定位。
如果是(阶段4)播放黑屏,运行bootanimation应用看看,如果黑屏,那么问题在于bootanimation。关于bootanimation黑屏的定位,如下有一个完整的总结,请先自行check一下:
1.关于黑屏问题首先需要确认是否开机动画包本身的问题:(1)将出现黑屏手机内部的system/media/bootanimation.zip pull到没有黑屏问题的手机,check是否还有黑屏,如果出现黑屏说明是开机动画包本身的问题,可以转给AF2分析,否则继续查找其他原因;(2)将正常手机的 system/media/bootanimation.zip pull到目前有黑屏问题的手机,check是否依然黑屏。如果没有黑屏说明是开机动画包本身的问题,可以转给AF2分析,否则继续查找其他原因。
2.测试去掉开机铃声后是否还会出现黑屏:如果没有出现黑屏说明与mediaplayer初始化较慢有关,需要与audio 的owner确认进一步的原因。否则继续查找其他原因。
3.在开机动画前出现一帧闪黑屏可能与Google default 默认的clear screen操作有关,需要在BootAnimation.cpp文件中去掉相关清屏的code。