상세 컨텐츠

본문 제목

Android Booting Sequence 안드로이드 부팅 과정

REVERSING/Android

by koharin 2021. 3. 25. 18:14

본문

728x90
반응형

1. Boot ROM

  • POWER 버튼을 누르면, ROM 내부의 Boot ROM 코드가 실행된다.
  • RAM으로 Bootloader의 첫 번째 단계를 로드한다.

 

2. Boot Loader

  • OS 시작 전 실행되는 코드이다.
  • 장치가 어떻게 시작하는지 알려주고 kernel을 찾는 명령어를 가진 low-level 코드이다.
  • 메모리(RAM) 초기화
  • Kernel 로드
  • Boot Loader 경로
    • <android source>/bootable/bootloader/legacy/usbloader
  • Boot Loader는 비휘발성 메모리에 상주한다.
  • 2단계로 진행된다.
    • Primary Boot Loader
      • Secondary Boot Loader를 디스크 내 특정 위치에서 로드한다.
    • Secondary Boot Loader
      • 메모리(RAM) 초기화
      • RAM의 "boot" flash 위치에 Kernel을 로드한다.

 

3. Android Kernel

  • 커널이 로드되면, 캐시, 메모리 보호, 예약, 인터럽트 컨트롤러, 스케줄링를 설정하고 드라이버를 로드한다.
  • Kernel이 시스템 세팅이 끝나면, 시스템 파일 내에서 "init" 을 찾는다.

Android Kernel에서 Linux Kernel에 추가한 것

Binder

  • Android-specific interprocess communication mechanism

ashmem

  • Android Shared Memory
  • file-based API인 공유 메모리 allocator

pmem

  • Process memory allocator
  • 사용자 공간과 kernel 드라이버 사이에서 공유되는 큰 물리적 메모리 공간(1-16+KB)을 관리하는 역할

logger

  • logcat 명령어를 위한 kernel 지원

wakelocks

  • 전원 관리 파일에 사용된다.
  • wake lock이 일어나기 전까지 머신을 깨워놓는다.

oom handling

  • 프로세스들을 죽여서 메모리가 낮아질 수 있도록 한다.

RAM_CONSOLE

  • kernel printk 메시지를 RAM 내 버퍼에 저장할 수 있도록 한다.
  • kernel panic 후 다음 커널이 실행될 때 볼 수 있다.

USB

  • ADB를 위한 gadget driver

yaffs2

  • flash filesystem

 

4. Init Process

  • 첫 번째 프로세스로, 모든 프로세스들의 루트 프로세스 (조상 프로세스)
  • 파일 시스템(/sys, /dev, /proc 등)을 마운트
  • init.rc 스크립트 파싱해서 실행한다.
    • 이 과정에서 Zygote와 System Process 가 실행된다.
  • init.rc 경로
    • <android source>/system/core/rootdir/
  • Zygote와 System Process를 실행한다.
  • Init process 경로
    • <android source>/system/core/init

 

5. Zygote

  • 안드로이드 애플리케이션은 자바로 작성되었는데, Linux 네이티브 프로세스로는 실행할 수 없어 Dalvik VM 위에서 실행된다.
  • 모든 자바 클래스들과 자원들을 미리 로드한다.
    • 사전에 로드한 자원 연결정보를 사용하기 때문에 애플리케이션을 빠르게 실행할 수 있다.
  • Zygote는 애플리케이션 실행에 필요한 VM 코드 및 메모리 정보를 공유해서 실행 시간을 단축한다.
  • 가상머신에서 애플리케이션 실행 위한 모든 준비를 마치고, 애플리케이션 실행 시에는 fork()를 통해 복제된 Zygote 프로세스 위 Dalvik VM 위에서 애플리케이션이 실행된다.
  • system boot를 시작하는 Virtual Machine 프로세스이다.
  • System Server를 실행한다.
  • COW(Copy on Write) 방식 사용 - 메모리 사용 최소화

 

6. System Servers

  • 핵심 Android 서비스를 실행한다.
  • 각 서비스에 대해 서비스를 초기화하고, Service Manager에 등록한다.

 

Reference


Android Boot Process

source.android.com/devices/automotive/power/boot_time

728x90
반응형

관련글 더보기