안드로이드 장치 부팅 프로세스

안드로이드 장치의 부팅 프로세스는 SoC(시스템 온 칩) 전원 인가 시 시작되어 홈 화면이 보이거나 삼성 장치의 경우 복구, 패스트부트, 또는 오딘 모드와 같은 특수 모드에서 종료된다. 안드로이드를 실행하는 장치의 부팅 프로세스는 SoC 제조업체의 펌웨어 설계에 영향을 받는다.

 배경 
2018년 기준으로 안드로이드 시장의 SoC 90%는 퀄컴, 삼성 또는 미디어텍 중 한 곳에서 공급한다. 다른 공급업체로는 UNISOC, 록칩, 마벨, 엔비디아가 있으며, 이전에는 텍사스 인스트루먼트가 있었다.

 역사 
부팅 보안 조치인 검증된 부팅은 안드로이드 킷캣과 함께 도입되었다.

 단계 

 주 부트로더 
부트 ROM에 저장된 주 부트로더(PBL)는 부팅 프로세스의 첫 번째 단계이다. 이 코드는 칩셋 제조업체가 작성한다.

PBL은 다음 단계의 진위를 확인한다.

삼성 스마트폰에서는 부트 ROM이 삼성 보안 부트 키(SSBK)를 사용하여 다음 단계들을 확인한다.

퀄컴의 SoC에서는 주 부트로더에서 퀄컴 긴급 다운로드 모드에 진입할 수 있다.

보조 부트로더 검증에 실패하면 EDL에 진입한다.

 보조 부트로더 
부트 ROM의 공간이 제한적이므로 eMMC 또는 eUFS에 보조 부트로더가 사용된다. 보조 부트로더는 트러스트존을 초기화한다.

예를 들어, 퀄컴 MSM8960에서는 보조 부트로더 1이 보조 부트로더 2를 로드한다. 보조 부트로더 2는 트러스트존과 보조 부트로더 3을 로드한다.

퀄컴은 이제 SBL을 UEFI 구현체인 XBL이라고 부른다.

퀄컴은 LK(Little Kernel) + Aboot 또는 XBL(eXtensible Bootloader) + ABL을 사용하고, 삼성 엑시노스는 S-Boot를 사용하며, 미디어텍은 Das U-Boot를 사용한다. 리틀 커널은 임베디드 시스템을 위한 마이크로커널로, 퀄컴이 부트로더로 사용하기 위해 수정했다. 안드로이드 부트로더(Aboot 또는 ABL)는 패스트부트 인터페이스를 구현한다. 이 인터페이스는 부트 및 복구 파티션의 진위를 확인한다. 특정 키 조합을 누르면 장치는 복구 모드로도 부팅할 수 있다. 그런 다음 안드로이드 부트로더는 제어권을 리눅스 커널로 넘긴다.

 커널 및 initramfs 

initramfs는 작은 루트 파일 시스템을 포함하는 gzip 압축된 cpio 아카이브이다. 여기에는 실행되는 init이 포함되어 있다. 안드로이드 커널은 리눅스 커널의 수정된 버전이다. Init은 파티션을 마운트한다. dm-verity는 fstab 파일에 지정된 파티션의 무결성을 확인한다. dm-verity는 안드로이드 버전 4.4부터 구글이 도입한 리눅스 커널 모듈이다. 기본 구현은 블록 기반 검증만 지원하지만, 삼성은 파일 지원을 추가했다.

 자이고트 

자이고트는 init 프로세스에 의해 생성되며, 안드로이드 애플리케이션 및 서비스 프로세스를 시작하는 역할을 한다. 이 프로세스는 매우 자주 사용될 것으로 예상되는 클래스를 힙에 로드하고 초기화한다. 예를 들어, 라이브러리의 덱스(dex) 데이터 구조가 있다. 자이고트가 시작되면 소켓에서 명령을 수신 대기한다. 새 애플리케이션이 시작될 때 자이고트에게 명령이 전송되며, 자이고트는 fork() 시스템 호출을 실행한다.

 파티션 레이아웃 
안드로이드 시스템은 여러 파티션으로 나뉘어 있다.

퀄컴 플랫폼은 GUID 파티션 테이블을 사용한다. 이 사양은 UEFI 사양의 일부이지만 UEFI 펌웨어에 의존하지 않는다.

 같이 보기 
 코어부트
 리눅스 부팅 프로세스
 macOS 부팅 프로세스
 윈도우 부팅 프로세스

 내용주 

 각주 

 외부 링크 
 Android.com - 부팅 흐름
 부팅 시간 관리
 퀄컴 부트로더
 퀄컴 신뢰 체인
 보안 부팅 및 이미지 인증
 스냅드래곤 410의 보안 부팅
 퀄컴 보안 부트 체인 분석
 msm8916-mainline/qhypstub
 안드로이드 시스템 init 프로세스 시작 및 init.rc 전체 분석
 안드로이드 Init 언어

분류:부트 로더
분류:안드로이드 (운영체제)