| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 양양솔비치세프스키친
- 편도수술
- 영통칠프로칠백식당
- 영통외식
- SK하이닉스 #SK하이닉스채용 #반도체취업 #AI취업 #시스템아키텍처 #소프트웨어솔루션 #HBM #CXL #LLM #GPU #서버아키텍처 #대학원진학 #이직준비 #취업준비
- 커피
- 양양솔비치 뷔페
- 양양솔비치아침
- 아이혼자다녀옴
- 홍시스무디
- 파이썬
- 영통역소고기
- DFS
- 싱가폴중학교수학문제
- 결항
- 결항전문
- 푸르지오포레피스
- 주차넉넉
- 사진문자추출하기
- 양양솔비치조식
- 당근마켓중고차
- 종이캐리어
- 사진문자추출
- 에어아시아
- 가족소고기외식
- 사진에서 글자추출
- python#
- 고마워다음
- 커피쏟음
- 중학교입학수학문제
- Today
- Total
너와나의 관심사
classpath / odsign 준비 + zygote start , system_server fork 본문
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까지 진행된 로그가 있다.