i.mx6 Android5.1.1 初始化流程之框架

Android启动过程分为以下几个步骤:
1. Boot ROM: 上电后启动芯片固话代码。
2. BootLoader:固话代码会根据启动模式启动bootloader,(一般为启动引脚的电平的不同,从不同的介质中启动,启动介质可以分为nor flash,nand flash, emmc等,BootLoader一般为uboot)
3. kernel:
1). 会初始化硬件
2). 根据uboot传过来的参数初始化系统
3). 加载一些必要的驱动
4). 启动两个进程init:(PID=1) kthreadd(PID=2)
4.Android:
1).挂在分区,创建目录 (init进程)
2).动态加载驱动 (int进程)
3).启动本地服务 (init进程)
4).设置系统属性 (在我看来就跟环境变量,全局变量啥的没区别)
5).启动servicemanager服务 (这个是重要的一个本地服务。用来进行服务间的binder通讯的,当该服务重启了,所有服务都会重启)
6).启动Zygote进程 (该进程由init启动,主要作用为:1.启动虚拟机(可以使用Java了),2.注册JNI(可以调用本地函数了),3.加载类资源、系统资源(使得新的应用能够更快启动),4.启动System server,5.接收从System server发过来的申请,创建新的应用程序)
7).启动System server (1.加载JAVA服务(本地服务在init进程中已经加载了),2.接收申请并发送给zygote,用来创建应用)
8).守护系统 (根据init.rc,确保某些重要的服务不会被关闭,如果关闭则重启)

其中i.mx6的uboot和kernel暂时不分析,以后再说,我们这里只说Android
首先,我们先查看一下系统的进程。




通过查看PPID,我们可以发现,大部分进程都是由init,kthreadd,zygote生成的。
init: 其init进程也是整个Android的第一个进程,从kernel启动,使系统正式从内核空间转到用户空间了。PID为1
kthreadd:为也是kernel启动的进程。PID为2
zygote: PID为133
/init生成了:
/sbin/ueventd
/sbin/watchdogd
/system/bin/logd
/sbin/healthd
/system/bin/lmkd
/system/bin/servicemanager (通过binder进行通讯的服务)
/system/bin/vold
/system/bin/surfaceflinger (显示管理服务)
/system/bin/sh
/system/bin/netd (网络管理服务)
/system/bin/debuggerd
/system/bin/drmserver
/system/bin/mediaserver (多媒体服务)
/system/bin/installd (应用安装服务)
/system/bin/keystore
/system/bin/rild
zygote (zygote:第一个Java程序)
/system/bin/sdcard
/sbin/adbd (adb服务)
这里的zygote为init生成的
kthreadd:看到了一个binder进程
zygote生成了:(全是JAVA进程)
system_server
com.android.systemui
android.process.media
com.android.inputmethod.latin
com.android.phone
com.android.launcher
com.android.deskclock
com.estrongs.android.pop
com.android.keychain
com.microchip.calibration
com.android.providers.calendar
com.android.managedprovisioning
com.android.onetimeinitializer
com.android.settings
com.android.calendar
后面接着的
i.mx6 Android5.1.1 系统属性
i.mx6 Android5.1.1 初始化流程之init进程
i.mx6 Android5.1.1 初始化流程之init.rc解析
i.mx6 Android5.1.1 初始化流程之zygote
i.mx6 Android5.1.1 初始化流程之框架的更多相关文章
- i.mx6 Android5.1.1 初始化流程之init进程(未完成)
概述: 接在i.mx6 Android5.1.1 初始化流程之框架之后 参考资料:http://blog.csdn.net/mr_raptor/article/category/799879 相关源码 ...
- i.mx6 Android5.1.1 初始化流程之init.rc解析(未完成)
接上一篇:i.mx6 Android5.1.1 初始化流程之init进程 参考资料:http://blog.csdn.net/mr_raptor/article/category/799879 这个博 ...
- i.mx6 Android5.1.1 servicemanager本地服务
接在之前的 i.mx6 Android5.1.1 初始化流程之init进程 i.mx6 Android5.1.1 初始化流程之init.rc解析 servicemanager是由init创建的本地服务 ...
- 【开源】OSharp3.3框架解说系列(7.1):初始化流程概述
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- i.mx6 Android5.1.1 System server
1. 概述: 1. Zygote进程是Android Java世界的开创者,所有的Java应用程序进程都由Zygote进程创建: 2. Zygote创建应用程序进程过程其实就是复制自身进程地址空间作为 ...
- spring自动扫描、DispatcherServlet初始化流程、spring控制器Controller 过程剖析
spring自动扫描1.自动扫描解析器ComponentScanBeanDefinitionParser,从doScan开始扫描解析指定包路径下的类注解信息并注册到工厂容器中. 2.进入后findCa ...
- SpringMVC源码剖析(三)- DispatcherServlet的初始化流程
在我们第一次学Servlet编程,学Java Web的时候,还没有那么多框架.我们开发一个简单的功能要做的事情很简单,就是继承HttpServlet,根据需要重写一下doGet,doPost方法,跳转 ...
- u-boot中nandflash初始化流程分析(转)
u-boot中nandflash初始化流程分析(转) 原文地址http://zhuairlunjj.blog.163.com/blog/static/80050945201092011249136/ ...
- Z-stack之OSAL初始化流程
转自点击打开链接 我使用的协议栈版本及例子信息: ZigBee2006\Texas Instruments\ZStack-1.4.3-1.2.1\Projects\zstack\Samples\Sam ...
随机推荐
- Django博客项目思路整理
首先明确一点,我目前学习Django是为了做一个博客,那么以博客为目标进行实践的话,按照Django的MTV模型的顺序来思考的话,要考虑如下几个事情: (Models) 1.在博客里的各种数据模型: ...
- JPA之@GeneratedValue注解
JPA的@GeneratedValue注解,在JPA中,@GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键(JPA要求每一个实体Entity,必须有且只有一个主键), ...
- 「CodeChef - SKIRES」Ski Resort
题目链接 戳我 \(Description\) 给你一个\(n*m\)的网格,以及网格上的两个格子\(A,B\).每个格子有一个高度.每次操作可以选择一个格子(不能是\(A\)或\(B\))并将它的高 ...
- C博客作业05—指针
1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1 学习体会 理解了指针在代码中的使用方法,学会使用指针进行参数操作 学会了结构体的定义方式与结构体的使用 经过持续一个周 ...
- ActionBarSherlock(一)在Eclipse中如何引入ActionBarSherlock和它的例子?
ActionBarSherlock,是一个开源的Actionbar项目(http://actionbarsherlock.com/download.html).为什么我们要用它呢?谷歌已经不强制要求厂 ...
- VS2013如何添加LIb库及头文件的步骤
在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录. 2.添加文件引用 ...
- PHP和JS中全局变量和局部变量
一,PHP中全局变量和局部变量 php与C++中对全局变量和局部变量定义类似,全局变量:函数外定义的变量,在全局通用:局部变量:在函数内定义的变量,只在函数内有效.PHP中变量范围跨越了include ...
- [Objective-C语言教程]类型转换(20)
类型转换是一种将变量从一种数据类型转换为另一种数据类型的方法. 例如,如果要将long值存储到简单整数(int)中,则可以将long类型转换设置为int.使用强制转换运算符将值从一种类型转换为另一种类 ...
- Android中LayoutParams的用法
简单说说 自己对 android LayoutParams的理解吧,xh写不出高级文章是低级写手.public static classViewGroup.LayoutParamsextends Ob ...
- iOS学习笔记(5)——显示简单的TableView
1. 创建工程 创建一个新的Xcode工程命名为SimpleTableTest. 删除main.storyboard文件和info.plist中有关storyboard的相关属性. 按command+ ...