Android系统启动流程总结概要

1、启动电源以及系统启动

当电惊按下时引导芯片代码从预定义的地方(固化在 ROM )开始执行。加载引导程序
BootLoader RAM ,然后执行。

2、引导程序 Bootloader

引导程序 BootLoader 是在 Android 操作系统开始运行前的 个小程序,它的主要作
用是把系统 OS 拉起来并运行。

3、Linux 内核启动

  当内核启动 ,设置缓存、被保护存储器、计划列表、加载驱动。当内核完成系统设
置时,它首先在系统文件中寻找 init.rc 文件,并启动 init 进程。

4、init 进程启动

  init 程启动做了很多的工作,总的来说主要做了以下几件事:
	(1)  创建和挂载启动所的文件目 录。
	(2)初始化和启动属性服务。
	(3)解析 init.rc 配置文件并启动 Zygote 进程。
	(4)解析 init.rc 配置文件并启动ServiceManager进程。

5、ServiceManager启动流程:

	(1)打开binder驱动,并调用mmap()方法分配128k的内存映射空间:binder_open()。
	(2)通知binder驱动使其成为守护进程:binder_become_context_manager();
	(3)验证selinux权限,判断进程是否有权注册或查看指定服务;
	(4)进入循环状态,等待Client端的请求:binder_loop()。
	(5)注册服务的过程,根据服务名称,但同一个服务已注册,重新注册前会先移除之前的注册信息。
	(6)死亡通知: 当binder所在进程死亡后,会调用binder_release方法,然后调用
	binder_node_release这个过程便会发出死亡通知的回调.

	ServiceManager最核心的两个功能为查询和注册服务:
		注册服务:记录服务名和handle信息,保存到svclist列表;
		查询服务:根据服务名查询相应的的handle信息。		

6、Zygote 进程启动

  Zygote 进程启动共做了如下几件事
	(1)创建 AppRuntime 并调用其 start 方挂,启动 Zygote 进程。
	(2)创建 Java 虚拟机并为 Java 虚拟机注册 JNI 方法
	(3)通过刑 周用 Zygotelnit main 函数进入 Zygote Java 框架层。
	(4)通过 registerZygoteSocket方怯创建服务器端 Socket ,并通过 runSelectLoop方怯
	等AMS的请求来创建新的应用程序进程。
	(5)启动 SystemServer 进程。

7、SystemServer 进程被创建后,主要做了如下工作:

	(1)启动 Binder 线程池,这样就可以与其他进程进行通信
	(2)创建 SystemServiceManager ,其用于对系统的服务进行创建、启动和生命周期管理。
	(3)启动各种系统服务。(系统服务分为了三种类型,分别是引导服务、核心服务和其他
		服务,其中其他服务是一些非紧要和不需要立即启动的服务,PMS、AMS属于核心服务)

8、Launcher 启动

   SystemServer 进程在启动的过程中会启动PackageManagerService,PackageManagerService
   启动后会将系统中的应用程序安装完成。在此前已经启动的AMS会将Launcher启动起来。
   SystemServer 进程启动的AMS会启动Launcher, Launcher 启动后会将己安装应用的快捷图标
   显示到界面上。

如下是系统启动的流程
在这里插入图片描述

这篇文章都是看《Android进阶解密》做的笔记

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值