Linux 内核启动后会调用android 的 init 程序,在系统根目录下的 init 程序:
root@G0215D:/ # ls -l *init
-rwxr-x--- root root 1146760 1970-01-01 08:00 init
1. init 程序代码在安卓源码 system/core/init 目录下,可以看看 init.cpp 里的 main 函数。
2. init 程序主要处理 *.rc 文件,进行安卓环境初始化和相关启动核心服务。
3. 在 init.zygote64.rc 中定义了 zygote 进程的启动,也就是安卓虚拟机启动:
service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server
class main
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
onrestart restart media
onrestart restart netd
writepid /dev/cpuset/foreground/tasks
4. zygote 代码位于 frameworks/base/cmds/app_process/app_process.cpp中
这个程序用来启动虚拟机,并且调启动纯Java程序 ZygoteInit 进行初始化;
frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
5. ZygoteInit 的main函数中接收参数,主要启动 SystemServer
frameworks/base/services/java/com/android/server/SystemServer.java
6. SystemServer 负责启动android系统需要的各种服务。比如启动 AMS,PMS,SystemUI等;