坚持总结
如果机器在开机过程中出现死机和重启的情况,可以由以下几点的Debug思路:
一、抓取log
一份正常启动log,一份异常启动log。log部分包括logcat和串口log,如果是mtk平台 的话,可以抓取mtklog 和串口log。如果有NE或者ANR的相应的log也一并导出,anr:data/anr ,aee:data/aee_exp
二、定位异常发生的阶段性
这部分就需要在log中找相应的启动关键字。如果找到关键字,再定位具体发生错误的代码和函数,也可以对比正常的log,来找到发生错误的位置。
android系统启动的关键log:
1、"Preparing for EL3 exit to normal world, LK"
如果串口log里面没有走到这里,说明在PL就卡住了,这句表示进入LK
2、"lk finished --> jump to linux kernel"
如果串口log里面没有走到这里,但是上面走到了,说明在lk卡住了,这句表示进入kernel
3、"Kernel_init_done"
这句表示kernel初始化完成了,正准备启动init进程,如果这就没有走到:请搜索关键字initcall,
initcall是顺序执行例如module_init注册的init函数,看看卡在哪个call back上
4、"BOOTPROF"
这是开机过程中,每走过一个重要阶段都会打印的标志,例如上面Kernel_init_done这一句就会打上这个标志
5、"init: init first stage started"
这句表示init进程正常起来执行
6、"fs_mgr" 和"e2fsck"
这里标志是在检查和mount 文件系统,如果失败会有如下log:fs_mgr_mount_all returned an error fs_mgr_mount_all returned unexpected error 255
7、"zygote"
Starting service 'zygote':这里表示要启动zygote,如果没有这一句表示zygote还没启动,则要检查之前的initrc 执行情况,文件系统mount情况
8、"SysServerInit_START"
启动system_server
9、"system_server"
Android:SysServerInit_END 这里表示system_server启动完成
10、"BOOT_Animation:END"
表示开机动画正常结束,进入安卓
三、确定发生异常的log属于的类型状态
1 Java Exception (JE)
2 Software Watchdog Timeout (SWT)
3 Application Not Responding (ANR)
4 What a Terrible Failure (WTF)
5 Native Exception (NE)
6 Kernel Exception (KE)
7 Low Memory Killer (LMK)
8 Out of Memory (OOM)
9 Hardware Watchdog Timeout (HWT)