摘要:本节主要来讲解Android是如何启动的

阅读本文大约需要花费10分钟。

文章首发微信公众号:IngresGe

专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢!

[Android取经之路] 的源码都基于Android-Q(10.0) 进行分析

[Android取经之路] 系列文章:

 

《系统启动篇》

  1. Android系统架构
  2. Android是怎么启动的
  3. Android 10.0系统启动之init进程
  4. Android10.0系统启动之Zygote进程
  5. Android 10.0 系统启动之SystemServer进程
  6. Android 10.0 系统服务之ActivityMnagerService
  7. Android10.0系统启动之Launcher(桌面)启动流程
  8. Android10.0应用进程创建过程以及Zygote的fork流程
  9. Android 10.0 PackageManagerService(一)工作原理及启动流程
  10. Android 10.0 PackageManagerService(二)权限扫描
  11. Android 10.0 PackageManagerService(三)APK扫描
  12. Android 10.0 PackageManagerService(四)APK安装流程

《日志系统篇》

  1. Android10.0 日志系统分析(一)-logd、logcat 指令说明、分类和属性
  2. Android10.0 日志系统分析(二)-logd、logcat架构分析及日志系统初始化
  3. Android10.0 日志系统分析(三)-logd、logcat读写日志源码分析
  4. Android10.0 日志系统分析(四)-selinux、kernel日志在logd中的实现​

《Binder通信原理》

  1. Android10.0 Binder通信原理(一)Binder、HwBinder、VndBinder概要
  2. Android10.0 Binder通信原理(二)-Binder入门篇
  3. Android10.0 Binder通信原理(三)-ServiceManager篇
  4. Android10.0 Binder通信原理(四)-Native-C\C++实例分析
  5. Android10.0 Binder通信原理(五)-Binder驱动分析
  6. Android10.0 Binder通信原理(六)-Binder数据如何完成定向打击
  7. Android10.0 Binder通信原理(七)-Framework binder示例
  8. Android10.0 Binder通信原理(八)-Framework层分析
  9. Android10.0 Binder通信原理(九)-AIDL Binder示例
  10. Android10.0 Binder通信原理(十)-AIDL原理分析-Proxy-Stub设计模式​​​​​​​​​​​​​​
  11. Android10.0 Binder通信原理(十一)-Binder总结

 

上一节回顾了一下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 系统启动流程:

  1. 第一步:手机开机后,引导芯片启动,引导芯片开始从固化在ROM里的预设代码执行,加载引导程序到到RAM,bootloader检查RAM,初始化硬件参数等功能;
  2. 第二步:硬件等参数初始化完成后,进入到Kernel层,Kernel层主要加载一些硬件设备驱动,初始化进程管理等操作。在Kernel中首先启动swapper进程(pid=0),用于初始化进程管理、内管管理、加载Driver等操作,再启动kthread进程(pid=2),这些linux系统的内核进程,kthread是所有内核进程的鼻祖;
  3. 第三步:Kernel层加载完毕后,硬件设备驱动与HAL层进行交互。初始化进程管理等操作会启动INIT进程 ,这些在Native层中;
  4. 第四步:init进程(pid=1,init进程是所有进程的鼻祖,第一个启动)启动后,会启动adbd,logd等用户守护进程,并且会启动servicemanager(binder服务管家)等重要服务,同时孵化出zygote进程,这里属于C++ Framework,代码为C++程序;
  5. 第五步:zygote进程是由init进程解析init.rc文件后fork生成,它会加载虚拟机,启动System Server(zygote孵化的第一个进程);System Server负责启动和管理整个Java Framework,包含ActivityManager,WindowManager,PackageManager,PowerManager等服务;
  6. 第六步:zygote同时会启动相关的APP进程,它启动的第一个APP进程为Launcher,然后启动Email,SMS等进程,所有的APP进程都有zygote fork生成。

 

下一节我们来一起看看Init进程,这个所有进程的鼻祖是如何启动的,欢迎关注我,谢谢!

微信公众号:IngresGe

 

 

更多相关文章

  1. android 3.0中加快启动模拟器
  2. Android——使用AIDL实现进程间通讯简单案例
  3. Android中图像变换Matrix的原理、代码验证和应用
  4. Android系统启动流程浅析
  5. Android(安卓)之 zygote 与进程创建
  6. Simple Guide for Porting Android(安卓)Kernel
  7. android 3.0中加快启动模拟器
  8. Android中单APK应用多进程
  9. Android(安卓)双开沙箱 VirtualApp 源码分析(三)App 启动

随机推荐

  1. Android利用JDBC连接服务器数据库
  2. Android的编译时遇到 gcc: error trying
  3. Android(安卓)Touch 事件的分发和消费机
  4. Android实现浮窗时报的android.view.Wind
  5. 对android的思考
  6. Android中Parcel用法详解
  7. android过渡动画之makeSceneTransitionAn
  8. android Accessibility系统自带语音助手
  9. Android开发之Android 5.0新特性
  10. Android系统启动流程 -- bootloader、lin