06-29 06:14
Recent Posts
Recent Comments
관리 메뉴

너와나의 관심사

classpath / odsign 준비 + zygote start , system_server fork 본문

카테고리 없음

classpath / odsign 준비 + zygote start , system_server fork

벤치마킹 2026. 5. 9. 01:25

7. classpath / odsign 준비 단계

zygote를 시작하기 전에 Android는 bootclasspath와 systemserverclasspath를 준비한다.

현재 로그에서는 다음이 확인된다.

exec_start derive_sdk
exec_start derive_classpath
load_exports classpath
start odsign
odsign.key.done=1
odsign.verification.done=1
 

TC FVP bring-up에서는 odsign 검증을 skip하고 성공 property를 설정하는 흐름이 보인다.

이 단계의 역할은 다음과 같다.

항목설명
derive_sdk SDK 관련 runtime property 산출
derive_classpath BOOTCLASSPATH, SYSTEMSERVERCLASSPATH 구성
odsign ART boot image / odex signature 검증
classpath export zygote/system_server가 사용할 classpath 환경변수 제공

여기서 classpath가 잘못되면 zygote는 시작되더라도 system_server가 services.jar, framework.jar 등을 로딩하다 실패할 수 있다.


8. zygote start 단계

zygote는 Android에서 system_server와 앱 프로세스의 부모 역할을 한다. Android 공식 문서도 zygote가 동일 ABI를 사용하는 system/app process의 root 역할을 하며, init daemon이 Android OS 초기화 중 zygote를 spawn한다고 설명한다.

현재 로그에서는 다음 흐름이 확인된다.

zygote-start entered
before start zygote
zygote path=/system/bin/app_process64
forked zygote pid=313
execv zygote path=/system/bin/app_process64
app_process main entered
parsed zygote=1 startSystemServer=1
before runtime.start ZygoteInit
 

즉 init이 app_process64를 실행했고, app_process64는 zygote 모드로 진입했으며, ZygoteInit Java entry를 실행하려는 상태까지 도달했다.

zygote 단계의 주요 작업은 다음이다.

단계설명
app_process64 실행 native entry point
AndroidRuntime 생성 Java VM 실행 준비
JNI_CreateJavaVM ART runtime 생성
ZygoteInit.main() 진입 Java zygote 초기화
preload class/resource/library preload
zygote socket 생성 app/system_server fork 요청 수신
system_server fork Android system service 프로세스 생성

현재 로그에서는 JNI_CreateJavaVM, Runtime::Create, InitializeNativeLoader까지 성공한 것으로 보인다.


9. system_server fork 단계

zygote는 Android 부팅 중 가장 중요한 프로세스인 system_server를 fork한다.

system_server는 다음 서비스를 담는 핵심 프로세스다.

ActivityManagerService
PackageManagerService
PowerManagerService
WindowManagerService
DisplayManagerService
InputManagerService
BatteryService
ConnectivityService
SensorService
 

이 프로세스가 정상적으로 떠야 Android framework가 본격적으로 동작한다.

일반 흐름은 다음과 같다.

ZygoteInit.main()
  ↓
forkSystemServer()
  ↓
zygote nativeForkSystemServer()
  ↓
child process specialization
  ↓
handleSystemServerProcess()
  ↓
SYSTEMSERVERCLASSPATH 로딩
  ↓
SystemServer.main()
 

현재 로그 기준으로는 system_server fork 이후 services.jar 로딩 단계까지 도달한 것으로 해석된다. 특히 services.jar에 대해 OpenDexFilesFromOat, services.odex, OpenImageSpace까지 진행된 로그가 있다.

Comments