寫在前面
承接上一篇,在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