BOBO's Note

Android Boot Sequence 본문

Embedded System

Android Boot Sequence

bobo_hee 2020. 5. 26. 01:45

Android Boot Sequence

안드로이드는 리눅스 기반의 운영체제이기 때문에 리눅스 부팅 과정과 흡사하다. 그리고 대부분의 안드로이드 기반 시스템은 ARM 프로세서를 사용한다. 따라서 일반적인 boot sequence에 대해 헷갈린다면, 먼저 이 글을 읽고 오자!

2020/05/25 - [Embedded System] - Generic Boot Sequence

 

Generic Boot Sequence

BOBO's Note Generic Boot Sequence 본문 Embedded System Generic Boot Sequence bobo_hee 2020. 5. 25. 23:32 Prev 1 2 3 4 5 6 ··· 8 Next

bobo-dev.tistory.com

2020/05/26 - [Embedded System] - 임베디드 시스템의 Boot Sequence

 

임베디드 시스템의 Boot Sequence

BOBO's Note 임베디드 시스템의 Boot Sequence 본문 Embedded System 임베디드 시스템의 Boot Sequence bobo_hee 2020. 5. 26. 00:51 Prev 1 2 3 4 5 ··· 8 Next

bobo-dev.tistory.com


전체적인 안드로이드 boot sequence는 다음과 같다.

 

Android Boot Sequence

  1. Boot ROM: CPU ASIC에 내장된 코드로, 전원 공급이 안정화되면 실행된다. ASIC의 레지스터 값을 읽어 bootloader를 갖고 있는 boot media를 찾는다. 그 후, stage 1 부트로더를 내부 RAM에 적재하고 해당 위치로 jump한다.

  2. bootloader: 두 단계로 실행되며 메모리 초기화와 커널을 RAM에 적재하는 것이 주기능이다.

    1. stage 1 bootloader: 외부 RAM을 찾고 설정하여 외부 RAM에 stage 2 부트로더를 로드한다.

    2. stage 2 bootloader: 네트워크, 추가적인 메모리 등을 설정한다. 그 후, 커널 이미지와 커널 부팅을 위한 매개변수들을 RAM에 로드하고 커널 코드로 jump한다.

  3. kernel: 하드웨어, 드라이버, 파일 시스템을 초기화한다. 메모리, I/O, 인터럽트, 프로세스 테이블, 스케쥴링 등을 설정하고 드라이버를 로드한다. 그리고 루트 파일시스템을 마운트한 후, init 프로세스를 실행한다.

  4. init: 하위 디렉토리(/sys, /dev, /proc 등)을 마운트하고 init.rc 스크립트를 실행한다.

    • init 프로세스는 안드로이드 소스의 system/core/에 위치한다.

    • init.rc 스크립트는 안드로이드 소스의 system/core/rootdir/에 위치한다.

  5. Zygote: Dalvik 가상 머신들 간에 코드를 공유하게 해주는 가상 머신 프로세스이다. 

    • 자바 애플리케이션이 JVM에서 실행되듯이, 안드로이드 애플리케이션도 독립적인 Dalvik VM이 필요하다. 애플리케이션을 실행시킬 때마다 매번 VM을 초기화하고 클래스를 로드하면 실행 시간이 오래 걸리고 메모리 사용량이 크다. 따라서 Zygote를 이용해 공통으로 사용하는 코어 라이브러리, 클래스, 자원을 미리 로드해놓고 이에 대한 연결 정보를 구성해둔다.

    • 새로운 애플리케이션 실행을 위해 fork()를 하면 이 연결 정보를 그대로 사용하는 Dalvik VM에 로드된다. 

    • init 프로세스에서 Zygote용 Dalvik VM을 실행한 후, 해당 가상 머신에서 Zygote를 실행시킨다. 이후의 애플리케이션들은 Zygote에서 생성한 Dalvik VM에서 실행된다.

  6. System Server: 다양한 매니저를 실행시킨다. Runtime이 Zygote에게 system server를 실행시키도록 요청하면, Zygote는 새로운 Dalvik VM을 만들어 system server를 실행한다.

위의 과정을 모두 수행하면 안드로이드 boot sequence가 끝난다. 이후, 홈 애플리케이션이 실행된다.

 

참고할 만한 링크: http://kpbird.blogspot.com/2012/11/in-depth-android-boot-sequence-process.html

'Embedded System' 카테고리의 다른 글

Interrupt Handler  (0) 2020.06.03
Kernel Module과 Device Driver  (0) 2020.05.29
임베디드 시스템의 Boot Sequence  (0) 2020.05.26
Generic Boot Sequence  (0) 2020.05.25
Cross Compile  (0) 2020.05.25
Comments