整体流程:

android-boot

Step 1: 通电,系统启动

当接通电源时,Boot ROM 代码从预先定义的位置开始执行,该位置在 ROM 中硬编码。 它将 Bootloader 加载到 RAM 中并开始执行。

Step 2: Bootloader

Bootloader (引导加载程序)是一个在 Android 之前运行的小程序。 它不是 Android 系统的一部分。 引导加载程序是制造商放置锁定和限制的地方。引导程序分两个阶段执行。 在第一阶段,它检测外部 RAM 并加载程序。在第二阶段,为内核启动做准备,引导加载程序设置网络,内存等。

Bootloader 位置:

/bootable/bootloader/legacy/usbloader

Step 3: Kernel

Android内核的启动方式与 Linux 内核类似。随着内核的启动,开始设置缓存,受保护的内存,调度和加载驱动程序。当内核完成系统设置时,它会在系统文件中查找 init 文件。

Linux 和 Android 内核有什么区别?下面是 Android Project 对 Linux 内核所做的更改/插件列表:

  • Binder:它是一个Android特定的进程间通信机制和远程方法调用系统。
  • ashmem:“Android共享内存”。它是一个新的共享内存分配器,类似于POSIX SHM,但具有不同的行为,并且具有更简单的基于文件的API。
  • pmem:“进程内存分配器”:它用于管理用户空间和内核驱动程序之间共享的大型(1-16 + MB)物理上连续的内存区域。
  • logger:这是logcat命令的内核支持。
  • wakelocks 唤醒锁:它用于电源管理文件。它使机器在每个事件的基础上保持清醒,直到释放唤醒锁。
  • oom handling:当可用内存变低时,它会终止进程。
  • alarm manager:它允许用户空间告诉内核何时唤醒。
  • RAM_CONSOLE:允许将内核printk消息保存到RAM中的缓冲区,以便在内核崩溃后可以在下一次内核调用中查看它们。
  • 支持 ADB 的 USB 驱动程序
  • Android 最初使用 YAFFS2 作为文件系统. 2.3 之后, 改用 ext4.

Step 4: init process

Init 是第一个进程,可以说它是一个根进程,或者是所有进程的祖父。 init 进程有两个职责。

  1. 安装 /sys,/dev 或 /proc 等目录
  2. 运行 init.rc 脚本

Android 具有 init.rc 文件的特定格式和规则。init.rc中的内容及其用途。

Step 5: Zygote and Dalvik/ART

在 Java 中,我们知道单独的虚拟机实例将在内存中被每个应用程序单独使用,但在 Android 的情况下,VM 应尽可能快地运行应用程序。但是,如果多个应用程序启动 Dalvik(VM)的多个实例会发生什么?它将消耗大量内存。

为了解决这个问题,Android OS 有一个名为 Zygote 的系统。 Zygote 支持跨进程共享 Dalvik VM 的代码,实现更低的内存占用和最短的启动时间。 Zygote 是一个从系统启动开始就启动的虚拟机进程。 Zygote 会预加载并初始化核心库类。

Zygote装载过程:

  1. 加载 Zygote Init 类:
    <android source>/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
  2. registerZygoteSocket(): 它为zygote命令连接注册服务器套接字。
  3. preloadClasses(): 是一个简单的文本文件,包含需要预加载的类列表,可以在 <android source>/framework/base 找到该文件
  4. preloadResources(): android.R 文件中包含的所有内容都将使用此方法(主题和布局)加载。

这时,您可以看到启动动画。

Step 6: System service

完成上述步骤后,Zygote 将启动系统服务。 Zygote fork 了一个新的进程来启动系统服务。

核心服务:

  • Starting power manager
  • Creating the Activity Manager
  • Starting telephony registry
  • Starting package manager
  • Set activity manager service as system process
  • Starting context manager
  • Starting system contact providers
  • Starting battery service
  • Starting alarm manager
  • Starting sensor service
  • Starting window manager
  • Starting Bluetooth service
  • Starting mount service

其他服务:

  • Starting status bar service
  • Starting hardware service
  • Starting NetStat service
  • Starting connectivity service
  • Starting Notification Manager
  • Starting DeviceStorageMonitor service
  • Starting Location Manager
  • Starting Search Service
  • Starting Clipboard Service
  • Starting checkin service
  • Starting Wallpaper service
  • Starting Audio Service
  • Starting HeadsetObserver
  • Starting AdbSettingsObserver