Android/Framework

Android 시스템 부팅 과정 개요

임베디드 친구 2025. 3. 16. 10:26
728x90
반응형

Android 시스템 부팅 과정 개요

Android 운영체제는 리눅스 커널을 기반으로 한 복잡한 구조를 가지고 있으며, 시스템이 부팅되는 과정도 여러 단계로 이루어져 있습니다. 본 포스팅에서는 Android 시스템이 전원을 켠 후 정상적으로 동작하기까지의 주요 부팅 과정을 설명하겠습니다. 필요에 따라 AOSP(Android Open Source Project) 코드를 참고하여 설명을 보완하겠습니다.


1. Android 부팅 과정 개요

Android 시스템의 부팅 과정은 다음과 같이 주요 단계로 구분됩니다.

  1. 부트로더(Bootloader) 실행
  2. 커널 및 init 프로세스 실행
  3. Zygote 및 System Server 실행
  4. 애플리케이션 프레임워크 및 런처 실행

각 단계는 시스템이 정상적으로 부팅되기 위해 필수적인 역할을 수행합니다. 이제 각 단계를 자세히 살펴보겠습니다.


2. 부트로더(Bootloader) 실행

부트로더는 Android 시스템이 실행되기 전에 가장 먼저 실행되는 프로그램입니다. 부트로더는 SoC(System on Chip) 제조업체에 따라 다르게 구현될 수 있으나, 기본적인 역할은 공통적입니다.

  1. 하드웨어 초기화: CPU, RAM, 저장 장치 등을 초기화합니다.
  2. 부트 파티션 로딩: 부트 이미지를 RAM에 로드합니다.
  3. 커널 실행: 리눅스 커널을 로드하고 실행합니다.

AOSP에서는 부트로더와 관련된 부분이 bootable/bootloader/ 디렉터리 내에 정의되어 있습니다.


3. 커널 및 init 프로세스 실행

3.1 리눅스 커널 로딩

부트로더가 커널을 로드하면, 커널이 실행을 시작합니다. 이 과정에서 다음과 같은 작업이 수행됩니다.

  • CPU 및 메모리 관리 초기화
  • 드라이버 로드 (스토리지, 네트워크, 디스플레이, 오디오 등)
  • 파일 시스템 마운트 (주로 ramdisk)
  • 첫 번째 사용자 공간 프로세스인 init 실행

3.2 init 프로세스 실행

커널이 초기화된 후 가장 먼저 실행되는 사용자 공간 프로세스가 init입니다. Android의 init은 일반적인 리눅스 시스템의 init과 다르게 동작하며, AOSP의 system/core/init/에 해당 코드가 존재합니다.

init의 주요 역할은 다음과 같습니다.

  • init.rc 스크립트 실행
  • 기본적인 시스템 서비스 시작 (예: ueventd, vold 등)
  • ZygoteSystem Server 실행

다음은 init.rc에서 정의된 일부 서비스 예제입니다.

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
    class main
    user root
    group root
    onrestart restart zygote

이와 같이 zygoteinit 프로세스에 의해 실행되도록 정의됩니다.


4. Zygote 및 System Server 실행

4.1 Zygote

Zygote는 Android 시스템에서 애플리케이션 프로세스를 생성하는 역할을 담당하는 핵심 프로세스입니다. app_process 바이너리를 통해 실행되며, Java VM을 초기화하고 기본적인 시스템 클래스를 로드합니다.

Zygote의 주요 역할은 다음과 같습니다.

  • Java VM 생성 및 초기화
  • 기본적인 Android 시스템 클래스 로딩
  • System Server 실행
  • 애플리케이션 프로세스 fork

Zygote는 com.android.internal.os.ZygoteInit 클래스를 통해 초기화되며, main() 메서드가 실행됩니다.

public static void main(String argv[]) {
    ZygoteServer zygoteServer = new ZygoteServer();
    RuntimeInit.enableDdms();
    preload();
    zygoteServer.run();
}

4.2 System Server

Zygote가 실행되면 System Server를 fork하여 실행합니다. System Server는 Android의 핵심 시스템 서비스를 관리하는 프로세스로, 다음과 같은 주요 서비스를 초기화합니다.

  • Activity Manager Service (AMS): 애플리케이션 생명주기 관리
  • Window Manager Service (WMS): UI 및 윈도우 시스템 관리
  • Package Manager Service (PMS): 애플리케이션 패키지 관리
  • Power Manager Service (PMS): 전원 관리

System Server는 com.android.server.SystemServer 클래스에서 실행됩니다.

public static void main(String[] args) {
    new SystemServer().run();
}

5. 애플리케이션 프레임워크 및 런처 실행

System Server가 실행되면, Activity Manager Service(AMS)가 Launcher 애플리케이션을 실행합니다. 사용자는 이때 홈 화면을 보게 됩니다.

5.1 애플리케이션 프로세스 생성

사용자가 앱을 실행하면 AMS는 Zygote를 통해 새로운 프로세스를 fork하여 애플리케이션을 실행합니다.

5.2 런처(Launcher) 실행

Android 시스템이 정상적으로 부팅되면, 기본 런처가 실행되며 홈 화면이 나타납니다. 런처는 패키지 매니저를 통해 설치된 애플리케이션 목록을 조회하고 UI를 구성합니다.


6. 결론

Android 시스템의 부팅 과정은 부트로더, 커널, init, Zygote, System Server, 그리고 애플리케이션 프레임워크 실행 순서로 진행됩니다. 각 단계는 시스템이 정상적으로 동작하기 위한 중요한 역할을 수행하며, AOSP 코드를 참고하면 각 구성 요소가 어떻게 동작하는지 더욱 깊이 이해할 수 있습니다.

반응형