Android系统启动 ---- 主要流程类

系列文章目录

Android系统开发 ----- 系统服务开发_MrDarly的博客-CSDN博客_android系统服务开发Android系统开发 系统服务开发https://blog.csdn.net/weixin_68948960/article/details/125427955?spm=1001.2014.3001.5502

Android系统启动简要总结以下几步

第一步:加载引导程序BootLoader到RAM中,使用ROM中烧录好的引导程序进行操作系统启动

第二步:初始化idle进程,主要是初始化进程管理、内存管理等工作;创建threadd进程

第三步:创建init进程(用户空间的节点)

第四步:从init进程中fok一个Zygote进程(Java进程的节点)

五步:Zygote进程fok一个SytemServer进程、ZygoteServer启动runSelectLoop,当有新的APP需要启动时,通过ZygoteConnection的processCommand方法进行APP启动

六步:SytemServer进程创建系统Context、并创建启动系统服务

启动简图如下:

Android系统启动 ---- 主要流程类_第1张图片

按照启动顺序查看文件

通电后找到/system/bin/init 在init中进行kernel初始化操作,开始调用

1、/system/core/init/main.cpp kernel代码

        FirstStageMain  路径/system/core/init/first_stage_init.cpp

        功能描述:

                文件挂载 也就是创建所需的文件

                重定向 输入、输出

                初始化内核的日志打印

                启动selinux_setup --linux的安全策略

        SetupSelinux 路径/system/core/init/selinux.cpp

        功能描述:

                同上   

        SecondStageMain  路径/system/core/init/init.cpp

        功能描述:

               开始解析init.rc 进行整体配置解析LoadBootScripts

2、/system/core/rootdir/init.rc 通过解析这里,根据系统配置 启动Zygote进程

3、/frameworks/base/cmds/app_process/app_main.cpp 调用这个类进行ZygoteInit启动

        功能描述:这里启动的Zygote都是Kernel中的环境内容,Zygote是启动Android的主要管理类

        runtime.start("com.android.internal.os.ZygoteInit", args, zygote)

4、/frameworks/base/core/jni/AndroidRuntime.cpp 这是Zygote的native的启动

        通过这个类ZygoteInit正式启动

        通过这个回调方法CallStaticVoidMethod开始运行ZygoteInit的main方法

(系统开始通过Zygote进程从native层正式进入到Java层)

5、/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java

        从main方法开始执行

        功能: forkSystemServer进行SystemServer启动后并执行run

        启动ZygoteServer.runSelectLoop

6、/frameworks/base/services/java/com/android/server/SystemServer.java

        功能:所有的其它系统服务都由SystemServer创建

        启动其它服务的startOtherServices()代码如下。如果需要启动自己的服务,可以放在该函数里面启动

7、/frameworks/base/core/java/com/android/internal/os/ZygoteServer.java

        runSelectLoop()的具体实现

8、/frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java

        processCommand的具体实现 通知ZygoteServer进行准备启动APP

        创建一个新APP的方法 Zygote.forkAndSpecialize();

你可能感兴趣的:(android)