/system/core/init/http://androidxref.com/6.0.0_r1/xref/system/core/init/init.cpp1.init简介
init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init。
init进程启动
init的入口函数为main,代码如下所示。
system/core/init/init.cpp
init进程总结
讲到这,总结起来init进程主要做了三件事:
1.创建一些文件夹并挂载设备
2.初始化和启动属性服务
3.解析init.rc配置文件并启动zygote进程
-------------------------------------------------------
子进程可以继承父进程的资源
1).init.rc和init.cpp是干嘛的 main 方法里面,因为它是c语言,有 148 行代码(不包括子函数代码)具体分为四个步骤: 1.创建目录,挂载分区(android Q分区有所改变) 2.解析启动脚本. init.rc 文件是 Android 系统的重要配置文件,位于 /system/core/rootdir/init.rc 3.启动解析的服务 4.守护解析的服务。 问题:init 进程是如何守护子进程的? socketpair,信号sigle 初始化epoll,依次设置signal、property、keychord这3个fd可读时相对应的回调函数。进入无线循环,用来响应各个进程的变化与重建。 问题:init创建了哪些服务? init 创建了 zygote(创建 App 应用的服务)、 servicemanager (client 与 service 通信管理的服务) surfaceflinger(显示渲染服务) media(多媒体服务) 等 service 进程。 问题:init如何启动zygote进程的? frameworks/base/cmds/app_process/app_main.cppint main(int argc, char* const argv[]) { ... if (zygote) { runtime.start("com.android.internal.os.ZygoteInit", args, zygote);//1 } else if (className) { runtime.start("com.android.internal.os.RuntimeInit", args, zygote); } else { fprintf(stderr, "Error: no class name or --zygote supplied.n"); app_usage(); LOG_ALWAYS_FATAL("app_process: no class name or --zygote supplied."); return 10; } }问题:里面的死循环是干嘛的? init.c 无限循环遍历service_list进行守护
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)