Android启动过程_大致流程
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启动过程_大致流程的更多相关文章
- Android 儿子Activity在启动过程中的流程组件 && 儿子Activity在一个新的进程组件启动过程
1.儿子Activity在启动过程中的流程组件 在Android Activity启动过程http://blog.csdn.net/jltxgcy/article/details/35984557一文 ...
- Android(java)学习笔记162:Android启动过程(转载)
转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...
- Android启动过程深入解析
本文由 伯乐在线 - 云海之巅 翻译.未经许可,禁止转载!英文出处:kpbird.欢迎加入翻译小组. 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样的? 什么是Li ...
- Android启动过程深入解析【转】
转自:http://www.open-open.com/lib/view/open1403250347934.html 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么 ...
- Android(java)学习笔记105:Android启动过程(转载)
转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...
- Android 核心分析 之八Android 启动过程详解
Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ...
- Android启动过程以及各个镜像的关系
Android启动过程 Android在启动的时候,会由UBOOT传入一个init参数,这个init参数指定了开机的时候第一个运行的程序,默认就是init程序,这个程序在ramdisk.img中.可以 ...
- Android系统启动流程(四)Launcher启动过程与系统启动流程
此前的文章我们学习了init进程.Zygote进程和SyetemServer进程的启动过程,这一篇文章我们就来学习Android系统启动流程的最后一步:Launcher的启动流程,并结合本系列的前三篇 ...
- Android 启动过程总结
SystemServer的启动 frameworks/base/services/java/com/android/server/SystemServer.java: run() 其中调用Activi ...
随机推荐
- 数学--博弈论--巴什博奕(Bash Game)
终于也轮到我做游戏了,他们做了好几个月的游戏了. 巴什博弈: 两个人做游戏,取石子,一个人最多可以可以取M个,至少取1个,最后取完的赢. 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先 ...
- 洛谷P1771 方程的解
P1771 方程的解 都知道这个题可以用隔板法做 把这个\(g(x)\)想象为.....\(g(x)\)个苹果? 因为解是正整数,所以给这些"苹果"分组的时候每组最少有一个 然后我 ...
- python(递归函数)
1.描述: 递归函数:在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 2.递归函数特性: 必须有一个明确的结束条件: 每次进入更深一层递归时,问题规模相比上次递归 ...
- kafka可插拔增强如何实现?
导弹拦截,精准防御. 背景 拦截器:在不修改应用程序业务逻辑的情况下,一组基于事件的可插拔的逻辑处理链: 类比springMVC的拦截器: 这些都是通过配置拦截器,插入到应用程序中,实现可插拔的修改业 ...
- Minimum Euler Cycle(找规律+模拟)
\(给你一个nnn个结点的完全有向图,求其字典序最小的欧拉回路,输出lll到rrr之间的结点为多少.\) 模拟一下n=5的时候 开始肯定是1-2-1-3-1-4-1-5 注意这个时候不能再从5到1,否 ...
- java基础篇 之 异常丢失
我们看如下代码: @Slf4j public class Test { public static void main(String[] args) { try { try { test(); } f ...
- 201771010113 李婷华 《面向对象程序设计(Java)》第十一周总结
一.理论知识部分 第九章 集合 1.数据结构介绍: 线性结构:线性表,栈,队列,串,数组,文件.非线性结构:树,图. 散列表:又称为哈希表. 散列表算法的基本思想是:以结点的关键字为自变量,通过一定 ...
- blesta运行造成阿里云服务器CPU频繁超载的原因分析
博主在阿里云服务器上安装了主机软件Blesta后,阿里云后台频繁提示CPU超载,打开突发性能模式后,发现CPU负载到了100%.如下图所示: 直接在putty里面reboot整个系统后,负载瞬间降为2 ...
- Coursera课程笔记----C程序设计进阶----Week 4
指针(一) (Week 4) 什么是"指针" 互联网上的资源--地址 当获得一个地址,就能得到该地址对应的资源,所以可以把"网址"称为指向资源的"指针 ...
- 遍历HashMap常用的的三种方式
遍历HashMap常用的的三种方式 HashMap是我们使用非常多的集合之一,下面就来介绍几种常用的HashMap的遍历方式. 1.首先定义一个新的HashMap,并往里面添加一些数据. HashMa ...