Android 启动流程简介

Android 启动流程:

1. linux OS

Bootloader -> Linux kernel

2. Android/Init Runtime

Init Process -> Services -> Zygote/VM -> System
Server

3. Framework HomeScreen

Server Manager -> Home Luncher

如下图:

Android 启动流程:

1. 系统引导 Bootloader

1). 源码 bootable/bootloader

2). 上电后,CPU将先执行bootloader 程序,此时有三种情况:

a. fastboot
模式即命令或SD卡烧写模式,不加载内核及文件系统,此处可以进行工厂模式的烧写

b. recovery 模式,加载recovery.img,
它包含有内核及基本的文件系统,用于工程模式烧写

c. 正常启动,加载boot.img,
它包含内核及基本的文件系统,用于正常启动手机。

bootloader(汇编语言)进行底层初始化,并加载内核代码,最终跳转到内核的boot程序。

简单地说,BootLoader是在操作系统运行之前运行的一段程序,它可以将系统的软硬件环境带到一个合适状态,为运行操作系统做好准备。这样描述是比较抽象的,但是它的任务确实不多,终极目标就是把OS拉起来运行。

2.  内核Kernel

1)kernel核心初始化(内存初始化,打开中断,初始化进程表等等);
 
  2)驱动初始化;
 
  3)启动内核后台(daemons)线程
 
  4)安装根(root)文件系统

5) 启动第一个用户级进程init

kernel 就由bootloader
加载的,源码:kernel

3.   Init 

1)
源码:system/core/init/*

2)
配置文件:system/rootdir/init.rc

init进程的程序在system/core/init/init.c里,它是android系统特定的初始化程序,
是一个由内核启动的用户级进程,最终它会以后台进程(daemon)的形式一直存在。该进程主要有如下功能:

3)创建/安装设备文件/进程文件/系统文件节点;
 
  4)解析启动/init.rc和/init.<machine_name>.rc;
 
  5)显示Logo画面;
 
  6)打开Device Socket,Property Socket, child进程通信Socket;
 
  7)执行脚本中指定的命令或动作,启动指定服务;如最基本的servicemanamger
及Zygote
 
  8)进入死循环:检查是否有action需要执行;是否需要restart某服务;监听特定事件(child进程退出,Device相关事件,Property事件,新服务启动)

4. Native 服务启动  --servicemanager

Servicemanager属于NativeService。在执行init.rc时就会启动,与Zygote一样。在init.rc脚本中Servicemanager的描述:serviceservicemanager/system/bin/servicemanager
源码:frameworks/native/cmds/servicemanager/service_manager.c

根据system/core/rootdir/init.rc, init进程通过open_keychord()从service_list(之前从.rc中解析出来的)中把所有service信息写入特定文件,handle_keychord()逐个读出然后调用service_start()创建(先fork()然后在子进程中调用execve()来执行相应的服务程序)指定的service进程。这里创建的service都属于native服务,运行在Linux空间,通过socket向上层提供特定的服务。例如:
console: shell console服务.
servicemanager: Binder服务管理器,管理所有Android系统服务
vold: volume Daemon,支持存储外设的热插拔
adbd: Android Debug Bridge Daemon,提供adb相关功能
mountd: 设备安装Daemon,负责设备安装及状态通知
debuggerd: Debug Daemon,处理调试进程的请求
rild: 无线接口层(radio interface layer)Daemon.
zygote: 启动Android Dalvik Runtime并负责进程孵化服务.
mediaserver: 启动AudioFlinger, MediaPlayerService and CameraService.负责多媒体播放相关的功能,包括音视频解码、显示输出等。
installd: 包安装Daemon,提供包安装/删除/dex处理等底层功能

5. Zygote

重要的后台程序zygote

1) 源码:frameworks/base/cmds/app_process/app_main.cpp等 
 
 2)
说明:zygote是一个在init.rc中被指定启动的服务,该服务对应的命令是/system/bin/app_process 
 
      a)  建立Java Runtime,建立虚拟机 
   
    b)
建立Socket接收ActivityManangerService的请求,用于Fork应用程序 
     
  c) 启动System Server

6. 系统服务system
server 

1)      
 源码:frameworks/base/services/java/com/android/server/SystemServer.java 
2)
       说明:被zygote启动,通过System
Manager管理android的服务(这里的服务指frameworks/base/services下的服务,如卫星定位服务,剪切板服务等)

System Server作为Zygote的第1个子进程,是Android Framework的核心,它主要负责Android系统初始化并启动其他服务。其它的Android服务都由SystemServer启动并运行在该进程空间

7.  桌面
 
launcher 

1)      
 源码:ActivityManagerService.java为入口,packages/apps/launcher*实现

2)      
 说明:系统启动成功后SystemServer使用xxx.systemReady()通知各个服务,系统已经就绪,桌面程序Home就是在ActivityManagerService.systemReady()通知的过程中建立的,最终调用
()启launcher

Android 端启动过程详解

1. init 进程启动

a. system/core/rootdir/init.rc

b. system/core/init/init.c
 ,init_parser.c

c. init 通过init.c 里的main
->init_parse_config_file("/init.rc")->parse_config->parse_new_section->parse_service->
最终将所有service 加入到service_list

Ref:

http://blog.csdn.net/maxleng/article/details/5508372

http://blog.sina.com.cn/s/blog_415bf60a0100wxd9.html

http://wenku.baidu.com/view/42ebf459be23482fb4da4c33

Android 启动流程简介

时间: 2024-08-09 02:20:56

Android 启动流程简介的相关文章

Android启动流程分析(一)

############################################# 本文为极度寒冰原创,转载请注明出处 ############################################# Android的启动流程绝大部分人都知道,但是大多数人都是这样描述的: Android启动,首先是启动Bootloader,然后挂载kernel,挂载完kernel之后,会启动android的init进程,init进程会去孵化Zygote,Zygote是android的重要支柱之

Storm启动流程简介

storm启动流程          storm是一个流行的开源的,分布式实时处理框架,关于storm的基本介绍可以参加这篇官方文档.大致的拓扑结构如图所示:        其中Nimbus是一个后台管理进程,运行在master node上.Supervisor也是后台进程,运行在work node上.依据上图,Nimbus和Supervisor不直接通信,通过zookeeper进行通信.在Master Node上,可以通过storm nimbus命令来启动nimbus进程,同时通过storm

Android 启动流程分析

原文:https://www.jianshu.com/p/a5532ecc8377 作者曾经在高通的Android性能组工作,主要工作是优化Android Application的启动时间. APP基础理论 要想优化App启动时间, 第一步就是了解App启动进程的工作原理. 有几个基础理论: Android Application与其他移动平台有两个重大不同点: 每个Android App都在一个独立空间里,意味着其运行在一个单独的进程中,拥有自己的VM, 被系统分配一个唯一的user ID A

【Android 系统开发】 Android 系统启动流程简介

Android 系统启动总结 : Android 系统启动分底层 Linux 内核启动 和 应用系统启动; -- 底层系统启动 : 系统上电, bootloader 启动, linux kernel 启动, init 进程启动; -- 应用系统启动 : init 进程启动关键的进程如 Zygote 进程 和 System Server 等系统服务, 之后进入 Home 界面; 一. Android 底层系统启动流程(Bootloader Kernel init) 1. 系统上电 执行 ROM 引

CentOS开机启动流程简介

我们都知道按下电脑电源键后,屏幕上会一闪而过很多信息,然后显示登录界面,然后输入用户名,密码就可以畅享网络世界了.那么这中间到底发生了什么呢,今天就让我们来简单探讨一下CentOS的简易版开机启动流程吧. 第一阶段:通电自检过程 我们都知道电脑所有数据指令都是在内存上才能被cpu处理的吧,我们还知道内存在断电后其上面的所有数据都会丢失吧,那么开机的时候内存应该是没有东西的吧,那上面都不能干了,更别说启动一个操作系统了,其实啊,我们内存并不只是我们常见的那个内存卡,很多硬件都会映射一段内存到cpu

Tiny4412 Android 启动流程

Android系统的启动主要包括三个阶段: ①BootLoader启动 ②Linux Kernel启动 ③Android系统启动 前面我们大致分析了前面两个步骤,即u-boot和内核的启动流程(内核启动流程待完善-_-!!),这次就来分析以下Linux内核启动之后是怎样挂载起Android这个"根文件系统"的.Android系统在Linux内核上运行了一系列的系统服务. 和Linux系统类似,Android系统中第一个被启动的进程也是init进程,它的PID为0.Android系统的i

Android启动流程分析(十) action的执行和service的启动

############################################# 本文为极度寒冰原创,转载请注明出处 ############################################# 在前面的文章分析完init.rc的解析以后,我们知道现在action按照init.c的main函数中的秩序,维护了一条qlist的链表,listnode为action_qlist service也维护了一条链表,listnode为service_list. 那么,在android

android 启动流程 相关 杂项记录

Android原生流程 Init进程 主要流程及分支梳理 ueventd_main()watchdogd_main()主要流程a) 公共部分 增加PATH 环境变量初始化内核日志,打开/dev/kmsg,此时logcat还未初始化,使用内核的log系统设置selinux b) First_stage Mount 和mkdir 例如/dev /proc /sys在当前是内核态的状态下设置selinux.是否enforceing(开启)或关闭,取决于配置,若编译时允许内核指定,那么从androidb

Android启动流程分析(八) 解析init.rc的action

############################################# 本文为极度寒冰原创,转载请注明出处 ############################################# 上一章讲述了android启动过程中,加载init.rc之后需要对其进行解析. 而解析又根据三个不同的SECTION来执行不同的初始化的文件,分别是parse_action,parse_service,parse_import. 那么,这一节,我们就从parse_action来讲