1.Android 小米权威专家手把手解读 init进程启动 (基于安卓12源码分)

Android系统启动流程(一)解析init进程启动过程

主要源码目录:
<span style="color:#172b4d"><span style="background-color:#2d2d2d"><span style="color:#cccccc"><code class="language-kotlin"><span style="color:#67cdcc">/</span>system<span style="color:#67cdcc">/</span>core<span style="color:#67cdcc">/</span><span style="color:#cc99cd">init</span><span style="color:#67cdcc">/</span></code></span></span></span>

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.cpp

int 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值