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

너와나의 관심사

APEX , linker config 생성단계 본문

카테고리 없음

APEX , linker config 생성단계

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

5. APEX activation 단계

Android 10 이후 ART, Runtime, i18n, tzdata 같은 핵심 시스템 컴포넌트는 APEX 형태로 분리되어 있다. APEX는 package manager가 뜨기 전에 필요한 하위 시스템 모듈을 부팅 초기에 mount하기 위한 구조다. Android 공식 문서도 APEX가 ART, native service/library, HAL, class library 같은 lower-level system module 업데이트를 위해 사용된다고 설명한다.

이 단계에서는 apexd가 다음을 수행한다.

APEX scan
APEX verification
loop device 할당
APEX image mount
/apex/com.android.* 경로 구성
apex-info-list 생성
apexd.status 활성화
 

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

apexd: scanning /system/apex
candidates=27 added=27
scanning /system_ext/apex
candidates=2 added=2
apexd.status activated
 

즉 APEX scan과 mount가 상당히 진행되었고, 이후 apexd.status가 activated/ready 상태로 넘어간다.


6. linkerconfig 생성 단계

APEX가 mount되면 native linker가 사용할 namespace configuration이 생성된다.

이 단계는 매우 중요하다. Android의 native library는 모든 경로를 자유롭게 볼 수 없고, linker namespace에 의해 격리된다. 따라서 /system/lib64에 있는 라이브러리가 /apex/com.android.i18n/lib64나 /apex/com.android.art/lib64의 라이브러리를 보려면 linkerconfig에 namespace link가 있어야 한다.

현재 로그에서는 두 번의 linkerconfig 생성 흐름이 보인다.

GenerateLinkerConfiguration begin ns=bootstrap
GenerateLinkerConfiguration generated ns=bootstrap ld_config=1 apex_libraries=1

GenerateLinkerConfiguration begin ns=default
GenerateLinkerConfiguration generated ns=default ld_config=1 apex_libraries=1
GenerateLinkerConfiguration default namespace marked ready
 

즉 bootstrap namespace와 default namespace 양쪽 linker configuration이 생성되었다.

이 단계가 실패하면 다음과 같은 오류가 발생한다.

CANNOT LINK EXECUTABLE
libxxx.so not found
needed by /system/lib64/yyy.so in namespace default
 

예를 들어 이전에 발생한 libicu.so not found는 실제 파일 부재라기보다 default namespace에서 com.android.i18n APEX 라이브러리를 볼 수 없는 namespace visibility 문제였다.

Comments