Android开机启动流程


Android是一个基于Linux内核的操作系统,了解Android开机流程有助于理解Linux系统的开机过程。Android系统开机流程图如下所示:
                                                      
                                                                                                                   Fig. Android Booting Process

1 - Boot ROM

按下开机键后,跳至硬件编码的BOOT ROM指定地址:加载Bootloader到内存中,开始执行Bootloader代码

2 - Bootloader

Bootloader 执行分为两个阶段:

  •   检测外部RAM 
  •  初始化网络、内存等,为启动kernel做准备

Bootloader的核心代码在init.S.

3 - Kernel

Android的Kernel启动跟Linux Kernel启动过程很相似,在这个过程中主要是初始化cache, 内存保护,进程调度,驱动以及挂载root文件系统。初始化完成之后,开始加载 Android的第一个进程 init

4 - Init

init进程是Android所有进程的父进程,其主要有两个作用:

  • 挂载系统目录:/sys, /dev/, /proc
  • 执行初始化脚本init.rc

此阶段init进程会启动系统的必须的守护进程,如RILD,netd,vold,meadiaserver,installd,adbd等,然后通过 脚本命令:

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server 

开始加载 Android系统VM以及核心服务。 上述脚本通过/android/frameworks/base/cmds/app_process/app_main.cpp 解析后,启动 zygote进程和system server核心服务。

  • 有关 init.rc 的语法可以参看 AOSP 代码目录: /android/system/core/init/readme.txt
  • init 进程代码可以参看AOSP目录: /android/system/core/init/
  • init.rc 可参看 AOSP目录: /android/system/core/rootdir/init.rc

5 - Zygote/Dalvik

在Java中,不同的应用有不同的Virtual Machine(VM)实例,Android考虑到APP的加载速度,防止内存消耗过大,通过创建一个zygote进程,从而实现不同Dalvik VM之间的代码、数据共享。 zygote进程主要用于预加载并初始化Android的核心库类。

一旦init初始化完Android Runtime,zygote开始创建 第一个Dalvik VM实例,由此 zygote进程开始加载system server进程。 zygote的执行主要有几个关键步骤: 

  •  加载并执行 ZygoteInit 类
  • registerZygoteSocket(): 注册用于zygote命令链接的socket
  • preloadClasses(); preloadResources(): 预加载常用类以及系统资源(themes,layouts等)

至此,系统会有开机画面显示

6 - System Server/services

Zygote启动一个新的system server进程用于启动系统服务,需要启动的服务主要有两类:(1) core services; (2) other services:

core services

  • Power Manager
  • Activity Manager
  • Telephony Registry
  • Package Manager
  • Alarm Manager
  • Sensor Service
  • Window Manager
  • Mount Service
  • Context Manager

Other Service

  • Status bar service
  • hardware service
  • connectivity service
  • notification manager
  • location manager
  • wallpaper service

7 - 启动HOME Activity

ActivityManager 初始化完成后,会发送一个 CATEGORY_HOME 的Intent,从而启动HOME Screen,至此可以看到手机开机完成后的IDLE界面,Android系统启动完成。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值