Android啟動, 首先kernel核心自動載入記憶體運行,它主要功能是完成各個裝置驅動的初始化,例如,照相機,藍芽,電話等驅動。
這部分啟動完後就開始按照init.rc 檔案中開始啟動系統進程
init.rc 的路徑為:platform/system/core/rootdir/init.rc 現在開始分析此檔案。
此檔案中可以看到如下格式:
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
socket zygote stream 66
onrestart write /sys/android_power/request_start wake
onrestart write /sys/power/state on
onrestart restart media
onrestart restart netd
這種格式,是指明要啟動一系列系統級的服務, 如上,
service zygoet:就是啟動了一個zygote服務,
/system/bin/app_process:進程bin檔案的具體路徑,可以zygote是對應著app_process進程,
其餘的參數,等會兒解釋,
app_pocess檔案的路徑為:/platform/frameworks/base/cmds/app_process/app_main.cpp,開啟此檔案,
可以看到此檔案中的main()函數,由此可以得出結論,這個main()函數就是zygote服務的入口,
那麼,剛才init.rc中service中的參數也就明白了,可以對應到
main(int argc,const char* const argv[]) 的參數中,會用到。
此外,此檔案中還有一個重要的類,如下定義:
class AppRuntime:public AndroidRuntime { }
其中類AndroidRuntime類路徑為:/platform/frameworks/base/core/jni/AndroidRuntime.cpp
此類用於啟動java運行環境,其中一句最重要的代碼為:
main(int argc,const char* const argv[]) {
.....
AppRuntime runtime;
runtime.start("com.android.internal.os.Zygoteinit",startSystemServer);
......
}
此句是執行 ZygoetInit類,用於初始化Zygote服務, 下面開始分析ZygoteInit類: