0
点赞
收藏
分享

微信扫一扫

lua学习笔记8(迭代器的使用)

花姐的职场人生 04-09 11:00 阅读 0
android

Android系统的启动流程

启动过程中,用户可控部分是framework的init流程。init是系统中的第一个进程,其它进程都是它的子进程。

启动逻辑源码参照:system/core/init/main.cpp

关键调用顺序:main->FirstStageMain->SetupSelinux->SecondStageMain

FirststageMain:挂载各种文件。

SetupSelinux:安全策略。每个类型的进程都有自己的权限,能否访问网络,能否访问文件,接收广播等。其中“.te”文件为安全策略文件。

SecondStageMain:挂载额外文件,设置进程OOM等级,LoadBootScripts,启动其它进程等。其中loadbootscritp来解析.rc文件。

.rc文件:run command的缩写,是一堆脚本指令,init进程可以读取rc文件来运行脚本,从而启动其它进程。

system/core/rootdir/init.rc部分内容如下:

在解析和执行.rc文件的过程中,会fork一个zygote进程。而安卓上其他的应用进程都是由zygote进程孵化的。

zygote进程源码参照:frameworks/base/cmds/app_process/app_main.cpp

zygote的启动,源码参照:frameworks/base/core/jni/AndroidRuntime.cpp中的void AndroidRuntime::start(const char* className, const Vector<String8>& options, bool zygote)方法

一个APP,可以有多个进程,一个进程有一个VM。

zygote启动过程包括,

设置环境变量:setenv("ANDROID_ROOT", rootDir, 1);

初始化JVM:startVm(&mJavaVM, &env, zygote, primary_zygote)

注册JNI:startReg(env)

举报

相关推荐

0 条评论