기기 트리 오버레이

기기 트리(DT)는 검색할 수 없는 하드웨어를 설명하는 이름이 지정된 노드와 속성의 데이터 구조입니다. Android에서 사용되는 Linux 커널과 같은 운영체제는 DT를 사용하여 Android 기반 기기에 사용되는 광범위한 하드웨어 구성을 지원합니다. 하드웨어 공급업체는 자체 DT 소스 파일을 공급하며, Linux는 부트로더에 의해 사용되는 기기 트리 Blob(DTB) 파일로 이를 컴파일합니다.

기기 트리 오버레이(DTO)는 중앙 기기 트리 Blob(DTB)을 기기 트리에 오버레이할 수 있도록 지원합니다. DTO를 사용하는 부트로더는 단일 칩 시스템(SoC) DT를 유지하고 기기별 DT를 동적으로 오버레이하여 노드를 트리에 추가하고 기존 트리의 속성을 변경할 수 있습니다.

이 페이지에서는 DT를 로드하기 위한 일반적인 부트로더 워크플로에 관해 자세히 설명하고 일반적인 DT 용어 목록을 제공합니다. 이 섹션의 다른 페이지에서는 DTO에 관한 부트로더 지원을 구현하는 방법, DTO 구현을 최적화하고 확인하고 컴파일하는 방법과 다중 DT를 사용하는 방법을 설명합니다. 또한 DTO 구문 및 필수 DTO/DTBO 파티션 형식 지정에 관한 자세한 내용도 확인할 수 있습니다.

Android 9 출시에 포함된 업데이트

Android 9에서는 통합 기기 트리 blob을 커널에 전달하기 전에 부트로더가 기기 트리 오버레이에 정의된 속성을 수정하면 안 됩니다.

기기 트리 로드

부트로더에 기기 트리를 로드하는 과정에는 빌드, 파티션 분할 및 실행이 포함됩니다.

그림 1. 부트로더에 기기 트리를 로드하기 위한 일반적인 구현
  1. 빌드하는 방법은 다음과 같습니다.
    • 기기 트리 컴파일러(dtc)를 사용하여 기기 트리 소스(.dts)를 평면화된 기기 트리로 형식이 지정된 기기 트리 blob(.dtb)에 컴파일합니다.
    • .dtb 파일을 부트로더 런타임으로 액세스 가능한 위치에 플래시합니다(자세한 내용은 아래 참조).
  2. 파티션을 분할하려면 플래시 메모리에서 부트로더 런타임으로 액세스 가능한 신뢰할 수 있는 위치를 파악하여 .dtb를 배치합니다. 위치의 예는 다음과 같습니다.
    부팅 파티션
    그림 2. .dtbimage.gz에 추가하고 'kernel'로 mkbootimg에 전달하여 부팅 파티션에 배치합니다.
    고유 파티션
    그림 3. .dtb를 고유 파티션(예: dtb 파티션)에 배치합니다.
  3. 실행하는 방법은 다음과 같습니다.
    • .dtb를 저장소에서 메모리로 로드합니다.
    • 로드된 DT의 메모리 주소가 주어진 커널을 시작합니다.

용어

이 섹션에서는 다음과 같은 기기 트리 용어를 사용합니다.

DT 기기 트리
DTB 기기 트리 Blob
DTBO 오버레이용 기기 트리 Blob
DTC 기기 트리 컴파일러
DTO 기기 트리 오버레이
DTS 기기 트리 소스
FDT 평면화된 기기 트리(.dtb blob 파일에 포함된 바이너리 형식)