App에서 Manifest 권한, 버전, app name 등을 관리한다.

그리고 안드로이드에서 다양한 HAL서비스 관리하기위해서 manifest 사용한다. 공급업체에서 프레임워크에 제공하고 프레임워크에서 기기에 제공하는 정보를 manifest 통해 설명한다.

 

1. Manifest

VINTF(Vendor Interface) manifest파일들을 읽어와서 설정을 진행합니다.

기기설정을 위한 각종 HAL, SELinux 기본적인 H/W 설정부터 framework 설정까지를 담당합니다. 물론 manifest안에 HAL 모든내용이 정의 것은아니고 기본적으로 VINTF manifest 읽어와서 HAL 정보를 간단히 판단하고 빌드에 포함할 있으며 manifest.xml 시작으로 HAL파일들을 읽어와 직접적으로 HAL 사용할 있습니다.

 

이러한 manifest파일은 device manifest, farmework manifest 종류가 있습니다.

 

1) device manifest

기본적으로 기기 매니페스트에서는 vendor manifest, odm manifest 나누어 집니다.

 

  • vendor manifest

vendor manifest 경우 공급업체 vendor 파티션 HAL, SELinux 정의합니다. vendor manifest 기본적으로 /vendor/etc/vintf/manifest.xml 정의됩니다.

<hal format="hidl">
        <name>vendor.samsung_slsi.hardware.configstore</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>IExynosHWCConfigs</name>
            <instance>default</instance>
        </interface>
        <fqname>@1.0::IExynosHWCConfigs/default</fqname>
    </hal>
    <hal format="hidl">
        <name>vendor.trustonic.tee</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>ITee</name>
            <instance>default</instance>
        </interface>
        <fqname>@1.0::ITee/default</fqname>
    </hal>
    <hal format="hidl">
        <name>vendor.trustonic.teeregistry</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>ITeeRegistry</name>
            <instance>default</instance>
        </interface>
        <fqname>@1.0::ITeeRegistry/default</fqname>
    </hal>
    <sepolicy>
        <version>28.0</version>
    </sepolicy>

위는 vendor manifest 일부이며 selinux정책에 대한 정의부터 각종 HAL 대한 정의가 되어있습니다. 기본적으로 각각의 서비스는 어떤 서비스인지 알려주는 format, application 이름, application사용을 위한 방법을 제시하는 transport, version(HAL인경우 HAL 버전), interface(HAL인경우 HAL 인터페이스) 있습니다.

 

VINTF manifest.xml 읽어와 HAL 대한 기본적인 정보를 모을 있고 이렇게 모은 정보를 바탕으로 빌드를 진행할 interaface 찾아 결과적으로 HAL Server, Client 소스 코드들을 찾아 빌드하고 HAL기능을 동작시킬 있도록 합니다.

 

  • ODM Manifest

android에서는 SoC 여러 H/W 변경 업그레이드 되더라도 동일한 binary one binary 정책을 지원할 있게 ODM 파티션을 제공한다.

Android 10 이상에서는 /odm 파티션 설정 변경을통한 여러 SKU one binary 지원할 있도록 지원하며 동적 파티션 기능을 제공하여 파티션의 크기를 동적으로 변경할 있도록 한다.

 

기본적으로 안드로이드 단말에는 여러 H/W(지역향별)가들어가고 H/W위에 여러 S/W(통신사별 ) 올라가게 된다. H/W n S/W m개의 다향성을 가진다면 생성되는 바이너리는 m*n개의 바이너리가 생성되는 비효율적인 요소가 존재한다.

구글에서는 이러한 문제를 막기위해 android os 9.0 이상부터 /product, android os 10.0이상부터 /odm 파티션을 각각지원한다.

 

/product파티션의 경우 위 S/W sku에 따른 바이너리 분할을 막기위한 파티션으로 해당 파티션에서 sku별 동작을 분기하고 하나의 바이너리로 모든 s/w 다향성을 처리할 수 있도록 지원한다.

/odm 파티션의 경우 H/W sku에 따른 바이너리 분할을 막기위한 파티션으로 해당 파티션에서 sku별 동작을 분기하고 하나의 바이너리로 모든 h/w 다향성을 처리할 수 있도록 지원한다.

 

ODM Manifest 이러한 /odm 파티션에 대한 HAL 등의 설정을 위한 manifest라고 있다.

 

VINTF vendor manifest, odm manifest 읽어와 결합하는 역할을 진행하며 순서는 vendor -> odm 된다. 여기서 odm manifest overwrite=true 설정하면 vendor manifest 읽고 odm manifest 읽을 동일한 application 대해서 overwrite 된다.

여러 제품의 공통적인 hal vendor manifest에서 정의하되 특별 제품에에 대한 hal code odm manifest 정의하여 처리할 있다.

 

여기에 OTA manifest 존재하는데 이는 우리가 흔히 갤럭시 스마트폰을 사용하다보면 안드로이드 OS version up등의 여러 업그레이드를 마주하게되는데 hal version 올라가거나할 바로 OTA manifest 정의해서 OTA service 통해서 단말 HAL 정보 업데이트를 진행한다.

 

2) Framework manifest

Frmaework manifest system manifest, product manifest, system_ext manifest 구성된다.

여기서 system, product 각각의 /system, /product 파티션에 따른 HAL 설정을 정의하는 역할을 진행한다. 그리고 system_ext_manifest 경우 system_ext 파티션은 물론 system sdk버전과 vndk버전을 설정한다.

 

3) BoradConfig.mk

위에서 언급한 내용과 같이 Android manifest.xml 읽어와 설정값들을 정리하고 그에맞느 HAL service, SELinux 제공한다.

여기서 하나하나의 기능을 모두 담아 manifest.xml 직접 정의하는 것은 많은 어려움이 있을 있어 구글은 개발상 편의를 위해 다양한 방법과 도구를지원한다. 기본적으로 manifest.xml 자동으로 만들어주는 도구들을 지원하며 추가로 BoardConfig.mk파일을 지원한다

 

Android 빌드 soong-build 통해 mk파일들을 읽어 빌드를 진행한다. BoardConfig.mk파일은 H/W board 대한 설정을 담은 파일로 Andorid 빌드 .mk파일로써 포함되어 빌드된다. 개발자는 해당 .mk파일을 통해 manifest.xml 정의할 있다.

 

기본적으로 HAL 인터페이스, 소스 코드를 정의하고 만들어진 .xml파일에 대해서

BoardConfig.mk파일 안에 아래와 같의 정의한다.

 

DEVICE_FRAMEWORK_MANIFEST_FILE := \
    device/manufacturer/device_name/device_system_manifest.xml

위와 같이 특정 Feature 정의된 xml파일을 더해주게되면 Android 빌드 진행 해당 Feature 읽어 자동으로 manifest.xml 생성해준다.

(vendor, odm, product 여러 manifest파일 모두가 위처럼 자동으로 manifest.xml파일을 만들 있도록 위 기능 지원한다)

 

 

 

  • ref

https://source.android.com/devices/architecture/vintf?hl=ko

+ Recent posts