DTO 지원

기기 트리 오버레이(DTO)는 원본 데이터를 수정하는 추가 오버레이 평면화된 기기 트리(FDT)를 로드하여 런타임 시 사용자 공간에서 커널의 초기 기기 트리 데이터를 수정하도록 해 기존의 평면화된 기기 트리(FDT) 구현을 확장합니다. Android는 사용자 공간에서 DT Blob의 런타임 업데이트가 필요 없지만 대신 공급업체가 libfdt 또는 libufdt를 사용하여 부트로더에서 기기 트리 패치를 추가하는 것이 좋습니다.

Android DTO 지원

DTO에 관한 Android 지원은 Android 출시에 따라 다릅니다.

  • Android 7.x 이전에는 기기 트리 지원이 필요하지 않으며, 공급업체가 DT Blob을 커널 또는 저장소에 전달하는 방법에 관한 권장사항을 제공하지 않습니다.
  • Android 8.x에서는 커널의 보드 관련 및 SoC 전용 부분을 별도로 유지하기 위해 기기 트리 지원을 권장합니다.
  • Android 9 이상에서는 DTBO(기기 트리 Blob 오버레이) 파티션이 필요하고 적어도 하나의 DTO가 적용되어야 합니다.

DTO 파티션 나누기 요구사항

대부분의 Android 기기는 빌드 시 DT blob을 커널에 추가하고 부트로더는 커널에서 blob을 로드합니다. 그러나 DT blob은 SoC(단일 칩 시스템) 커널의 일부로 간주되기 때문에 Android에는 DT blob을 빌드하거나 저장하는 방법에 관한 특정 요구사항이 없습니다. 기기는 DT blob을 커널에 추가하거나 blob을 별도의 파티션에 저장할 수 있는데, 유일한 요구사항으로, 부트로더가 DT blob을 로드할 방법과 위치를 알고 있어야 합니다.

DTO를 지원하려면 기기에 다음이 있어야 합니다.

  • 보드 관련 DT 오버레이의 커널 이미지당 하나의 DTBO 파티션. 부트로더는 SoC 관련 DTB를 로드할 위치와 방법을 알아야 합니다. 파티션 크기는 SoC 커널을 만드는 데 필요한 변경 횟수에 따라 달라집니다. 향후 업데이트를 위해 용량을 늘릴 수 있도록 일반적으로 8MB의 파티션 크기면 충분합니다.
  • A/B 기기에 관해 업데이트된 DTO 파티션. 복구 커널은 Android 커널과 동일하지만, OTA(무선 업데이트)를 통해 업데이트할 수 있도록 파티션을 A/B 기기에 관해 설정해야 합니다. 파티션 크기는 기본 SoC 커널 DT blob 외에도 기기 및 변경 횟수에 따라 달라집니다.

DTO 부트로더 요구사항

DTO를 지원하려면 부트로더가 다음을 수행해야 합니다.

  • (A/B 기기의 부팅 슬롯을 고려하여) SoC 관련 DT blob을 공급업체별 방식으로 로드하는 방법과 로드할 위치를 파악합니다. 일반적으로 blob이 커널에 추가될 때 커널 이미지의 끝에서 추출됩니다.
  • 공급업체별 방식으로 오버레이 DT blob을 로드하는 방법과 위치를 파악합니다.
  • 결합된 기기 트리를 커널로 전달하기 전에 기본 DT blob을 오버레이로 패치합니다.

부트로더에서 DTO를 위한 지원 추가에 관한 자세한 내용은 기기 트리 오버레이를 참고하세요.