Andriod 系统启动流程

目录

前言

内容

1.启动加载器-BootLoader

2.init进程

3.Zygote进程

4.system_server进程

总结


1.Android系统启动流程

前言

对于Android应用层开发者来讲,更多的可能是基于Android系统,开发自己的应用来实现各种需求。这就好比造飞船,作为应用层,属于在飞船的某个部位进行功能的对接或者是维修,虽然并不一定要求我们了解整个飞船的每个细节是如何制作和实现的,但了解整个飞船的原理是很重要的,这可以提高维修的效率,减少出错。

内容

1.启动加载器-BootLoader

以Linux系统为例,当物理触发设备开机后,系统将先加载boot下的内核文件,当加载完成后,会建立系统第一个进程init进程,这个进程主要是完成系统环境的初始化,它的进程pid进程编号为1,通过init进程完成其他各个模块的初始化。

同理,因为Android是基于Linux系统的,所以它的启动流程大致也是如此,不同的是由于Android并没有像PC那样的BIOS程序,所以取而代之的就是这个Bootloader-启动加载器。它的功能也是在系统启动前进行各种硬件环境的初始化,建立内存影像图,为系统加载准备好环境。

2.init进程

当第一步BootLoader启动后会拉起Linux系统,系统内核加载完成后会创建init进程,通过init进程完成系统的环境初始化。在进程创建的时候,系统将会去解析一个init.rc的文件,这个文件类似一个配置文件,是由ALL(Android Init Language)语言编写的。这一步在系统源码中,主要通过 /system/core/init/Init.cpp进行完成的,init.cpp的main方法会去调用一个LoadBootScripts方法完成对init的解析。

在init.rc解析的时候,会创建一个zygote的进程,在这个zygote进程中,会启动以下几个服务:

  • audioservice
  • cameraservice
  • media
  • netd
  • wificond

在这个过程中,已经可以在Android设备上看到logo了,最开始开机的那个logo标识。

3.Zygote进程

zygote进程可以算作是Android Framework层最核心的基础,当它启动,标志着Android Framework框架开始进行初始化。它主要的功能分为以下几点

  • 为每一个App创建JVM,注册JIN函数到虚拟机
  • 预加载Java类和资源
  • fork出SystemSserver进程
  • 监听处理新的fork请求,类似守护进程

4.system_server进程

该进程在zygote进程中完成创建和初始化,它的主要作用就是初始化系统上下文,设置系统主题,启动Binder线程池进程,启动SystemServiceManager进程。

通过zogote,SystemSserver,SystemServiceManager这三个进程一起合作,来开启Android系统中各种服务(ActivityManagerService,PackageManagerService,WindowManagerService,BatteryService,CameraManagerSerivce等等,总计有80多个服务,这里不过多列举)。所有的服务启动完后都会注册到SystemService中。

ActivityManagerSerivce启动完成后,会启动SystemUI,WebViewFactory,最后启动系统的桌面应用-Launcher App。

这个时候就可以看到Android设备的桌面了。

总结

整个Android系统还是很复杂的,包括Bootloader这个东西的结构,在不同的厂商CPU上,结构是有不同的。而系统的启动流程大概可以理解为

系统初始化创建init进程 → 启动zygote进 → fork出SystemService进程→启动SystemServiceManager进程

然后通过zogote,SystemSserver,SystemServiceManager三个进程完成对系统服务初始化并启动桌面程序。

本文也只是讲到了Android 设备启动的主要流程,并没有进入深入的研究,像init.rc是如何被解析的,已经zygote进程如何创建并启动的,还有设备service如何被启动的,这些都需要进一步的去学习源码。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值