android开机流程/android启动流程概述

转自参考链接:

1.linux系统启动

Android系统启动流程的前几步:
1.固化在ROM的引导芯片代码开始执行,加载引导程序Bootloader到RAM上。
2.引导程序Bootloader开始执行//相当于PC的BIOS
3.启动linux内核启动
设置缓存、被保护存储器、计划列表,加载驱动。当内核完成系统设置,它首先在系统文件中寻找”init”文件,然后启动root进程或者系统的第一个进程。

Linux系统启动
这个阶段启动了Linux,Android是基于linux的,而Android系统是启动init后启动的

2.init进程启动

init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init。开机动画也是在里面启动的

启动Zygote
init进程主要任务是:

  1. 挂在文件和目录
  2. 读取int.rc配置文件,启动Zygote和ServiceManger
  3. 启动属性服务,读取默认属性(定义在system/build.prop)和监听属性
  4. SurfaceFlinger服务启动时,它会通过修改系统属性ctl.start的值来通知init进程启动应用程序bootanimation,然后播放开机动画. 当System进程将系统中的关键服务都启动起来之后,ActivityManagerService服务就会通知SurfaceFlinger服务boot Finished接着修改系统属性ctl.stop的值,以便可以通知init进程停止执行应用程序bootanimation
  5. 最最主要的就是启动Zygote.

3.启动Zygote进程

在Android系统中,JavaVM(Java虚拟机)、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们也将它称为孵化器。它通过fock(复制进程)的形式来创建应用程序进程和SystemServer进程,由于Zygote进程在启动时会创建JavaVM,因此通过fock而创建的应用程序进程和SystemServer进程可以在内部获取一个JavaVM的实例拷贝。
启动SystemServer

  1. Zygote在启动的时候创建了java虚拟机
  2. JNI调用ZygoteInit的main函数后,Zygote便进入了Java框架层
  3. Zygote启动SystemService
  4. Zygote创建Socket,等待AMS启动新进程的请求

4.启动SystemServer

1.启动Binder线程池,这样就可以与其他进程进行通信。
2.创建SystemServiceManager用于对系统的服务进行创建、启动和生命周期管理。
3.启动各种系统服务。

启动各种服务
Zygote启动SyetemServer进程

  1. RuntimeInit.java的nativeZygoteInit函数主要做的就是启动Binder线程池
  2. 调用SyetemServer进程的Main函数
  3. SystemService启动引导服务,核心服务,其他服务

引导服务:

  • Installer 系统安装apk时的一个服务类,启动完成Installer服务之后才能启动其他的系统服务
  • ActivityManagerService 负责四大组件的启动、切换、调度。
  • PackageManagerService 用来对apk进行安装、解析、删除、卸载等等操作

核心服务:

  • BatteryService 管理电池相关的服务

其他服务:

  • InputManagerService 管理输入事件
  • WindowManagerService 窗口管理服务
  • AudioService 音频相关管理服务
发布了67 篇原创文章 · 获赞 42 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/w1764662543/article/details/85618957