Android随笔-启动Zygote的rc文件是什么?

发布时间:2026/7/5 1:34:05
Android随笔-启动Zygote的rc文件是什么? Zygote 启动使用rc 文件init 配置文件是因为 Android 的启动流程基于 init 进程 的启动机制设计。一、rc 文件是什么属性说明全称init runtime configurationinit 运行时配置格式Android init 语言类似脚本位置/system/etc/init/、/vendor/etc/init/等作用定义系统服务如何启动、何时启动、以什么权限启动二、Zygote 的 rc 文件示例Android 系统中有两个 Zygote 相关的 rc 文件1. init.zygote64.rc64位系统# 服务定义 service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server class main # 属于 main 类别系统启动时一起启动 priority -20 # 高优先级 user root # 以 root 用户运行 group root readproc reserved_disk socket zygote stream 660 root system # 创建 Socket用于 AMS 连接 socket usap_pool_primary stream 660 root system # USAP 池 Socket onrestart write /sys/android_power/request_state wake # 重启时唤醒设备 onrestart restart audioserver onrestart restart cameraserver onrestart restart media onrestart restart media.tuner onrestart restart netd onrestart restart wificond writepid /dev/cpuset/foreground/tasks # 写入 cgroup2. init.zygote32.rc32位系统service zygote /system/bin/app_process32 -Xzygote /system/bin --zygote --start-system-server class main ...三、为什么要用 rc 文件启动 Zygote原因 1统一的服务管理机制Android 的init 进程PID1是 Linux 内核启动后的第一个用户态进程负责挂载文件系统解析所有 rc 文件按规则启动系统服务rc 文件是 init 进程管理服务的标准方式Zygote 作为系统核心服务自然遵循这个机制。原因 2定义启动参数和命令行rc 文件中的 service 行定义了可执行文件路径/system/bin/app_process64启动参数-Xzygote /system/bin --zygote --start-system-server这些参数决定了 Zygote 的启动模式service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server # ↑ 可执行文件 ↑ 参数传递给 app_processapp_process 是入口程序它内部会启动 ART 虚拟机加载 ZygoteInit 类调用 ZygoteInit.main()原因 3创建通信 Socketrc 文件中这一行至关重要socket zygote stream660root system作用说明创建 Socket 文件/dev/socket/zygote权限660root 读写system 组读写用途AMS 通过此 Socket 发送 fork 请求为什么用 Socket 而不是 BinderZygote 启动时Binder 驱动还没准备好或不需要Socket 更简单fork 后子进程不需要继承复杂的 Binder 状态这是 Linux 原生 IPC不依赖 Android 特有的 Binder 机制原因 4定义重启策略onrestart write/sys/android_power/request_state wake onrestart restart audioserver onrestart restart cameraserver...Zygote是守护进程daemon如果崩溃init 会自动重启它。onrestart 定义了重启时需要联动的其他服务。原因 5资源隔离与权限控制user root group root readproc reserved_disk writepid/dev/cpuset/foreground/tasksZygote 以root运行因为 fork 后需要降权到应用 UID通过 writepid 将进程加入 cgroup实现资源调度四、rc 文件 vs 直接启动的对比方式缺点rc 文件的优势内核直接启动 Zygote无法管理服务生命周期init 统一守护崩溃自动重启硬编码在 init 代码中修改需重新编译内核修改 rc 文件即可无需编译用脚本启动没有标准化机制Android init 语言标准化、可解析手动创建 Socket容易出错rc 文件声明式定义init 自动创建五、完整启动链路六、总结rc 文件是 Android init 进程管理服务的标准配置方式。Zygote 通过 rc 文件启动是为了统一由 init 管理启动、重启、监控声明式配置参数、权限、Socket、重启策略解耦修改启动方式无需重新编译系统