장치 트리 오버레이

장치 트리(DT) 는 검색할 수 없는 하드웨어를 설명하는 명명된 노드 및 속성의 데이터 구조입니다. Android에서 사용되는 Linux 커널과 같은 커널은 DT를 사용하여 Android 기반 기기에서 사용되는 광범위한 하드웨어 구성을 지원합니다. 하드웨어 공급업체는 Device Tree Compiler 를 사용하여 DTB(Device Tree Blob) 파일로 컴파일되는 자체 DTS(Device Tree Source ) 파일을 제공합니다. 이 파일은 부트로더에서 사용됩니다. DTB 파일에는 이진 형식의 평면화된 장치 트리 가 포함되어 있습니다.

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

DTBO 오버레이용 장치 트리 Blob

Android 9 릴리스의 업데이트

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

장치 트리 로드

부트로더에서 장치 트리를 로드하려면 빌드, 분할 및 실행이 포함됩니다.

그림 1. 부트로더에서 장치 트리를 로드하기 위한 일반적인 구현.
  1. 장치 트리 Blob을 만들고 플래시하려면:

    1a. 장치 트리 컴파일러( dtc >)를 사용하여 장치 트리 소스( .dts )를 장치 트리 Blob( .dtb )으로 컴파일합니다. 장치 트리 Blob은 평면화된 장치 트리로 형식이 지정됩니다. 1b. .dtb 파일을 부트로더 런타임에서 액세스할 수 있는 위치로 플래시합니다(자세한 내용은 아래 참조).

  2. 파티션을 나누려면 플래시 메모리에서 부트로더 런타임에 액세스할 수 있고 신뢰할 수 있는 위치를 결정하여 .dtb 를 넣습니다. 예시 위치:

    부트 파티션
    그림 2. .dtb 에 추가하고 mkbootimg에 " kernel "로 전달하여 부팅 파티션에 image.gzmkbootimg .
    고유 파티션
    그림 3. .dtb 를 고유한 파티션(예: dtb 파티션)에 넣습니다.

  3. 장치 트리 blob을 로드하고 커널을 시작하려면 다음을 수행하십시오.

    3a. 저장소에서 메모리로 .dtb 를 로드합니다. 3b. 로드된 DT의 메모리 주소를 사용하여 커널을 시작합니다.

무엇 향후 계획?

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