Android启动流程

《Android安全技术揭秘与防范》读书笔记


在讲述Android启动过程前,先简单介绍一下Android的层次结构和分区结构

Android系统的层次结构

整体架构分为如下4层

  • 应用层(Application)
  • 框架层(Framework)
  • 核心库与运行环境层(Libraries & Android Runtime)
  • Linux内核层(Linux Kernel)

Android系统的分区结构

分区是逻辑层存储单位用来区分设备内部的永久性存储结构。不同厂商和平台有不同的分区布局。然而,有几个分区最常见,即Boot、Data、Recovery和Cache分区。通常的情况下NAND闪存的设备都具备一下分区布局

  • Boot Loader分区

    中文名称“系统加载区”,它的作用相当于电脑的BIOS,在手机进入系统之前初始化软硬件环境、加载硬件设备,最终让手机成功启动。

  • Boot分区

    存储着Android的Boot镜像,其中包含着Linux kernel(zImage)与initrd等文件。

  • Splash分区

    主要是存储系统启动后第一屏显示的内容,一般都是一些公司的Logo或者动画,存储在Boot Loader中。

  • Radio分区

    这个事基带所在的分区,存储着一些与通信质量相关的Linux驱动,如电话、GPS等。常用的驱动是可以打包存在于Linux的内核Boot分区,但为了提升设备的通信质量,所以单独开辟了Radio分区。

  • Recovery分区

    存储着一个mini型的Android Boot镜像文件,主要的作用是用来做故障维修和系统恢复。

  • System分区

    存储着Android系统的镜像文件,镜像文件中包含着Android的Framework、Libraries、Binaries和一些预装应用。系统挂载后既/system目录

  • User Data分区

    也称为数据分区,它是设备的内部存储分区,如应用产生的图片、声音等数据文件。系统挂载后在/data目录下

  • Cache区

    用于存储各种使用的文件,如回复日志和OTA下载的更新包。在应用程序安装在SD卡上时,它也可能包含Dalvik缓存文件夹,其中存储了Dalvik虚拟机的缓存文件。

Android启动流程

主要分为6个阶段:BootLoader加载阶段、加载Kernel与initrd阶段、初始化设备服务阶段、加载系统服务阶段、虚拟机初始化阶段、启动完成阶段。

Android系统启动流程

-Boot Loader阶段
Boot Loader是在物理电源按下之后第一个加载的。在此阶段会运行一些制造商自定义的初始化代码。Boot Loader内部也分为多个阶段,对此不做深入讨论。

-加载Kernel与initrd阶段
Boot分区加载Linux kernel与initrd到RAM,最后跳转到Kernel继续完成启动。

-初始化设备服务阶段
Android kernel则会启动所有Android系统设备所必须的服务,如初始化Memory、初始化IO、内存保护、中断处理程序、CPU调度、设备驱动,最后还会挂载文件系统,启动第一个用户进程init。

-加载系统服务阶段
init是Linux系统中用户空间的第一个进程,其进程PID是1,父进程为Linux Kernel核的0号进程。init具有特殊的初始化使命,它会加载一个初始化脚本文件init.rc,启动Android系统的一些核心服务,如针对通话的rild、针对VPN链接的mtpd、提供adb相关功能adbd、支持存储外设的热插拨功能vold、负责进程孵化服务的Zygote、Service Manager等。

-虚拟机初始化阶段
其中启动的Zygote进程会创建Dalvik VM,会启动第一个Java组件系统服务,最后是Android Framework服务,如Activity Manager、Package Manager、Window Manager

-启动完成阶段
当系统完成启动之后,载入Home(桌面应用程序),然后做一些应用层的初始化的工作,如播放一个全局的广播ACTION_BOOT_COMPLETED.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容