栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

Android系统启动流程(一)解析init进程启动过程 主要源码目录:
/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.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进行守护

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/716328.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号