Android/Framework

Android 디바이스 포팅

임베디드 친구 2025. 4. 20. 20:00
728x90
반응형

Android 디바이스 포팅

Android를 새로운 디바이스에 포팅하는 과정은 상당히 복잡한 작업이며, 하드웨어 및 소프트웨어 스택에 대한 깊은 이해가 필요합니다. 본 글에서는 Android 디바이스 포팅 과정에서 중요한 단계인 BoardConfig 설정, Device Tree 구성, 커널 설정 등에 대해 설명하겠습니다. AOSP(Android Open Source Project) 코드와 함께 구체적인 설정 방법을 다루겠습니다.


1. Android 디바이스 포팅 개요

Android 디바이스 포팅은 일반적으로 다음과 같은 단계로 이루어집니다.

  1. AOSP 소스 코드 다운로드 및 빌드 환경 설정
  2. 하드웨어 지원을 위한 BoardConfig 설정
  3. Device Tree 및 커널 구성
  4. 부트로더 및 부팅 이미지 설정
  5. HAL 및 드라이버 포팅
  6. System 및 Vendor 파티션 구성
  7. 테스트 및 디버깅

이 글에서는 2~3단계에 해당하는 BoardConfig 설정 및 Device Tree/커널 설정을 중점적으로 다루겠습니다.


2. 새로운 하드웨어 지원을 위한 BoardConfig 설정

2.1 BoardConfig.mk 개요

Android 디바이스를 빌드할 때 필요한 설정 정보는 BoardConfig.mk 파일에 정의됩니다. 이 파일은 해당 디바이스의 하드웨어 사양과 빌드 환경을 AOSP에 알려주는 역할을 합니다.

BoardConfig.mk 파일은 다음과 같은 위치에 존재합니다.

/device/{vendor}/{device}/BoardConfig.mk

예를 들어, qcom 칩셋을 사용하는 example_device 디바이스라면 다음과 같은 경로를 가집니다.

/device/qcom/example_device/BoardConfig.mk

2.2 주요 설정 항목

BoardConfig.mk 파일에는 다양한 설정이 포함됩니다. 중요한 항목들을 살펴보겠습니다.

2.2.1 SoC 및 아키텍처 설정

TARGET_BOARD_PLATFORM := msm8953
TARGET_ARCH := arm64
TARGET_CPU_VARIANT := cortex-a53

이 설정은 디바이스가 MSM8953 칩셋을 사용하며, ARM64 아키텍처를 기반으로 Cortex-A53 코어를 사용함을 나타냅니다.

2.2.2 부트로더 및 파티션 설정

TARGET_NO_BOOTLOADER := true
BOARD_BOOTIMAGE_PARTITION_SIZE := 33554432
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 33554432

부트로더 없이 직접 부팅이 가능하도록 설정하고, 부팅 이미지 및 리커버리 이미지의 크기를 지정합니다.

2.2.3 커널 이미지 경로

BOARD_KERNEL_IMAGE_NAME := Image.gz-dtb
BOARD_KERNEL_CMDLINE := console=ttyMSM0,115200n8 androidboot.hardware=qcom
BOARD_KERNEL_BASE := 0x80000000
BOARD_KERNEL_PAGESIZE := 2048

이 설정은 커널 이미지의 이름, 부팅 시 전달할 커널 파라미터, 메모리 주소(base), 페이지 크기를 정의합니다.

2.2.4 GPU 및 디스플레이 설정

TARGET_USES_ION := true
TARGET_USES_HWC2 := true

이 설정은 ION 메모리 할당자를 사용하며, Hardware Composer 2 (HWC2)를 지원하도록 지정합니다.


3. Device Tree 및 커널 설정

3.1 Device Tree 개요

Device Tree는 하드웨어 정보를 커널에 제공하는 방식으로, ARM 기반 Android 디바이스에서는 필수적으로 사용됩니다. Device Tree 파일들은 arch/arm64/boot/dts/ 경로에 위치하며, 각 하드웨어 구성 요소를 기술합니다.

3.2 Device Tree 작성 예제

다음은 간단한 Device Tree 예제입니다.

/dts-v1/;

/ {
    model = "Example Device";
    compatible = "qcom,example_device";

    memory {
        device_type = "memory";
        reg = <0x80000000 0x40000000>; /* 1GB RAM */
    };

    cpus {
        #address-cells = <1>;
        #size-cells = <0>;

        cpu@0 {
            device_type = "cpu";
            compatible = "arm,cortex-a53";
            reg = <0>;
        };
    };
};

이 예제에서는 기본적인 하드웨어 정보(모델명, 호환성), RAM 크기, CPU 정보를 정의하였습니다.


4. System 및 Vendor 파티션 구성

System 및 Vendor 파티션은 Android 시스템 이미지와 벤더별 구성 요소를 저장하는 중요한 영역입니다.

4.1 System 파티션 설정

System 파티션은 기본 Android 시스템 파일을 포함합니다. BoardConfig.mk에서 다음과 같이 설정할 수 있습니다.

BOARD_SYSTEMIMAGE_PARTITION_SIZE := 2147483648  # 2GB
BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE := ext4

4.2 Vendor 파티션 설정

Vendor 파티션에는 SoC 및 하드웨어 관련 바이너리 파일이 포함됩니다.

BOARD_VENDORIMAGE_PARTITION_SIZE := 1073741824  # 1GB
BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := ext4
BOARD_USES_VENDORIMAGE := true

Vendor 파티션을 사용하려면 PRODUCT_USE_VENDOR 설정도 필요합니다.

PRODUCT_USE_VENDOR := true

System과 Vendor 파티션이 올바르게 구성되었는지 확인하기 위해 빌드 후 out/target/product/{device}/ 디렉터리에서 system.imgvendor.img 파일을 검토하면 됩니다.


5. 마무리 및 다음 단계

본 글에서는 Android 디바이스 포팅 과정에서 중요한 BoardConfig 설정과 Device Tree 및 커널 설정, 그리고 System 및 Vendor 파티션 구성에 대해 다루었습니다. 이후 단계에서는 부트로더 설정, HAL 및 드라이버 포팅, 시스템 이미지 구성 등의 작업이 필요합니다.

디바이스 포팅 과정은 하드웨어와 소프트웨어의 긴밀한 조합이 요구되므로, 지속적인 디버깅과 테스트가 필수적입니다.

728x90
반응형

'Android > Framework' 카테고리의 다른 글

커널 로그 분석 및 디버깅  (0) 2025.04.22
Android 디버깅 기법  (0) 2025.04.21
AOSP 소스 코드 수정 및 커스텀 기능 추가  (0) 2025.04.19
AOSP 빌드 및 환경 설정  (0) 2025.04.17
System API 접근 및 확장  (0) 2025.04.16