赞
踩
重启原因分类
1.上层造成重启
system_server被杀
watchdog重启
重要线程阻塞
2.kernel造成重启
空指针
非法地址
3.kernel watchdog造成重启,原因不确定
内存原因
nand驱动
log查看步骤及关键字
1. 重启后的kernel.log或misc/cmdline.log
在log最前面,会有很长的一段,如:
initrd=0x85500000,0x204229 apv="td860-user 4.1.2 MocorDroid4.1.2 eng..20131107.215135 test-keys" mem=512M loglevel=1 console=ttyS1,115200n8 init=/init mtdparts=sprd-nand:256k(spl),512k(2ndbl),256k(params),512k(vmjaluna),10m(modem),3840k(fixnv),3840k(backupfixnv),5120k(dsp),3840k(runtimenv),10m(boot),10m(recovery),250m(system),180m(userdata),20m(cache),256k(misc),1m(boot_logo),1m(fastboot_logo),3840k(productinfo),512k(kpanic) androidboot.mode=panic lcd_id=ID9816 lcd_base=8ff27000 CHR_STATE=0 ram=512M no_console_suspend boot_ram_log=0x8fe00000,0x80000 tdfixnv=0x89060000,0x40000 tdruntimenv=0x890a0000,0x60000 wfixnv=0x90440000,0x40000 wruntimenv=0x90480000,0x60000 productinfo=0x80490000,0x4000 androidboot.serialno=12345678912345 adc_cal=216338536,185339408 fgu_cal=186388584,159845904,7534 fgu_init=2805,7742
搜索
androidboot.mode
,看开机的模式,如果没有则默认为normal mode,正常开机;上例中为panic,为kernel中出错导致的重启。这个值是从
ANA_REG_GLB_POR_RST_MONITOR
位中获取到的值,每次获取完之后会置为0:
rst_mode = ANA_REG_GET(ANA_REG_GLB_POR_RST_MONITOR);rst_mode &= 0x7FFF;ANA_REG_SET(ANA_REG_GLB_POR_RST_MONITOR, 0); //clear flag
这个值是重启前填入的,如
HWRST_STATUS_PANIC
、
HWRST_STATUS_ALARM
等。
2. 重启后的last_kmsg log
此文件记录了重启前的kernel log,搜索
panic
确定问题发生在上层还是底层,如果有panic相关信息一般都是kernel造成的问题,如果有Restarting system则是上层造成的。
案例一:上层空指针引起的重启
0[ 83.522143] Restarting system with command 'special-systemserver-died'.0[ 83.900657] SPRD_WDT watchdog_feeder, margin=20, feed_period=3, sys_cnt = 862250[ 84.026350] sprd_set_reboot_mode:cmd=special-systemserver-died
此时是由于上层systemserver出了问题导致重启,查看重启方式是androidboot.mode=special,是system server挂掉引起的重启,看上去special方式启动都是上层引起的。
案例二:
【其他】手机处于待机状态长按Power键弹出POP选框不做任何操作还继续长按Power,手机会自动重启。
【预置条件】无
【操作步骤】手机处于待机状态长按Power键--弹出POP选框不做任何操作--还继续长按Power
【实际结果】手机会自动重启
【预期结果】应正常
【复现概率】Must
【备注说明】对比其他手机无此现象。
分析:last_kmsg中搜索到
sprd_set_reboot_mode:cmd=panic
,说明是kernel导致的重启,附件的log中还有
!!!! trigger_watch_powerkey !!!! do emergency_restart
,说明很可能是主动调用重启,在代码中搜索发现
static void trigger_watch_powerkey(void *private){ unsigned long flags; local_irq_save(flags);#ifdef CONFIG_MAGIC_SYSRQ handle_sysrq('m'); handle_sysrq('w');#endif pr_warn("!!!! trigger_watch_powerkey !!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。