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

Android 3xcn.com@站长2021年7月5日 pm7:57发布3年前 (2021)更新
0
导航号,我的单页导航
目录

前言

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

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

好记性不如烂笔头

正文

下面就简单介绍一下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

版权声明 1、 本站名称 91易搜
2、 本站网址 https://www.91es.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权请留言
4、 本站禁止发布或转载任何违法的相关信息,如有发现请向站长举报
导航号,我的单页导航

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

暂无评论...