Android系统的启动流程分析
最近在听到很多面试官问Android工程师的关于启动的问题,我最近研究了一番,大概理了一理,过程如下,文章末尾有看源码攻略。
##当用户按下物理按键对Android系统进行开机的时候,系统首先会加载的是Boot Loader,会进行一些手机各大厂商自定制的初始化操作,同时启动Android系统中第一个用户进程init(),部分关键性源码如下:
int main(int argc, char **argv)
{
...
log_init();
INFO("reading config file\n");
init_parse_config_file("/init.rc");
...
}
上述init方法主要是初始化一些log以及初始化一些配置文件,接下来我们找到init.rc这个方法,源码如下:
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
socket zygote stream 666
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
...
在init.rc中我们可以看到启动了一个关键的服务—zygote服务,zygote翻译过来是孵化器/受精卵的意思,这个zygote服务主要是守护别的服务不被杀死以及孵化出多个服务,或许到这里大家还不是很明白,接下来我们进入到zygote类中去看,源码如下:
int main(int argc, const char* const argv[])
{
//设置zygote的参数
setArgv0(argv0, "zygote");
//设置zygote进程的名字
set_process_name("zygote")
//调用Android运行时开启ZygoteInit
runtime.start("com.android.internal.os.ZygoteInit",
startSystemServer);
}
在zygote中,进行了一些基本的设置,关键性的代码就是