https://mp.weixin.qq.com/s/AtXlQGuWv4ad4YcU50gSBw
开机加载 boot loader ,启动0号进程 init_task
init_task 两个阶段 引导+启动。
引导是 汇编语言
启动 走 start_kernel(kernel\common\init\main.c)
start_kernel 启动进程pid 1 kernel_init 以及 pid 2 kthreadd
kernel_init 最终执行 system/core/init 编译出来的二进制文件
最终执行的是system\core\init\main.cpp#main
core init 启动Epoll来处理多路IO复用。并且启动RC加载文件。
其中zygote就在rc中被加载启动。
zygote 代码 在frameworks/base/cmds/app_process/app_main.cpp
反射启动 runtime.start("com.android.internal.os.ZygoteInit", args, zygote); main
执行 frameworks/base/core/java/com/android/internal/os/ZygoteInit.java main
main 中forkSystemServer ,自身执行 runSelectLoop,循环等待响应新的进程
forkSystemServer 中反射执行 SystemServer#main
网友评论