Android手机的开机流程

10 阅读1分钟

1.开机流程示意图

Android系统结构体系

image.png

  • App应用层级

  • FrameWork层 ( AMS WMS PMS)

  • Native C/C++ Libraries层

  • Hardware Abstraction Layer (HAL ) 硬件厂商提供各种接口,调用底层驱动,而不会把和核心底层代码贡献出来.

  • Linux Kernel (Drivers驱动 BluthTooth Camera WIFI USB Audio)

2.Android系统启动流程

image.png image.png

  • 当电源按下,会引导芯片代码从ROM(read-only-momory)开始执行,加载引导程序Loader到RAM(read-access-memory),然后开始执行.

  • 启动linux内核,初始化init进程(第一个用户空间进程),加载各种驱动 bluthtooth wifi camera usb等相关工作. 1731576916397.png

  • init进程会fork 一个Zygote进程,并启动,同时也会启动ServiceManager(binder服务管家)。

  • Zygote进程初始化AndroidRuntime环境,启动虚拟机,注册JNI方法,执行ZygoteInit.main()函数,创建Zygote的Socket服务,fork SystemServer进程 ,zygoteServer.runSelectLoop()进入无限循环,当System Server进程启动 AMS, PMS ,WMS等等各种服务.

  • 最后到 App

3. Zygote启动流程

1730863303799.png

  • 初始化 AndroidRuntime (Android应用执行Java代码的运行环境)
  • 启动runtime
    创建虚拟机 ,注册Jni方法,使用JNI调用ZygoteInit的main()方法
  • ZygoteInit.main new ZygoteServer()创建Zygote的socket服务 r=forkSystemServer() r.run()执行main方法 zygoteServer.runSelectLoop()进入无线循环。