Android系统启动流程
来源:互联网 发布:淘宝其他店铺流量来源 编辑:程序博客网 时间:2024/06/07 10:43
我们先来看一张图,它清晰的说明了整个Android系统的启动流程,参考Android内核开发:图解Android系统的启动过程。
第一阶段:Android设备上电后,首先会从处理器片上ROM的启动引导代码开始执行,片上ROM会寻找Bootloader代码,并加载到内存。(这一步由“芯片厂商”负责设计和实现)
第二阶段:Bootloader开始执行,首先负责完成硬件的初始化,然后找到Linux内核代码,并加载到内存。(这一步由“设备厂商”负责设计和实现)
第三阶段:Linux内核开始启动,初始化各种软硬件环境,加载驱动程序,挂载根文件系统,并执行init程序,由此开启Android的世界。(这一步则是Android内核开发过程中需要涉及的地方)
第四阶段:Linux内核启动了系统中的第一个进程,init进程,也是root进程。通过脚本文件init.rc启动如下服务。
1、它启动了一些本地服务(Local Service),也指运行在C++层的系统守护进程,如Service Manager,Installd(后面我们会讲到),Zygote。
2、启动了一些Android Service,Android服务是指运行在Dalvik虚拟机进程中的服务。
每一个由init直接启动的本地服务都是一个独立的Linux进程
Init进程启动Service Mananger
init.rc位于system/core/rootdir/init.rc中,其中启动servicemanger的代码为:
service servicemanager /system/bin/servicemanager user system critical onrestart restart zygote onrestart restart media第一行关键字service表明Service Manager是以服务的形式启动的,它对应的程序文件和进程名称分别为/system/bin/servicemanager和servicemanager。
第二行的关键字user表明Service Manager是以系统用户system的身份运行的。
第三行的关键字critical表明Service Manger是系统的一个关键服务。在系统的运行过程中,关键服务是不可以退出的,一旦退出,就会被系统重启。
第四行和第五行的关键字onrestart表示一旦Sevice Manger被系统重启,就需要将zygote和media两个进程重新启动。
Service Manager进程的执行过程,请参考Service Manager进程启动,睡眠等待在进程proc->wait。
Init进程启动Installd进程
service installd /system/bin/installd socket installd stream 600 system systemInstalld进程在端口地址600等待socket的请求。
表示Installd进程在启动的过程中,需要在内部创建一个名称为"installd"的Socket。这个Socket是用来执行进程间通信的,它的访问权限被设置为600。
Init进程启动Zygote进程
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server socket zygote stream 666 onrestart write /sys/android_power/request_state wake onrestart write /sys/power/state on onrestart restart media onrestart restart netd
参考Zygote进程的启动流程。
Zygote进程启动System进程
参考System进程的启动流程第一部分,System进程的启动流程第二部分。
启动Launcher进程
参考Launcher进程的启动。
在Launcher进程中启动Home Screen。
参考Home界面的启动。
- Android系统启动流程 -- android
- Android系统启动流程 -- android
- Android系统启动流程 -- android
- Android系统启动流程 -- android
- Android系统启动流程 -- android
- Android系统启动流程 -- android
- Android系统启动流程 -- android
- android系统启动流程分析:
- Android系统启动流程 -- bootloader
- Android系统启动流程
- Android系统启动流程 -- bootloader
- Android系统启动流程 -- bootloader +
- Android系统启动流程
- Android系统启动流程
- Android系统启动流程
- Android系统启动流程
- Android系统启动流程 -- bootloader
- Android系统启动流程 -- bootloader
- linux文件系统变为只读的修复
- 浏览器渲染原理
- Interleaving String
- Android中Application类用法
- C++string 分割
- Android系统启动流程
- Swift调用C/C++/OC语言桥接文件命名规则
- boost bind 实现方法
- Android Jni/Linux APP层和kernel层延时
- OAuth的机制原理讲解及开发流程
- 62 Unique Paths
- 安卓中的Flux架构
- gcc的 -Wl参数的作用
- AJAX给一个表填充内容,别的js方法获取不到此表内容