2023年6月21日发(作者:)
Android开机阶段log分析Android开机阶段log分析标签(空格分隔): 开关机流程Android开机阶段log分析 bootchart⼯具查看开机过程 打印开机过程各阶段的时间 kernel Init进程 Zygote进程 SystemServer进程 开机动画logbootchart⼯具查看开机过程Android版本:7.0平台:⾼通和MTK输出:-157.5kB 局部放⼤图:RTX截图未命名.png-1871.2kB 使⽤⽅法: 1.修改代码1) /system/core/init/ve the lines in L_SANITIZE := integer2)build and , flash into device如果没有此步骤,将导致⼿机不断重启,⽆法开机。2.抓取logadb shell 'echo 120 > /data/bootchart/start'数据采集完之后再将/data/bootchart/start删除,否则每次开机都会抓取log。3.数据采集与分析关机和开机(120S)后,采集的数据信息会⾃动收集到/data/bootchart⽬录下,包含如下5个⽂件:header,kernel_pacct,proc_,proc_,proc_$ system/core/init/调⽤bootchart⼯具解析⽣成的压缩包,⽣成图⽚,最后⼜⽤命令将图⽚打开(user版本也可以)。打印开机过程各阶段的时间⼯具:system/core/init/作⽤:打印开机过程各阶段的时间命令:./ --iterations=1 -v --output=备注:⼯程需要先lunch⼀下,否则有可能出现ImportError: No module named adb⽰例:Event log recorded: boot_progress_start (616) - 20409 msEvent log recorded: boot_progress_preload_start (616) - 22764 msEvent log recorded: boot_progress_preload_start (656) - 22780 msEvent log recorded: boot_progress_preload_end (616) - 25649 msEvent log recorded: boot_progress_preload_end (656) - 25776 msEvent log recorded: boot_progress_system_run (1351) - 25990 msEvent log recorded: boot_progress_pms_start (1351) - 26744 msEvent log recorded: boot_progress_pms_system_scan_start (1351) - 27309 msEvent log recorded: boot_progress_pms_data_scan_start (1351) - 30620 msEvent log recorded: boot_progress_pms_scan_end (1351) - 30677 msEvent log recorded: boot_progress_pms_ready (1351) - 32772 msEvent log recorded: boot_progress_ams_ready (1351) - 36251 msEvent log recorded: boot_progress_enable_screen (1351) - 39129 msEvent log recorded: sf_stop_bootanim (475) - 40908 msEvent log recorded: wm_boot_animation_done (1351) - 46139 msmean: 46139.0median: 46139standard deviation: 0.0Wrote: 释义:namedescription代表着Android屏幕点亮,开始显⽰启动动画,标志着kernel启动完成,本例中可以看出kernel启动耗时30s左右Zygote启动Zygote结束SystemServer ready,开始启动Android系统服务,如PMS,APMS等PMS开始扫描安装的应⽤PMS先⾏扫描/system⽬录下的安装包PMS扫描/data⽬录下的安装包PMS扫描结束PMS就绪AMS就绪AMS启动完成后开始激活屏幕,从此以后屏幕才能响应⽤户的触摸,它在WindowManagerService发出退boot_progress_enable_screen出开机动画的时间节点之前,⽽真正退出开机动画还会花费少许时间,具体依赖animation zip 包中的。wm_boot_animation_done才是⽤户感知到的动画结束时间节点SF设置属性值为1,标志系统要结束开机动画了,可以⽤来跟踪开机动画结尾部分消耗的时间开机动画结束,这⼀步⽤户能直观感受到开机结束boot_progress_startboot_progress_preload_startboot_progress_preload_endboot_progress_system_runboot_progress_pms_startboot_progress_pms_system_scan_startboot_progress_pms_data_scan_startboot_progress_pms_scan_endboot_progress_pms_readyboot_progress_ams_readysf_stop_bootanimwm_boot_animation_doneAndroid系统启动的log分为Linux内核的log和Android Logger系统的log,抓取的⽅法如下:$ adb shell dmesg > $ adb logcat -d -v time -b "main" > $ adb logcat -d -v time -b "system" > $ adb logcat -d -v time -b "events" > nel这⾥提下如何看kernel的log,开机后⽤命令:adb shell dmesg > 抓取Loglog⾥⾯搜关键字”Bootloader start count”–>LK 启动“Bootloader end count”–>LK 结束“Kernel MPM timestamp”–>bootloader运⾏完成Linux内核启动完成,⼀般都有如下的标准输出信息[ 3.980460] (1)[1:swapper/0]Freeing initrd memory: 2500K (ffffffc003600000 - ffffffc003871000)合并kernel config⼯具:kernel/msm-3.18/scripts/kconfig/msm-3./merge_⽅法:单独编译下kernel(make kernel -j8 PROJECT_NAME=cas_tr),然后去out⽬录下查看out/target/product/v11bnlite/obj/KERNEL_OBJ⽂件Init进程Init程序的log信息也位于⽂件中,我们可以通过检索“init”找到该程序的打印消息。通过检索“init starting”,我们可以找到init进程启动了哪些本地服务,如:1008:[ 10.630620] (0)[1:init]init: Starting service 'ueventd'...1122:[ 13.371655] (3)[1:init]init: Starting service 'logd'...1142:[ 14.824560] (1)[1:init]init: Starting service 'debuggerd'...1143:[ 14.831413] (1)[1:init]init: Starting service 'debuggerd64'...1144:[ 14.839197] (2)[1:init]init: Starting service 'vold'...1149:[ 15.135726] (3)[1:init]init: Starting service 'exec 1 (/system/bin/tzdatacheck)'...1151:[ 15.233418] (2)[1:init]init: Starting service 'perfd'...1154:[ 15.288520] (2)[1:init]init: Starting service 'carrier_switcher'...1156:[ 15.448583] (3)[1:init]init: Starting service 'logd-reinit'...1167:[ 15.833831] (0)[1:init]init: Starting service 'exec 2 (/_)'...1238:[ 16.640513] (1)[1:init]init: Starting service 'healthd'...1239:[ 16.647123] (1)[1:init]init: Starting service 'qcom-c_core-sh'...1240:[ 16.654727] (1)[1:init]init: Starting service 'irsc_util'...1242:[ 16.669672] (1)[1:init]init: Starting service 'rmt_storage'...1244:[ 16.687135] (1)[1:init]init: Starting service 'tftp_server'...Zygote进程Zygote进程所输出的log信息被放到/dev/log/main⽂件中了,因此,我们需要检索得到Zygote的log信息。zygote进程是在init进程中启动的,因此,我们从上⾯init进程的输出log中,检索”zygote”就可以找到zygote进程何时启动的,如图所⽰:[ 17.696441] (0)[1:init]init: Starting service ‘zygote’…Android系统为了提⾼应⽤程序的启动速度,会在Zygote进程初始化过程中加载⼀些常⽤的java class和资源⽂件到进程的内存中,从⽽共享常⽤的class和resourse资源。这个过程我们可以通过检索”preload”标签得到这个过程所消耗的时间,如图所⽰:./APLog_2017_0103_063308/main_:2894:01-03 06:32:18.105987 280 280 I Zygote : ...preloaded 4161 classes in 1457ms../APLog_2017_0103_063308/main_:3008:01-03 06:32:19.234774 280 280 I Zygote : ...preloaded 114 resources in 629ms../APLog_2017_0103_063308/main_:3024:01-03 06:32:19.301479 280 280 I Zygote : ...preloaded 41 resources in Server进程Zygote完成了初始化⼯作后就启动SystemServer进程了,SystemServer进程的log信息被放到了/dev/log/system⽂件中了,因此,我们需要检索⽂件得到SystemServer的log信息,如图所⽰:./APLog_2017_0103_063308/sys_:459:01-03 06:32:19.821505 879 879 I SystemServer: Entered the Android system server!./APLog_2017_0103_063308/sys_:489:01-03 06:32:20.744765 879 879 I SystemServer: StartPackageManagerService./APLog_2017_0103_063308/sys_:1334:01-03 06:32:28.256673 879 879 I SystemServer: StartOtaDexOptService./APLog_2017_0103_063308/sys_:1335:01-03 06:32:28.258833 879 879 I SystemServer: StartUserManagerService./APLog_2017_0103_063308/sys_:1343:01-03 06:32:28.344933 879 879 I SystemServer: /APLog_2017_0103_063308/sys_:1344:01-03 06:32:28.345094 879 879 I SystemServer: StartSchedulingPolicyService./APLog_2017_0103_063308/sys_:1346:01-03 06:32:28.349108 879 879 I SystemServer: StartTelephonyRegistry./APLog_2017_0103_063308/sys_:1347:01-03 06:32:28.358208 879 879 I SystemServer: StartEntropyMixer./APLog_2017_0103_063308/sys_:1349:01-03 06:32:28.375747 879 879 I SystemServer: Camera Service开机动画log// 启动SurfaceFlinger服务:合成图像并显⽰到屏幕。启动该服务过程中会触发init启动⼀个bootanimation进程,其会开始启动动画显⽰,也就是我们看到的带“android”字样的启动动画02-11 20:10:53.143 473 473 I SurfaceFlinger: SurfaceFlinger is starting02-11 20:10:53.145 473 473 I SurfaceFlinger: SurfaceFlinger’s main thread ready to run. Initializing graphics H/W…// 开机动画开始387:SurfaceFlinger:]BOOTPROF: 7072.487169:BOOT_Animation:START// 开机动画结束
2023年6月21日发(作者:)
Android开机阶段log分析Android开机阶段log分析标签(空格分隔): 开关机流程Android开机阶段log分析 bootchart⼯具查看开机过程 打印开机过程各阶段的时间 kernel Init进程 Zygote进程 SystemServer进程 开机动画logbootchart⼯具查看开机过程Android版本:7.0平台:⾼通和MTK输出:-157.5kB 局部放⼤图:RTX截图未命名.png-1871.2kB 使⽤⽅法: 1.修改代码1) /system/core/init/ve the lines in L_SANITIZE := integer2)build and , flash into device如果没有此步骤,将导致⼿机不断重启,⽆法开机。2.抓取logadb shell 'echo 120 > /data/bootchart/start'数据采集完之后再将/data/bootchart/start删除,否则每次开机都会抓取log。3.数据采集与分析关机和开机(120S)后,采集的数据信息会⾃动收集到/data/bootchart⽬录下,包含如下5个⽂件:header,kernel_pacct,proc_,proc_,proc_$ system/core/init/调⽤bootchart⼯具解析⽣成的压缩包,⽣成图⽚,最后⼜⽤命令将图⽚打开(user版本也可以)。打印开机过程各阶段的时间⼯具:system/core/init/作⽤:打印开机过程各阶段的时间命令:./ --iterations=1 -v --output=备注:⼯程需要先lunch⼀下,否则有可能出现ImportError: No module named adb⽰例:Event log recorded: boot_progress_start (616) - 20409 msEvent log recorded: boot_progress_preload_start (616) - 22764 msEvent log recorded: boot_progress_preload_start (656) - 22780 msEvent log recorded: boot_progress_preload_end (616) - 25649 msEvent log recorded: boot_progress_preload_end (656) - 25776 msEvent log recorded: boot_progress_system_run (1351) - 25990 msEvent log recorded: boot_progress_pms_start (1351) - 26744 msEvent log recorded: boot_progress_pms_system_scan_start (1351) - 27309 msEvent log recorded: boot_progress_pms_data_scan_start (1351) - 30620 msEvent log recorded: boot_progress_pms_scan_end (1351) - 30677 msEvent log recorded: boot_progress_pms_ready (1351) - 32772 msEvent log recorded: boot_progress_ams_ready (1351) - 36251 msEvent log recorded: boot_progress_enable_screen (1351) - 39129 msEvent log recorded: sf_stop_bootanim (475) - 40908 msEvent log recorded: wm_boot_animation_done (1351) - 46139 msmean: 46139.0median: 46139standard deviation: 0.0Wrote: 释义:namedescription代表着Android屏幕点亮,开始显⽰启动动画,标志着kernel启动完成,本例中可以看出kernel启动耗时30s左右Zygote启动Zygote结束SystemServer ready,开始启动Android系统服务,如PMS,APMS等PMS开始扫描安装的应⽤PMS先⾏扫描/system⽬录下的安装包PMS扫描/data⽬录下的安装包PMS扫描结束PMS就绪AMS就绪AMS启动完成后开始激活屏幕,从此以后屏幕才能响应⽤户的触摸,它在WindowManagerService发出退boot_progress_enable_screen出开机动画的时间节点之前,⽽真正退出开机动画还会花费少许时间,具体依赖animation zip 包中的。wm_boot_animation_done才是⽤户感知到的动画结束时间节点SF设置属性值为1,标志系统要结束开机动画了,可以⽤来跟踪开机动画结尾部分消耗的时间开机动画结束,这⼀步⽤户能直观感受到开机结束boot_progress_startboot_progress_preload_startboot_progress_preload_endboot_progress_system_runboot_progress_pms_startboot_progress_pms_system_scan_startboot_progress_pms_data_scan_startboot_progress_pms_scan_endboot_progress_pms_readyboot_progress_ams_readysf_stop_bootanimwm_boot_animation_doneAndroid系统启动的log分为Linux内核的log和Android Logger系统的log,抓取的⽅法如下:$ adb shell dmesg > $ adb logcat -d -v time -b "main" > $ adb logcat -d -v time -b "system" > $ adb logcat -d -v time -b "events" > nel这⾥提下如何看kernel的log,开机后⽤命令:adb shell dmesg > 抓取Loglog⾥⾯搜关键字”Bootloader start count”–>LK 启动“Bootloader end count”–>LK 结束“Kernel MPM timestamp”–>bootloader运⾏完成Linux内核启动完成,⼀般都有如下的标准输出信息[ 3.980460] (1)[1:swapper/0]Freeing initrd memory: 2500K (ffffffc003600000 - ffffffc003871000)合并kernel config⼯具:kernel/msm-3.18/scripts/kconfig/msm-3./merge_⽅法:单独编译下kernel(make kernel -j8 PROJECT_NAME=cas_tr),然后去out⽬录下查看out/target/product/v11bnlite/obj/KERNEL_OBJ⽂件Init进程Init程序的log信息也位于⽂件中,我们可以通过检索“init”找到该程序的打印消息。通过检索“init starting”,我们可以找到init进程启动了哪些本地服务,如:1008:[ 10.630620] (0)[1:init]init: Starting service 'ueventd'...1122:[ 13.371655] (3)[1:init]init: Starting service 'logd'...1142:[ 14.824560] (1)[1:init]init: Starting service 'debuggerd'...1143:[ 14.831413] (1)[1:init]init: Starting service 'debuggerd64'...1144:[ 14.839197] (2)[1:init]init: Starting service 'vold'...1149:[ 15.135726] (3)[1:init]init: Starting service 'exec 1 (/system/bin/tzdatacheck)'...1151:[ 15.233418] (2)[1:init]init: Starting service 'perfd'...1154:[ 15.288520] (2)[1:init]init: Starting service 'carrier_switcher'...1156:[ 15.448583] (3)[1:init]init: Starting service 'logd-reinit'...1167:[ 15.833831] (0)[1:init]init: Starting service 'exec 2 (/_)'...1238:[ 16.640513] (1)[1:init]init: Starting service 'healthd'...1239:[ 16.647123] (1)[1:init]init: Starting service 'qcom-c_core-sh'...1240:[ 16.654727] (1)[1:init]init: Starting service 'irsc_util'...1242:[ 16.669672] (1)[1:init]init: Starting service 'rmt_storage'...1244:[ 16.687135] (1)[1:init]init: Starting service 'tftp_server'...Zygote进程Zygote进程所输出的log信息被放到/dev/log/main⽂件中了,因此,我们需要检索得到Zygote的log信息。zygote进程是在init进程中启动的,因此,我们从上⾯init进程的输出log中,检索”zygote”就可以找到zygote进程何时启动的,如图所⽰:[ 17.696441] (0)[1:init]init: Starting service ‘zygote’…Android系统为了提⾼应⽤程序的启动速度,会在Zygote进程初始化过程中加载⼀些常⽤的java class和资源⽂件到进程的内存中,从⽽共享常⽤的class和resourse资源。这个过程我们可以通过检索”preload”标签得到这个过程所消耗的时间,如图所⽰:./APLog_2017_0103_063308/main_:2894:01-03 06:32:18.105987 280 280 I Zygote : ...preloaded 4161 classes in 1457ms../APLog_2017_0103_063308/main_:3008:01-03 06:32:19.234774 280 280 I Zygote : ...preloaded 114 resources in 629ms../APLog_2017_0103_063308/main_:3024:01-03 06:32:19.301479 280 280 I Zygote : ...preloaded 41 resources in Server进程Zygote完成了初始化⼯作后就启动SystemServer进程了,SystemServer进程的log信息被放到了/dev/log/system⽂件中了,因此,我们需要检索⽂件得到SystemServer的log信息,如图所⽰:./APLog_2017_0103_063308/sys_:459:01-03 06:32:19.821505 879 879 I SystemServer: Entered the Android system server!./APLog_2017_0103_063308/sys_:489:01-03 06:32:20.744765 879 879 I SystemServer: StartPackageManagerService./APLog_2017_0103_063308/sys_:1334:01-03 06:32:28.256673 879 879 I SystemServer: StartOtaDexOptService./APLog_2017_0103_063308/sys_:1335:01-03 06:32:28.258833 879 879 I SystemServer: StartUserManagerService./APLog_2017_0103_063308/sys_:1343:01-03 06:32:28.344933 879 879 I SystemServer: /APLog_2017_0103_063308/sys_:1344:01-03 06:32:28.345094 879 879 I SystemServer: StartSchedulingPolicyService./APLog_2017_0103_063308/sys_:1346:01-03 06:32:28.349108 879 879 I SystemServer: StartTelephonyRegistry./APLog_2017_0103_063308/sys_:1347:01-03 06:32:28.358208 879 879 I SystemServer: StartEntropyMixer./APLog_2017_0103_063308/sys_:1349:01-03 06:32:28.375747 879 879 I SystemServer: Camera Service开机动画log// 启动SurfaceFlinger服务:合成图像并显⽰到屏幕。启动该服务过程中会触发init启动⼀个bootanimation进程,其会开始启动动画显⽰,也就是我们看到的带“android”字样的启动动画02-11 20:10:53.143 473 473 I SurfaceFlinger: SurfaceFlinger is starting02-11 20:10:53.145 473 473 I SurfaceFlinger: SurfaceFlinger’s main thread ready to run. Initializing graphics H/W…// 开机动画开始387:SurfaceFlinger:]BOOTPROF: 7072.487169:BOOT_Animation:START// 开机动画结束
发布评论