美文网首页
Android系统启动流程

Android系统启动流程

作者: 开心的锣鼓 | 来源:发表于2021-05-10 22:25 被阅读0次

    一、启动电源以及系统启动

    • 当电源按下时引导芯片代码从预定义的地方(固化在ROM)开始执行,加载引导程序BootLoader到RAM,然后执行。

    二、引导程序BootLoader

    • 引导程序BootLoader是在Android操作系统开始运行前的一个小程序,它的主要作用是把系统OS拉起来并运行。

    三、Linux内核启动

    • 当内核启动,设置缓存、被保护存储器、计划列表、加载驱动。在内核完成系统设置后,它首先在系统文件中寻找init.rc(启动脚本)文件,并启动init进程
      注:init.rc是一个非常重要的配置文件,它是由Android初始化语言(Android Init Language)编写的脚本,这种语言主要包含五种类型语句:Action、Command、Service、Option和Import。在Android8.0中对init.rc文件进行了拆分,每个服务对应一个rc文件。

    四、init进程启动

    • init进程是Android系统中用户空间的第一个进程,进程号为1,是Android系统启动流程中一个关键的步骤。
    • init进程做的工作比较多,主要用来创建和挂载启动所需的文件目录、初始化和启动属性服务、启动Zygote进程。
      4.1 Zygote
      • 在Android系统中,DVM和ART、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们称它为孵化器。它通过fock的形式来创建应用程序进程和SystemServer进程,由于Zygote进程在启动时会创建DVM或者ART,因此通过fock而创建的应用程序进程和SystemServer进程可以在内部获取一个DVM或者ART的实例副本。
      • Zygote进程是在init进程启动时创建的,起初Zygote进程的名称并不是叫"zygote",而是叫"app_process",这个名称是在Android.mk中定义的,Zygote进程启动后,Linux系统下的pctrl系统会调用app_process,将其名称换成了"zygote"。
    • 从Android5.0开始,Android开始支持64位程序,Zygote也就有了32位和64位的区别,分别对用不同的脚本:init.zygote32.rc、init.zygote32_64.rc、init.zygote64.rc、init.zygote64_32.rc
      4.2 Zygote进程启动过程
      • 创建AppRuntime并调用其start方法,启动Zygote进程。
      • 创建Java虚拟机并为Java虚拟机注册JNI方法。
      • 通过JNI调用ZygoteInit的main函数进入Zygote的Java框架层。
      • 通过registerZygoteSocket方法创建服务器端Socket,并通过runSelectLoop方法等待AMS的请求来创建新的应用程序进程。
      • 启动SystemServer进程。
      4.3 SystemServer进程
      • 启动Binder线程池,这样就可以与其他进程进行通信。
      • 创建SystemServiceManager,其用于对系统的服务进行创建、启动和生命周期管理。
      • 启动各种系统服务(引导服务、核心服务、其他服务)。

    五、Launcher启动

    • 通俗来讲Launcher就是Android系统的桌面,它的作用主要有一下两点:
      • 作为Android系统的启动器,用于启动应用程序。
      • 作为Android系统的桌面,用于显示和管理应用程序的快捷图标或者其他桌面组件。

    相关文章

      网友评论

          本文标题:Android系统启动流程

          本文链接:https://www.haomeiwen.com/subject/kjkwdltx.html