Android启动过程
mob 发布于 2025-02-02

启动过程

在计算机领域,引导是指启动计算机或计算机设备,直到可以使用为止。它可以通过硬件(如按钮按下)或软件命令启动。打开电源后,电脑相对来说比较笨,只能读取其存储的一部分,称为只读存储器。在那里存储了一个名为固件的小程序。它可以进行开机自检,最重要的是,允许访问其他类型的内存,如硬盘和主内存。固件将更大的程序加载到计算机的主内存中并运行它。在通用计算机中,以及在智能手机、平板电脑中,都会运行引导管理器(可选)。

Android启动过程包括以下六个步骤:

1、引导ROM:此步骤称为开机和系统启动。这意味着,每当我们按下电源按钮时,Boot ROM代码都会从ROM中硬连线的预定义位置开始执行。Boot ROM将BootLoader加载到RAM中并开始执行。

2、BootLoader:BootLoader是一个低级代码,包含告诉设备如何启动和查找系统内核的指令。Bootloader是制造商放置锁和限制的地方。

引导加载程序是在任何操作系统开始运行之前执行的代码。BootLoader分两个阶段执行:

a) 在第一阶段,它检测外部RAM并加载一个有助于第二阶段的程序。

b) 在第二阶段,引导加载程序设置运行内核所需的网络、内存等。

3、内核:一旦内核启动,它就会启动设置缓存、保护内存、调度、加载驱动程序、启动内核守护进程、挂载根文件系统、初始化输入/输出、启动中断、初始化进程表。内核是与我们设备中的硬件接口的最底层易于更换的软件。当内核首先完成系统设置时,它会在系统文件中查找“init”并启动根进程或系统的第一个进程。

4、Init:Init是第一个进程,或者我们可以说它是所有进程的祖父。

Init流程有两个职责:

  • 挂载/sys、/dev或/proc等目录
  • 运行/init.rc脚本。init.rc负责系统的初始设置。

5、init进程将设置所有本机服务,这类似于常规的Linux系统引导。

Zygote和Dalvik VM:Zygote是一个在系统启动时启动的VM进程。当app_process启动Zygote时,它首先创建Dalvik VM,然后调用Zygote的main()方法。Zygote通过/dev/socket/jiggle收到启动应用程序的请求。一旦发生,它就会触发fork()调用。

当一个进程是一个分支时,它会为自己创建一个克隆。它在另一个存储空间中复制自己。这是相当有效的。当这种情况发生在Zygote上时,它会创建一个精确而干净的新Dalvik VM作为线程,预加载任何应用程序所需的所有必要类和资源。这使得创建VM和加载资源的过程非常高效。

它支持跨Dalvik VM的代码共享,这有助于实现最短的启动时间。

6、系统服务:在合子预加载所有必要的Java类和资源后,它将启动系统服务。系统服务器是Android系统的核心。首先,服务器将加载一个名为android_servers的本机库,该库提供本机功能的接口。

然后调用将设置本机服务的本机init方法。设置本机服务后,它将创建服务器线程。此线程将根据必要的启动顺序启动系统中的其余服务。

每个服务都在SystemServer中的单独Dalvik线程中运行。

一旦系统服务在内存中启动并运行,Android就完成了启动过程,此时“ACTION_boot_completed”标准广播动作将被触发。

mob
关注 私信
文章
69
关注
0
粉丝
0