Android启动过程学习总结
2015-07-30 17:55
447 查看
本文是在以前上课笔记的基础上,根据网上大量博文总结,以自己的理解进行梳理而来。
Android整个启动过程来说,基本可以划分成三个阶段:Bootloader引导、Linux kernel启动、Android启动。
第一部分:Bootloader启动
一、BootLoader是在操作系统运行之前运行的一段程序。它可以将系统的软硬件环境带到一个合适状态,为运行操作系统做好准备。终极目标就是把OS拉起来运行。关于Bootloader的理解:/article/2890014.html
二、启动时bootloader根据按键或重启前设置决定进入哪种启动模式:1,正常启动,2,Recovery模式 3,fastboot(快速刷机模式) 。关于启动模式的理解:http://blog.csdn.net/mu0206mu/article/details/7464699
第二部分:Linux启动
一、即加载系统内核,包括加载驱动,启动硬件。
二、正常启动加载的文件为boot.img,Recovery模式加载的文件是recovery.img 它们加载linux内核的过程是一样的。 linux启动理解:/article/2890015.html
第三部分:Android启动
一、init进程做的事情:1,一系列工作包括servicemanager[管理服务]和zygote(SystemServer)[启动服务]
2.最后启动一个PropertyService,提供服务
二、一系列工作包括 bootanim与开机动画相关,与动画相关的服务SurfaceFlinger服务也是由SystemServer启动。理解:/article/8188403.html
三、android启动完成或者说开机动画完成时启动Launcher。 理解:/article/2890016.html
参考网址:
1, Android系统启动流程(3):/article/2890014.html
2 , Android OTA 升级(5) : http://blog.csdn.net/zjujoe/article/category/697584
3, Android系统Recovery工作原理之使用update.zip升级过程分析(9):http://blog.csdn.net/mu0206mu/article/category/1059752
4, 安卓修改开机动画
/article/8188403.html
5, 很有用的知识 Android 系统升级那些事儿:/article/7641382.html
-------------------------------------------------------以下为上课笔记--------------------------------------------------------
相关知识:1.Dalvik VM是基于寄存器的,每个app一个单独的VM
mount sdcard ...rild(通话modem) bootsound bootanim servicemanager zygote其中servicemanager和zygote是最重要的两个.只有这个两个进程起来之后才会建立一个Android空间.init运行完之后,并不会结束,还会启动一个PropertyService,提供服务.
Init进程所在的文件:system/core/init/inti.c
代码:#ifndefHAVE_ANDROID_OS
QuickRuntime*runt = new QuickRuntime();
runt->start("com/android/server/SystemServer",
false /*spontaneously fork system server from zygote */);
#endif
在SystemServer中,首先,jni调用nativeinit1():
frameworks\base\services\jni\com_android_server_SystemServer.cpp sytem_init(); c---> c(c代码调用c代码)进入cmds
frameworks\base\cmds\system_server\library\system_init.cpp
在system_init.cpp中完成了:
1实例化了6个service.
SensorService::instantiate(); 与硬件相关
2实例化运行时AndroidRuntime*runtime
= AndroidRuntime::getRuntime();
3调用SystemServerinit2()
LOGI("Systemserver: starting Android services.\n");
runtime->callStatic("com/android/server/SystemServer","init2");
他其中Acitivtymanager是非常重要的一个服务,其回调方法:((ActivityManagerService)ActivityManagerNative.getDefault()).systemReady(newRunnable()
做的事:
1实例化persistentapplication
2 startlauncher.等相关app第一个启动的app为输入法
Android整个启动过程来说,基本可以划分成三个阶段:Bootloader引导、Linux kernel启动、Android启动。
第一部分:Bootloader启动
一、BootLoader是在操作系统运行之前运行的一段程序。它可以将系统的软硬件环境带到一个合适状态,为运行操作系统做好准备。终极目标就是把OS拉起来运行。关于Bootloader的理解:/article/2890014.html
二、启动时bootloader根据按键或重启前设置决定进入哪种启动模式:1,正常启动,2,Recovery模式 3,fastboot(快速刷机模式) 。关于启动模式的理解:http://blog.csdn.net/mu0206mu/article/details/7464699
第二部分:Linux启动
一、即加载系统内核,包括加载驱动,启动硬件。
二、正常启动加载的文件为boot.img,Recovery模式加载的文件是recovery.img 它们加载linux内核的过程是一样的。 linux启动理解:/article/2890015.html
第三部分:Android启动
一、init进程做的事情:1,一系列工作包括servicemanager[管理服务]和zygote(SystemServer)[启动服务]
2.最后启动一个PropertyService,提供服务
二、一系列工作包括 bootanim与开机动画相关,与动画相关的服务SurfaceFlinger服务也是由SystemServer启动。理解:/article/8188403.html
三、android启动完成或者说开机动画完成时启动Launcher。 理解:/article/2890016.html
参考网址:
1, Android系统启动流程(3):/article/2890014.html
2 , Android OTA 升级(5) : http://blog.csdn.net/zjujoe/article/category/697584
3, Android系统Recovery工作原理之使用update.zip升级过程分析(9):http://blog.csdn.net/mu0206mu/article/category/1059752
4, 安卓修改开机动画
/article/8188403.html
5, 很有用的知识 Android 系统升级那些事儿:/article/7641382.html
-------------------------------------------------------以下为上课笔记--------------------------------------------------------
1.1.Linux层启动
在开发中我们可以把andorid系统分成两层:Linux层和android层,或者三层,另外一层为DalvikVM层.在开机启动时,系统先启动Linux内核,即加载驱动,启动硬件.相关知识:1.Dalvik VM是基于寄存器的,每个app一个单独的VM
1.2.android启动init进程
linux内核完成之后启动第一个进程init进程,这个进程为用户级进程,是引导进程(启动模拟器,adbshell用ps命令查看,init进程的pid=1).init所做的事为做一系列初始化工作包括:mkdirmount sdcard ...rild(通话modem) bootsound bootanim servicemanager zygote其中servicemanager和zygote是最重要的两个.只有这个两个进程起来之后才会建立一个Android空间.init运行完之后,并不会结束,还会启动一个PropertyService,提供服务.
Init进程所在的文件:system/core/init/inti.c
1.3.servicemanager
作用:管理android中的所有服务1.4.zygote过程
做三件事情:1create runtime 2 create vm 3 create all applications1.4.1.create runtime
执行framework层中:main_runtime.cpp(所在目录为frameworks\base\cmds\runtime\main_runtime.cpp)在这里启动了SystemServer代码:#ifndefHAVE_ANDROID_OS
QuickRuntime*runt = new QuickRuntime();
runt->start("com/android/server/SystemServer",
false /*spontaneously fork system server from zygote */);
#endif
1.4.2.SystemServer之init1()
frameworks\base\services\java\com\android\server\SystemServer.java在SystemServer中,首先,jni调用nativeinit1():
frameworks\base\services\jni\com_android_server_SystemServer.cpp sytem_init(); c---> c(c代码调用c代码)进入cmds
frameworks\base\cmds\system_server\library\system_init.cpp
在system_init.cpp中完成了:
1实例化了6个service.
SensorService::instantiate(); 与硬件相关
2实例化运行时AndroidRuntime*runtime
= AndroidRuntime::getRuntime();
3调用SystemServerinit2()
LOGI("Systemserver: starting Android services.\n");
runtime->callStatic("com/android/server/SystemServer","init2");
1.4.3.SystemServer之init2()
实例化Java服务如:WindowmanagerAcitivtymanager等他其中Acitivtymanager是非常重要的一个服务,其回调方法:((ActivityManagerService)ActivityManagerNative.getDefault()).systemReady(newRunnable()
做的事:
1实例化persistentapplication
2 startlauncher.等相关app第一个启动的app为输入法
相关文章推荐
- Android禁止ViewPager的左右滑动
- xml布局内容总结(三)--Android
- Android重启应用程序代码
- Android中读图片Exif信息的方法
- Android 布局 精准定位 平衡定位 相对定位
- FATAL EXCEPTION: GLThread
- androidの更改个人资料性别弹出框案例
- android SurfaceView详解
- Android AIDL使用特定的解释
- android acitvity跳转有白色背景 进入软件显示白色
- Android:手机关闭相机拍照声音
- android按两次返回键退出
- android如何从应用程序进入设置的各个页面
- Android实例-消息框(XE8+小米2)
- Android的WiFi开启与关闭
- Android 有关SQLite的使用以及数据库版本的升级
- android:descendantFocusability解析
- Android 中文件类型与MIME的匹配表
- android 自定义dialog初探
- android 简单的数据保存本地