Android系统启动流程

在Android中系统的启动流程是一个经常会被问到的问题,那么下面我们通过一张图来说明一下

 从上面的图片中可以看到它的一个启动流程.

1.BootLoader

  首先,当我们点击电源开关后,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后执行,
这时执行的就是BootLoader,它会去初始化硬件 映射内存等,完成上面操作后就好加载并启动内核(kerner)

2.kernel

  kernel启动后,会去初始化各种软硬件环境,加载驱动程序,挂载根文件系统……,完成上面工作后回去寻找init文件,并执行这个文件来启动init进程

其实就是system\core\init\init.c文件的main方法

3.init进程

  init进程是系统第一个进程,进程ID为1,它主要有两个作用,

  1.挂载目录,比如/sys、/dev、/proc等,

  2.解析并运行init.rc配置文件,根据配置文件启动各种系统服务,Zygote,ServiceManager, surfaceFlinger,MediaServer等

  init.rc中的Zygote配置如下: (system/core/rootdir/init.rc)

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server

4.Zygote进程

  Zygote进程主要包含两大模块,

    socket服务端:用于接收启动新的Dalvik进程命令

    共享资源和类:共享类是在preload-classes文件中定义的,共享资源是在preload-resources文件中定义。Zygote装载好了这些类和资源后,新的Dalvik进程就不需要在装载这些类和资源

  Zygote启动分为两个阶段,

    启动虚拟机:

    启动system_Server服务: 加载共享资源,注册Zygote socket监听,启动system_server进程,进入循环监听模式,最好退出Zygote监听

启动系统服务

  在system_server进程中会启动一些其它的系统服务,包括电源管理,Activity管理,AWS PWS 等等.

启动laucher

 

posted @ 2024-05-15 22:39  coder木易  阅读(9)  评论(0编辑  收藏  举报