[摘]Android稳定性(二)bootup fail

广告也精彩

前言

之前我也有整理相关的,但没有摘抄的这篇文章那么详细,因此这里摘抄于此,方便自己查阅。

本文摘抄,感谢作者分析。

好记性不如烂笔头

正文

下面就简单介绍一下Android系统启动流程。

BootLoader启动

开机供电,硬件电路会产生一个确定的复位时序用于硬件启动顺序,直至最后CPU启动;CPU开始执行第一条指令,该指令所在的内存地址是固定的,这个固定内存地址保存的程序就是bootloader,常用的就是U-boot,其作用就是拉起操作系统,装载用户程序;

Linux系统启动

内核解压,Linux初始化各种软硬件环境,加载驱动程序,挂载根文件系统,执行init服务;

init进程

init 进程是 Linux 系统中用户空间的第一个进程,进程号为1;init进程做两件事:挂载目录,解析init.rc;

Zygote 进程

init 进程在解析init.rc脚本时创建Zygote进程,Zygote是Android系统所有应用的父进程,都是由Zygote进程Fork出来的;

SystemServer进程

Zygote进程初始化完成后去启动SystemServer进程,SystemServer进程去启动framework的各种核心服务;

系统启动完成

ACTION_BOOT_COMPLETED开机广播发出,系统启动完成

bootup fail问题分析(以MTK平台为例)

抓取UART串口log,使用自带MTKLogger,同时抓取正常log对比。(对于启动流程分析,这种分析很不错)

根据关键字检索,查看是挂在开机启动那个阶段,哪行函数执行出错

“lk finished --> jump to linux kernel”----表示lk完成,进入kernel

“Kernel_init_done”--------------------------表示kernel初始化完成

“init: init first stage started”----------------表示init进程正常起来执行

“fs_mgr” 和"e2fsck"-------------------------表示在检查和mount 文件系统

“zygote”----------------------------------------表示zygote进程启动

“system_server”-----------------------------表示system_server进程启动

“BOOT_Animation:END”------------------表示开机动画正常结束

“BOOTPROF”--------------------------------开机过程中,每一个重要阶段都会打印的标志

“1:init”-------------------------------------------init阶段重要log打印

开机动画对应的启动阶段

  1. Linux内核启动的静态画面,具体在kernel/drivers/video/fbmem.c
  2. Init进程启动过程中出现的静态画面,具体在system/core/init/init.c
  3. 系统服务启动过程中出现的动态画面,实现是在init.rc里添加了一个bootAnimation的服务,启动的时机是在surfaceFlinger启动后,改变一个系统变量,执行开机动画,等launcher起来后,AMS通知surfaceFlinger改变变量值,开机动画退出。

参考文章

  1. Android稳定性(二)bootup fail

广告也精彩
版权声明:125la.com站长 发表于 2021年7月5日 下午7:57 。
转载请注明: [摘]Android稳定性(二)bootup fail | 125啦读书导航

相关文章

广告也精彩

暂无评论

暂无评论...
广告也精彩