Andorid-系统启动流程

212 阅读1分钟

Andorid 系统启动流程

img

  1. 手机开机后,引导芯片启动,引导芯片开始从固化在ROM里的预设代码执行,加载引导程序到 RAM,bootloder 检查 RAM, 初始化硬件参数等功能。

  2. 硬件等参数初始化完成后,进入到 Kernel 层。Kernel 层主要加载一些硬件设备驱动,初始化进程管理等操作。在Kernel中,首先启动 swapper 进程(pid = 0),用于初始化进程管理、内存管理、加载Driver等操作,再启动 kthread进程(pid=2),这些linux系统的内核进程,kthread 是所有内核进程的鼻祖。

  3. kernel 层加载完之后,硬件设备驱动与HAL层进行交互。初始化进程管理等操作会启动init进程,这些在Native 层中。

  4. init进程(pid=1,init进程是所有进程的鼻祖,第一个启动)启动后,会启动adbd,logd等用户守护进程,并且会启动servicemanager(binder服务管家)等重要服务,同时孵化出 zygote进程,这里属于c++ Framwork,代码为 c++

  5. zygote 进程是由 init进程 解析init.rc文件后fork生成,它会加载虚拟机,启动system Servcer(zygote孵化的第一个进程);System Server负责启动和管理整个Java Framework,包含ActivityManager, WindowManager,pacakageManager,PowerManager等服务。

  6. zygote同时会启动相关的APP进程,它启动的第一个App进程为Launcher,然后启动email 、sms 等进程,所有App进程都由 zygote fork 生成。