[Android取经之路] 的源码都基于Android-Q(10.0) 进行分析
[Android取经之路] 系列文章:
《系统启动篇》
Android系统架构Android是怎么启动的Android 10.0系统启动之init进程Android10.0系统启动之Zygote进程Android 10.0 系统启动之SystemServer进程Android 10.0 系统服务之ActivityMnagerServiceAndroid10.0系统启动之Launcher(桌面)启动流程Android10.0应用进程创建过程以及Zygote的fork流程Android 10.0 PackageManagerService(一)工作原理及启动流程Android 10.0 PackageManagerService(二)权限扫描Android 10.0 PackageManagerService(三)APK扫描Android 10.0 PackageManagerService(四)APK安装流程 《日志系统篇》
Android10.0 日志系统分析(一)-logd、logcat 指令说明、分类和属性Android10.0 日志系统分析(二)-logd、logcat架构分析及日志系统初始化Android10.0 日志系统分析(三)-logd、logcat读写日志源码分析Android10.0 日志系统分析(四)-selinux、kernel日志在logd中的实现 《Binder通信原理》:
Android10.0 Binder通信原理(一)Binder、HwBinder、VndBinder概要Android10.0 Binder通信原理(二)-Binder入门篇Android10.0 Binder通信原理(三)-ServiceManager篇Android10.0 Binder通信原理(四)-Native-C\C++实例分析Android10.0 Binder通信原理(五)-Binder驱动分析Android10.0 Binder通信原理(六)-Binder数据如何完成定向打击Android10.0 Binder通信原理(七)-Framework binder示例Android10.0 Binder通信原理(八)-Framework层分析Android10.0 Binder通信原理(九)-AIDL Binder示例Android10.0 Binder通信原理(十)-AIDL原理分析-Proxy-Stub设计模式Android10.0 Binder通信原理(十一)-Binder总结
《HwBinder通信原理》
HwBinder入门篇-Android10.0 HwBinder通信原理(一) HIDL详解-Android10.0 HwBinder通信原理(二)HIDL示例-C++服务创建Client验证-Android10.0 HwBinder通信原理(三)HIDL示例-JAVA服务创建-Client验证-Android10.0 HwBinder通信原理(四)HwServiceManager篇-Android10.0 HwBinder通信原理(五)Native层HIDL服务的注册原理-Android10.0 HwBinder通信原理(六)Native层HIDL服务的获取原理-Android10.0 HwBinder通信原理(七)JAVA层HIDL服务的注册原理-Android10.0 HwBinder通信原理(八)JAVA层HIDL服务的获取原理-Android10.0 HwBinder通信原理(九)HwBinder驱动篇-Android10.0 HwBinder通信原理(十)HwBinder原理总结-Android10.0 HwBinder通信原理(十一) 《编译原理》
编译系统入门篇-Android10.0编译系统(一)编译环境初始化-Android10.0编译系统(二)make编译过程-Android10.0编译系统(三)Image打包流程-Android10.0编译系统(四)Kati详解-Android10.0编译系统(五)Blueprint简介-Android10.0编译系统(六)Blueprint代码详细分析-Android10.0编译系统(七)Android.bp 语法浅析-Android10.0编译系统(八)Ninja简介-Android10.0编译系统(九)Ninja提升编译速度的方法-Android10.0编译系统(十)Android10.0编译系统(十一)
上一节回顾了一下Android的系统架构,这一节,主要来看看Android系统是怎么启动的。
概述: BootRom->BootLoader->Linux Kernel->Init->Zygote->SystemServer->Launcher BootLoader层:主要包括Boot Rom和Boot Loader Kernel层:主要是Android内核层 Native层:主要是包括init进程以及其fork出 来的用户空间的守护进程、HAL层、开机动画等 JAVA Framework层:主要是AMS和PMS等Service的初始化 Application层:主要指SystemUI、Launcher的启动 Android架构图如下,图片来源于Gityuan
Android 系统启动流程:
第一步:手机开机后,引导芯片启动,引导芯片开始从固化在ROM里的预设代码执行,加载引导程序到到RAM,bootloader检查RAM,初始化硬件参数等功能; 第二步:硬件等参数初始化完成后,进入到Kernel层,Kernel层主要加载一些硬件设备驱动,初始化进程管理等操作。在Kernel中首先启动swapper进程(pid=0),用于初始化进程管理、内管管理、加载Driver等操作,再启动kthread进程(pid=2),这些linux系统的内核进程,kthread是所有内核进程的鼻祖; 第三步:Kernel层加载完毕后,硬件设备驱动与HAL层进行交互。初始化进程管理等操作会启动INIT进程 ,这些在Native层中; 第四步:init进程(pid=1,init进程是所有进程的鼻祖,第一个启动)启动后,会启动adbd,logd等用户守护进程,并且会启动servicemanager(binder服务管家)等重要服务,同时孵化出zygote进程,这里属于C++ Framework,代码为C++程序; 第五步:zygote进程是由init进程解析init.rc文件后fork生成,它会加载虚拟机,启动System Server(zygote孵化的第一个进程);System Server负责启动和管理整个Java Framework,包含ActivityManager,WindowManager,PackageManager,PowerManager等服务; 第六步:zygote同时会启动相关的APP进程,它启动的第一个APP进程为Launcher,然后启动Email,SMS等进程,所有的APP进程都有zygote fork生成。