写在前面
承接上一篇,在cgroup子系统初始化完成后,init会继续执行开机流程,且通过代哦用ExecuteCommand()函数。
/system/core/init/init.cppint SecondStageMain(int argc, char** argv) {......ActionManager& am = ActionManager::GetInstance();am.ExecuteOneCommand();......};return builtin_function;}
一,Native服务启动
那么,如上所述,init进程在解析或init.rc文件或则其他rc文件时,会通过start指令触发一些native服务的启动。或者以组的方式进行启动,以surfaceflinger为例如下:
/system/core/rootdir/init.rc
on boot
class_start core
/frameworks/native/services/surfaceflinger/surfaceflinger.rcservice surfaceflinger /system/bin/surfaceflingerclass core animation
init解析到start命令后会调用相应的函数do_start,来初始化相关的服务。
二,进程控制组迁移
我们来看下rc文件中如何通过start指令来触发native进程的启动。
/system/core/init/builtins.cpp// Builtin-function-map start
cons