1. init进程
2. zygote进程
2.1 AndroidRuntime
2.2 ZygoteInit
3. system_server进程
3.1 init1阶段
3.2 init2阶段
接着Linux启动部分 http://blog.csdn.net/qianjin0703/article/details/6881107
1. init进程
系统在内核空间初始化进程,内存,文件系统,驱动模块之后,调用init_post()函数,开启第一个用户进程init,进入用户空间。
/kernel/init/main.c (仅截取部分重要代码)
static noinline int init_post(void)
{
run_init_process("/sbin/init");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
}
static noinline int init_post(void)
{
run_init_process("/sbin/init");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
}
终端下查看1号进程,
可见,init是系统守护进程和zygote的父进程。
/system/core/init/init.c
int main(int argc, char **argv)
{
mkdir("/dev", 0755);
mkdir("/proc", 0755);
mkdir("/sys", 0755);
mount("devpts", "/dev/pts", "devpts", 0, NULL);
mount("proc", "/proc", "proc", 0, NULL);
mount("sysfs", "/sys", "sysfs", 0, NULL);
open_devnull_stdio();
klog_init();
property_init();
get_hardware_name(hardware, &revision);
process_kernel_cmdline();
init_parse_config_file("/init.rc");
action_for_each_trigger("early-init", action_add_queue_tail);
queue_builtin_action(wait_for_coldboot_done_action, "wait_for_coldboot_done");
queue_builtin_action(keychord_init_action, "keychord_init");
queue_builtin_action(console_init_action, "console_init");
action_for_each_trigger("init", action_add_queue_tail);
for(;;) {
execute_one_command();
restart_processes();
nr = poll(ufds, fd_count, timeout);
for (i = 0; i
if (ufds[i].revents == POLLIN) {
if (ufds[i].fd == get_property_set_fd())
handle_property_set_fd();
else if (ufds[i].fd == get_keychord_fd())
handle_keychord();
else if (ufds[i].fd == get_signal_fd())
handle_signal();
}
}
}
return 0;
}
int main(int argc, char **argv)
{
mkdir("/dev", 0755);
mkdir("/proc", 0755);
mkdir("/sys", 0755);
mount("devpts", "/dev/pts", "devpts", 0, NULL);
mount("proc", "/proc", "proc", 0, NULL);