Android系统架构篇
2017-11-30 18:38
148 查看
摘自:《深入解析Android5.0系统》
Android的启动过程可以分为bootloader引导、装载和启动Linux内核、启动Android系统三个大的阶段。
其中Android系统的启动还可以细分为启动Init进程、启动Zygote进程、启动SystemService、启动SystemServer、启动Home等多个阶段。
Android启动过程如图所示:
Android设备的启动过程
1.Bootloader引导
当我们按下手机的电源,最先运行的就是bootloader。bootloader的主要作用是初始化基本的硬件(如cpu、内存、Flash等)并且通过建立内存空间映射,为装载Linux内核准备好合适的运行环境。一旦Linux内核装载完毕,bootloader就会从内存中清除掉。
如果用户在Bootloader运行期间,按下预定义的组合键,可以进入系统的更新模块。Android的下载更新可以选择进入Fastboot模式或者Recover模式。
FastBoot是Android设计的一套通过USB来更新手机分区映像的协议,方便开发人员能快速更新指定的手机分区。
Recovery模式是Android特有的升级系统。利用Recovery模式,手机可以进行恢复出厂设置,或者执行OTA、补丁和固件升级。进入Recovery模式实际上是启动了一个文本模式的Linux。
2.装载和启动Linux进程
Android的boot.img存放的就是Linux内核和一个根文件系统。Bootloader会把boot.img映象装载进内存。然后Linux内核会执行整个系统的初始化,完成后装载根文件系统,最后启动Init进程。
3.启动Init进程
Linux内核加载完毕后,会首先启动Init进程,Init进程是系统的第一个进程。在Init进程的启动过程中,会解析Linux的配置脚本init.rc文件。根据init.rc文件的内容,Init进程会装载Android的文件系统、创建系统目录、初始化属性系统、启动Android系统重要的守护进程,这些进程包括USB守护进程、adb守护进程、vold守护进程、rild守护进程等。
4.启动ServiceManager
ServiceManager由Init进程启动。它的主要作用是管理Binder服务,负责Binder服务的注册与查找。
5.启动Zygote进程
Init进程初始化结束时,会启动Zygote进程。Zygote进程负责fork出应用进程,是所有应用进程的父进程。Zygote进程初始化时会创建Dalivik虚拟机、预装载系统的资源文件和Java类。所有从Zygote进程fork出来的用户进程将继承和共享这些预加载的资源,不用浪费时间重新加载,加快了应用程序的启动过程。启动结束后,Zygote进程也将变为守护进程,负责响应启动APK应用程序的请求。
6.启动SystemServer
SystemServer是Zygote进程fork出的第一个进程,也是整个Android系统的核心进程。在SystemServer中运行着Android系统大部分Binder服务。SystemServer首先启动本地服务SensorService;接着启动包括ActivityManagerService、WindowManagerService、PackManagerService在内的所有Java服务。
7.启动MediaServer
MediaServer由Init进程启动。它包含了一些多媒体相关的本地Binder服务,包括:CameraService、AudioFlingerService、MediaPlayerService和AudioPolicyService。
8.启动Launcher
SystemServer加载完所有Java服务后,最后会调用ActivityManagerService的SystemReady()方法。在这个方法的执行中,会发出Intent“android.intent.category.HOME“。凡是响应这个Intent的apk应用都会运行起来,Launcher应用是Android系统默认的桌面应用,一般只有它会响应这个Intent,因此,系统开机后,第一个运行的应用就是Launcher。
1)Linux内核 ——为Android设备各种硬件提供底层驱动
2)系统运行库 ——c/c++库为Android系统提供主要特性支持,SQLite库提供数据库支持,OpenGL|ES库提供3D绘 图支持,Webkit库提供浏览器内核支持,Dalvik虚拟机使每一个Android应用独立运行
3)应用框架层 ——-应用程序用到的API(Activity Manager 、Window Manager、Content Providers、View System、Notification Manager、Package Manager 、Telephony Manager 、Resource Manager 、 Location Manager 、XMPP Service)
4)应用层 ——应用程序
1.android目录结构
|– Makefile (全局的Makefile)
|– bionic (Bionic含义为仿生,这里面是一些基础的库的源代码)
|– bootloader (引导加载器)
|– build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)
|– dalvik (JAVA虚拟机)
|– development (程序开发所需要的模板和工具)
|– external (目标机器使用的一些库)
|– frameworks (应用程序的框架层)
|– hardware (与硬件相关的库)
|– kernel (Linux2.6的源代码)
|– packages (Android的各种应用程序)
|– prebuilt (Android在各种平台下编译的预置脚本)
|– recovery (与目标的恢复功能相关)
|– system (Android的底层的一些库)
Android的启动过程可以分为bootloader引导、装载和启动Linux内核、启动Android系统三个大的阶段。
其中Android系统的启动还可以细分为启动Init进程、启动Zygote进程、启动SystemService、启动SystemServer、启动Home等多个阶段。
Android启动过程如图所示:
Android设备的启动过程
1.Bootloader引导
当我们按下手机的电源,最先运行的就是bootloader。bootloader的主要作用是初始化基本的硬件(如cpu、内存、Flash等)并且通过建立内存空间映射,为装载Linux内核准备好合适的运行环境。一旦Linux内核装载完毕,bootloader就会从内存中清除掉。
如果用户在Bootloader运行期间,按下预定义的组合键,可以进入系统的更新模块。Android的下载更新可以选择进入Fastboot模式或者Recover模式。
FastBoot是Android设计的一套通过USB来更新手机分区映像的协议,方便开发人员能快速更新指定的手机分区。
Recovery模式是Android特有的升级系统。利用Recovery模式,手机可以进行恢复出厂设置,或者执行OTA、补丁和固件升级。进入Recovery模式实际上是启动了一个文本模式的Linux。
2.装载和启动Linux进程
Android的boot.img存放的就是Linux内核和一个根文件系统。Bootloader会把boot.img映象装载进内存。然后Linux内核会执行整个系统的初始化,完成后装载根文件系统,最后启动Init进程。
3.启动Init进程
Linux内核加载完毕后,会首先启动Init进程,Init进程是系统的第一个进程。在Init进程的启动过程中,会解析Linux的配置脚本init.rc文件。根据init.rc文件的内容,Init进程会装载Android的文件系统、创建系统目录、初始化属性系统、启动Android系统重要的守护进程,这些进程包括USB守护进程、adb守护进程、vold守护进程、rild守护进程等。
4.启动ServiceManager
ServiceManager由Init进程启动。它的主要作用是管理Binder服务,负责Binder服务的注册与查找。
5.启动Zygote进程
Init进程初始化结束时,会启动Zygote进程。Zygote进程负责fork出应用进程,是所有应用进程的父进程。Zygote进程初始化时会创建Dalivik虚拟机、预装载系统的资源文件和Java类。所有从Zygote进程fork出来的用户进程将继承和共享这些预加载的资源,不用浪费时间重新加载,加快了应用程序的启动过程。启动结束后,Zygote进程也将变为守护进程,负责响应启动APK应用程序的请求。
6.启动SystemServer
SystemServer是Zygote进程fork出的第一个进程,也是整个Android系统的核心进程。在SystemServer中运行着Android系统大部分Binder服务。SystemServer首先启动本地服务SensorService;接着启动包括ActivityManagerService、WindowManagerService、PackManagerService在内的所有Java服务。
7.启动MediaServer
MediaServer由Init进程启动。它包含了一些多媒体相关的本地Binder服务,包括:CameraService、AudioFlingerService、MediaPlayerService和AudioPolicyService。
8.启动Launcher
SystemServer加载完所有Java服务后,最后会调用ActivityManagerService的SystemReady()方法。在这个方法的执行中,会发出Intent“android.intent.category.HOME“。凡是响应这个Intent的apk应用都会运行起来,Launcher应用是Android系统默认的桌面应用,一般只有它会响应这个Intent,因此,系统开机后,第一个运行的应用就是Launcher。
1)Linux内核 ——为Android设备各种硬件提供底层驱动
2)系统运行库 ——c/c++库为Android系统提供主要特性支持,SQLite库提供数据库支持,OpenGL|ES库提供3D绘 图支持,Webkit库提供浏览器内核支持,Dalvik虚拟机使每一个Android应用独立运行
3)应用框架层 ——-应用程序用到的API(Activity Manager 、Window Manager、Content Providers、View System、Notification Manager、Package Manager 、Telephony Manager 、Resource Manager 、 Location Manager 、XMPP Service)
4)应用层 ——应用程序
1.android目录结构
|– Makefile (全局的Makefile)
|– bionic (Bionic含义为仿生,这里面是一些基础的库的源代码)
|– bootloader (引导加载器)
|– build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)
|– dalvik (JAVA虚拟机)
|– development (程序开发所需要的模板和工具)
|– external (目标机器使用的一些库)
|– frameworks (应用程序的框架层)
|– hardware (与硬件相关的库)
|– kernel (Linux2.6的源代码)
|– packages (Android的各种应用程序)
|– prebuilt (Android在各种平台下编译的预置脚本)
|– recovery (与目标的恢复功能相关)
|– system (Android的底层的一些库)
相关文章推荐
- 转:【君子工作室】Android第五季------认识Android系统内核架构(MIUI为例)
- Android的系统架构
- Android四款系统架构工具
- Android睡眠唤醒机制--系统架构
- Android系统架构的详细解析
- Android系统架构介绍
- android_系统架构笔记之--android系统层次
- Android系统架构基本模式解析
- 【第一行代码】Android系统架构
- Android系统架构基本模式解析
- Android开发学习之路--Android系统架构初探
- Android系统架构
- Android系统特性和系统架构
- Android的系统架构解析
- Android存储系统的架构与设计
- Android图形系统的分析与移植--二、Android显示系统软件架构分析
- Android系统架构
- Android进阶之旅 - 系统架构篇
- Android源码笔记——Camera系统架构