android系统启动过程

####

Android系统启动过程
  1. Bootloader加载

  2. linux内核加载,文件系统挂载

  3. init进程启动,解析init.rc配置文件

  4. 启动serviceManager SurfaceFling MediaServer binder 驱动

    启动binder机制:

    5.1 打开binder驱动,

    5.2 映射虚拟内存,分配内存缓冲区

    5.3 注册binder线程

    5.4 进入binder loop

  5. Zygote进程启动,根据init.rc配置文件启动zygote

  6. 启动Android虚拟机,注册JNI函数

  7. 预加载系统资源,提高app启动速度

  8. 启动Systemserver

  9. 注册socket,开启无限循环,通过监听socket,等待AMS命令fork进程

  10. 启动系统服务,AMS,PKMS,WMS等分批启动,把这些系统服务注册到ServerManager,方便快速获得binder对象,

  11. AMS启动后SystemReady回调时候启动launcher

系统服务器启动的互相依赖怎么解决
  • 分批启动

  • 分阶段启动

    1
    2
    3
    4
    5
    6
          //启动引导服务
    startBootstrapServices();
    //启动核心服务
    startCoreServices();
    //启动其他服务
    startOtherServices();
ServcieManger启动和工作原理
  • 调用函数 binder_open 打开设备文件 /dev/binder 以及将它映射到本进程的地址空间.
  • 调用函数 binder_become_context_manager 将自己注册为所有服务的大管家.
  • 调用函数 binder_loop 来循环等待和处理 Client 进程的通信请求.