Android Zygote 从何而来?揭开 Android 系统启动的面纱
bootloader 在 android 系统初始化前运行,他不属于 android 操作系统部分。通常情况下厂商会在 bootloader 中做一些加密及安全相关的功能。
bootloader 程序分两个阶段执行。第一阶段,它检测外部 RAM 并加载第二阶段的辅助程序。在第二阶段,bootloader 设置网络、内存等,设置内核运行参数等,即为 kernel 运行做准备。
你可以在 aosp 中找到这部分代码(android 版本 2.xx,后面有改动),
aosp/bootable/bootloader/legacy/usbloader(看源码需翻墙)
其中包含两个重要文件,
Init.s,负责初始化堆栈,清空BSS(Block Started by Symbol segment),最终调用 main.c 中的_main()方法。
main.c,负责初始化硬件(时钟,主板,键盘,控制台),并且创建 linux 标签。
3. Kernel(内核) android 内核启动与 linux 相似,例如设置高速缓存、受保护的内存、调度和加载驱动程序。当内核完成系统设置工作,它会在系统文件夹中寻找需要初始化
的服务。
android 与 linux 启动的不同点有哪些?
Binder:它是 android 特有的进程间通信机制和远程方法调用系统。
ashmem(Android Shared Memory):它是一个新的共享内存分配器,类似于 POSIX SHM,但具有不同的行为,并支持更简单的基于文件的 API。
pmem(Process memory allocator):它用于管理用户空间和内核驱动程序之间共享的大量(1-16+MB)物理上连续的内存区域。
logger:这是对 logcat 命令的内核支持。
wakelocks:用于电源管理文件。它使机器在每个事件的基础上保持唤醒,直到唤醒锁被释放。
oom handling:当可用内存过低时它会杀死进程。
alarm manager:从用户态通知内核唤醒。
RAM_CONSOLE:允许将内核 printk 消息保存到 RAM 中的缓冲区,以便在内核死机后可以在下一次内核调用中查看它们。
用于 ADB 的 USB 小工具驱动程序
yaffs2 闪存文件系统(作者也不知道这是啥)
4. Init 进程
Init 是系统的第一个进程,它是所有进程的父进程。它有两个主要任务,
挂载目录,例如/sys , /dev or /proc。
运行 init.rc 脚本
init 进程可以在这里找到aosp/system/core/init
init.rc 脚本可以在这里找到aosp/system/core/rootdir/
init.rc 中语言的规则是特定的,可以在这里查询,community.nxp.com/t5/i-MX-Pro…
在这个过程中,你可以看到 android 启动画面。
5. Zygote 和 Dalvik(终于到了这一步)
在 java 中,每个程序运行在一个单独的内存隔离的虚拟机实例中,每个虚拟机实例都要消耗一部分内存,我们知道 android 通常是手持设备,内存有限,如果采用同样的策略,虚拟机实例就会消耗掉大量内存。
为了克服内存问题,android 中才出现了 zygote。zygote 实现了跨 Dalvik 虚拟机的代码共享,实现了更低的内存占用和启动时间。zygote 是在系统引导时启动的虚拟机进程。zygote 预加载并初始化核心库类。
zygote 加载过程如下,
加载 zygote 初始化类,aosp/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
registerZygoteSocket(),为 zygote 命令通道注册一个套接字服务。
preloadClasses(), 初始化 zygote 进程,加载并初始化常用类。
preloadResources(),加载可以在进程间共享的资源。
在此过程,你可以看到启动动画。
6. System Service(系统服务)
完成上面的工作后,zygote 会 fork 一个新的进程去启动系统服务。
核心服务如下:
Starting power manager
Creating the Activity Manager
Starting telephony registry
Starting package manager
Set activity manager service as system process
Starting context manager
Starting system contact providers
Starting battery service
Starting alarm manager
Starting sensor service
Starting window manager
Starting Bluetooth service
评论