기기 트리 오버레이(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를 위한 지원 추가에 관한 자세한 내용은 기기 트리 오버레이를 참고하세요.