Android系统启动流程

     我们先来看一张图,它清晰的说明了整个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 system
    Installd进程在端口地址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界面的启动

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值