Android大致启动过程如图(基于O版本  使用draw.io画的)。

注:这是通过查询结合自己了解的,还有不少不明确的,后续有进展完善,欢迎指正。

说明:绿色是主要几个的阶段。其他围绕这几个阶段的重要过程。

启动过程(绿色的):

1.按下电源,引导芯片从预定义的地方(固化在ROM中),加载引导程序到RAM。

2.引导程序:BootLoader,Android内核启动前的程序,为内核运行提供必要的条件。a,检测外部的RAM以及加载对第二阶段有用的程序;b,引导程序设置网络、内存等。

3.内核:内核的启动后,设置缓存,受保护的内存,调度和加载驱动程序。 当内核完成系统设置时,它会在系统文件中查找“init”。

4.init进程:两个主要责任(1)挂在目录(2)运行init.rc脚本。

5.Zygote:虚拟器进程,预加载和初始化核心库。

Zygote会执行一个app_process可执行文件,在这个文件中首先添加了Android运行时环境,在Android运行时中调用了ZygoteInit.java,这就从c++代码跳到了java代码。
在ZytofeInit.java代码中首先设置了Java虚拟机的堆内存空间,然后启动一个类加载器加载Android启动依赖的类比如Activity等四大组件,dialog等UI的类,然后分出一个子进程启动SystemServer系统服务

6.系统服务:如电源管理器,电话注册,上下文管理器等。

7.引导完成:ACTION_BOOT_COMPLETED开机启动广播发出。

开机过程的关键log[串口log]

  • "Preparing for EL3 exit to normal world, LK"

如果串口log里面没有走到这里,说明在PL就卡住了,这句表示进入LK

  • "lk finished --> jump to linux kernel"

如果串口log里面没有走到这里,但是上面走到了,说明在lk卡住了,这句表示进入kernel

  • "Kernel_init_done"

这句表示kernel初始化完成了,正准备启动init进程,如果这就没有走到:请搜索关键字initcall,
initcall是顺序执行例如module_init注册的init函数,看看卡在哪个call back上

  • "BOOTPROF"

这是开机过程中,每走过一个重要阶段都会打印的标志,例如上面Kernel_init_done这一句就会打上这个标志

  • "init: init first stage started"

这句表示init进程正常起来执行

  • "fs_mgr" 和"e2fsck"

这里标志是在检查和mount 文件系统,如果失败会有如下log:fs_mgr_mount_all returned an error                           fs_mgr_mount_all returned unexpected error 255

  • "zygote"

Starting service 'zygote':这里表示要启动zygote,如果没有这一句表示zygote还没启动,则要检查之前的initrc                 执行情况,文件系统mount情况

  • "SysServerInit_START"

启动system_server

  • "system_server"

这里表示system_server有起来

  • "BOOT_Animation:END"

表示开机动画正常结束,进入安卓

Android启动过程_大致流程的更多相关文章

  1. Android 儿子Activity在启动过程中的流程组件 && 儿子Activity在一个新的进程组件启动过程

    1.儿子Activity在启动过程中的流程组件 在Android Activity启动过程http://blog.csdn.net/jltxgcy/article/details/35984557一文 ...

  2. Android(java)学习笔记162:Android启动过程(转载)

    转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...

  3. Android启动过程深入解析

    本文由 伯乐在线 - 云海之巅 翻译.未经许可,禁止转载!英文出处:kpbird.欢迎加入翻译小组. 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样的? 什么是Li ...

  4. Android启动过程深入解析【转】

    转自:http://www.open-open.com/lib/view/open1403250347934.html 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么 ...

  5. Android(java)学习笔记105:Android启动过程(转载)

    转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...

  6. Android 核心分析 之八Android 启动过程详解

    Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ...

  7. Android启动过程以及各个镜像的关系

    Android启动过程 Android在启动的时候,会由UBOOT传入一个init参数,这个init参数指定了开机的时候第一个运行的程序,默认就是init程序,这个程序在ramdisk.img中.可以 ...

  8. Android系统启动流程(四)Launcher启动过程与系统启动流程

    此前的文章我们学习了init进程.Zygote进程和SyetemServer进程的启动过程,这一篇文章我们就来学习Android系统启动流程的最后一步:Launcher的启动流程,并结合本系列的前三篇 ...

  9. Android 启动过程总结

    SystemServer的启动 frameworks/base/services/java/com/android/server/SystemServer.java: run() 其中调用Activi ...

随机推荐

  1. 在TX2上多线程读取视频帧进行caffe推理

    参考文章:Multi-threaded Camera Caffe Inferencing TX2之多线程读取视频及深度学习推理 背景 一般在TX2上部署深度学习模型时,都是读取摄像头视频或者传入视频文 ...

  2. unittest 中的方法调用时报错 ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTest

    1.调用unittest中的方法时报错: ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTe ...

  3. 如何使用thrift 服务引擎组件

    在本文中将介绍如果通过thrift 组件集成到surging 微服务引擎中,然后可以选择dotnetty 或thrift作为服务远程调用RPC,也可以通过其它语言的thrift 调用surging 服 ...

  4. 数据库——数据库SQL语句大全,最常用的SQL语句

    检索数据 检索单个列: SELECT pname FROM product 检索多个列: SELECT pname,market_price,is_hot FROM product 检索所有列: SE ...

  5. HC32F003C4PA GPIO Output

    1.打开启动文件,找到并跳转至SystemInit函数 void SystemInit(void) { stc_clk_systickcfg_t stcCfg; // TODO load trim f ...

  6. Unity 游戏框架搭建 2019 (四十六) 简易消息机制 & 集成到 MonoBehaviourSimplify 里

    在上一篇,我们接触了单例,使用单例解决了我们脚本之间访问的问题. 脚本之间访问其实有更好的方式. 我们先分下脚本访问脚本的几种形式. 第一种,A GameObject 是 B GameObject 的 ...

  7. 导出jar包和api文档

    导出jar包过程 右击项目名称->export 选择java->JAR file next->选择路径 导出成功 生成api文档 选择doc->右键export java-&g ...

  8. tp5 一次性插入大量数据时分批处理

    如题,加入$arr 中有一万多条数据,如果直接使用insert插入的话就会报错,此时可以使用limit分批插入 $result = Db::connect($this->dbconfig()) ...

  9. Gradle 多环境URL请求设置

    在开发过程中,多环境配置是经常遇到的,比如在Android开发过程中,在不同环境上请求服务器的URL是不同的,使用Gradle进行管理,是非常方便的. 首先查看工程目录结构: 使用AndroidStu ...

  10. srping mvc RequestMapping实现

    spring mvc中定义请求的url只需要在方法上添加注解: @RequestMapping("aa.mvc")即可定义访问的url地址,但是你是否有考虑过为什么添加这个注解就可 ...