Android 启动
来源:互联网 发布:神经官能症知乎 编辑:程序博客网 时间:2024/05/20 19:46
1. bootloader
code \bootable\bootloader
开机log;
各种组合键进入不同模式(recovery模式,加载recovery.img和基本文件系统;fastboot模式,可以烧写,不加载);
以及加载boot.img(包含kernel,文件系统等);
2. Kernel
Code Kernel\*
进程号为0;
3. Init
Code \system\core\init\init.c system\core\rootdir\init.rc
第一个用户进程,进程号为1;父进程为kernel;
Init.c的main函数中,解析init.rc;
Init.rc中启动了一些底层linux servers(如adbd,提供adb支持;vold,提供SD挂载;servicemanager;zygote;),并执行了一些命令,rc文件有相应的格式,可以在其中设置开关机动作,如动画,铃音等;
4. 重要的后台程序zygote
Code \frameworks\base\cmds\app_process\app_main.cpp
\frameworks\base\core\jni\AndroidRuntime.cpp
\frameworks\base\core\java\com\android\internal\os\ZygoteInit.java
\dalvik\vm\native\dalvik_system_Zygote.c
启动的第一个服务,对应的命令是/system/bin/app_process;
app_main.cpp中,main函数runtime.star中启动虚拟机,注册JNI函数,并找到zygoteinit的main,进入java环境;
ZygoteInit.java main中,申请端口号为50的监听套接字,用于接收ActivityManageService请求Fork应用程序;并与加载耗时的类和资源;启动systemserver
startSystemServer调用Zygote.forkSystemServer即jni中Dalvik_dalvik_system_Zygote_ forkSystemServer
startSystemServer中,if (pid == 0) 最终会调用invokeStaticMain,从而调用system server main函数;
5. SystemServer
Code frameworks\base\services\java\com\android\server\SystemServer.java
在system_init.cpp system_inith函数中启动AudioFlinger,media playback service,camera service,audio policy service
在init2中,启动必须的server添加到ServiceManage中 如,powermanage;并创建pakagemanageService和activityManageService
6. Launcher
源码:ActivityManagerService.java为入口,packages/apps/launcher*实现
说明:系统启动成功后SystemServer使用xxx.systemReady()通知各个服务,系统已经就绪,桌面程序Home就是在ActivityManagerService.systemReady()通知的过程中建立的,最终调用 resumeTopActivityLocked-> startHomeActivityLocked
7. 解锁
1) 源码:
frameworks/policies/base/phone/com/android/internal/policy/impl/*lock*
2) 说明:系统启动成功后SystemServer调用wm.systemReady()通知WindowManagerService,进而调用PhoneWindowManager,最终通过LockPatternKeyguardView显示解锁界面,跟踪代码可以看到解锁界面并不是一个Activity,这是只是向特定层上绘图,其代码了存放在特殊的位置
8. 开机自启动的第三方应用程序
1) 源码:
frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
2) 说明:系统启动成功后SystemServer调用ActivityManagerNative.getDefault().systemReady()通知ActivityManager启动成功,ActivityManager会通过置变量mBooting,通知它的另一线程,该线程会发送广播android.intent.action.BOOT_COMPLETED以告知已注册的第三方程序在开机时自动启动。
9. 总结
综上所述,系统层次关于启动最核心的部分是zygote(即app_process)和system server,zygote它负责最基本的虚拟机的建立,以支持各个应用程序的启动,而system server用于管理android后台服务,启动步骤及顺序。
转自:http://blog.csdn.net/persuit/article/details/7353066
- android 启动
- Android 启动
- Android启动
- Android启动
- android启动
- Android 启动
- Android 启动
- Android启动
- android启动
- Android 启动
- Android启动:Linux启动流程
- android启动之init启动
- android启动之zygote启动
- android启动之SystemServer启动
- android启动之ServiceManager启动
- android启动之SystemServer启动
- Android启动续-------SystemSever启动
- Android启动:Linux启动流程
- 配置gerrit 及编译 环境
- https工作原理
- Ubuntu下安装VNC server & 【VNC】修改VNC分辨率大小
- 网络技术之IP地址详细介绍
- ubuntu server上安装x-window的方法
- Android 启动
- Android打印代码调用栈
- usb idVendor与idProduct修改与adb
- notification通过intent传递参数到activity
- chattr和lsattr命令详解
- /proc/uptime详解
- 在Android核的java核心库libcore中打印log,和单独编译
- 自定义控件学习笔记(四)文字的绘制
- Activity的四种launchMode