← Back to Blogs

Android Boot Sequence

From power-on to home screen - step by step

1 min read

When you press the power button on an Android device, a carefully orchestrated sequence of stages brings the entire OS to life. Understanding this sequence is essential for AOSP debugging, custom ROM development, and diagnosing boot failures.

The Boot Sequence - Overview

Android Boot Stages

  Power Button Pressed
        │
        ▼
  ┌─────────────────┐
  │   Boot ROM      │  ← hardcoded in chip, loads bootloader
  └────────┬────────┘
           │
           ▼
  ┌─────────────────┐
  │   Bootloader    │  ← verifies & loads kernel (e.g. U-Boot, LK)
  │  (e.g. ABoot)   │  ← also handles fastboot / recovery mode
  └────────┬────────┘
           │
           ▼
  ┌─────────────────┐
  │  Linux Kernel   │  ← initializes CPU, memory, drivers
  │                 │  ← mounts root filesystem
  └────────┬────────┘
           │
           ▼
  ┌─────────────────┐
  │      Init       │  ← PID 1, reads init.rc files
  │  (first process)│  ← starts daemons & services
  └────────┬────────┘
           │
           ▼
  ┌─────────────────┐
  │    Zygote       │  ← Android VM starter process
  │                 │  ← pre-loads classes & resources
  └────────┬────────┘
           │
           ▼
  ┌─────────────────┐
  │ System Server   │  ← starts all framework services
  │                 │  ← ActivityManager, PackageManager...
  └────────┬────────┘
           │
           ▼
  ┌─────────────────┐
  │  Home Screen    │  ← Launcher app started by ActivityManager
  └─────────────────┘

Stage 1: Boot ROM

The Boot ROM is a small piece of read-only memory baked into the chip by the manufacturer. It runs the moment power is applied, performs basic hardware initialization, and loads the bootloader from a fixed storage location (usually eMMC or UFS).

Stage 2: Bootloader

The bootloader is the first user-programmable code. Its job is to verify the integrity of the kernel (via verified boot / AVB), set up basic hardware, and load the kernel into RAM. It also intercepts key combinations to enter fastboot or recovery mode.

Stage 3: Linux Kernel

The kernel initializes CPU cores, sets up memory management, loads device drivers, and mounts the root filesystem. Once ready, it hands control to the first userspace process: init.

Stage 4: Init (PID 1)

Init is the first process started by the kernel (PID 1). It reads .rc files (init.rc, vendor init.rc, etc.) to know which services to start, what properties to set, and which file systems to mount. It stays running forever, restarting crashed services.

Stage 5: Zygote

Zygote is the parent of every Android app process. It pre-loads the entire Java framework and common resources into memory once, then forks a copy of itself for each new app. This fork-on-demand model makes app launch dramatically faster - no need to reload the framework each time.

Stage 6: System Server

System Server is the most important process in Android. Zygote spawns it first, and it starts all the core framework services that apps depend on.

Tip: If your device gets stuck in a boot loop, check logcat for init failures (logcat -s init) or system server crashes (logcat -s SystemServer). Most boot failures happen at the init → Zygote → SystemServer chain.