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、并创建启动系统服务
启动简图如下:
按照启动顺序查看文件
通电后找到/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();