DTO 구현 과정에는 기기 트리, 빌딩, 파티션 나누기와 실행이 포함됩니다. 작동하는 구현을 완성한 후에는 2개의 DT 간에도 호환성을 유지해야 하며 각 DT 파티션의 보안을 확립하기 위한 전략도 파악해야 합니다.
DT 분할
먼저 기기 트리를 두 부분으로 나눕니다.
기본 DT. SoC 전용 부분 및 기본 구성으로, SoC 공급업체에 의해 제공됩니다.
오버레이 DT. 기기 전용 구성으로, ODM/OEM에 의해 제공됩니다.
기기 트리를 분할한 후에는 기본 DT와 오버레이 DT의 결합이 기기의 온전한 DT라는 결과로 이어지도록 기본 DT와 오버레이 DT 간의 호환성을 확인해야 합니다. DTO 형식 및 규칙에 관한 자세한 내용은 DTO 구문을 참조하세요. 여러 기기 트리에 관한 자세한 내용은 다중 DT를 참조하세요.
기본 및 오버레이 DT 빌드
기본 DT를 빌드하는 방법:
기본 DT .dts를 .dtb 파일로 컴파일합니다.
.dtb 파일을 부트로더 런타임으로 액세스 가능한 파티션에 플래시합니다(자세한 내용은 아래 참조).
오버레이 DT를 빌드하는 방법:
오버레이 DT .dts를 .dtbo 파일로 컴파일합니다. 이 파일 형식은 평면화된 기기 트리로 형식이 지정된 .dtb 파일과 동일하지만 파일 확장자가 다르다는 점에서 기본 DT와 구분됩니다.
.dtbo 파일을 부트로더 런타임으로 액세스 가능한 파티션에 플래시합니다(자세한 내용은 아래 참고).
DTC로 컴파일하고 호스트의 DTO 결과를 확인하는 자세한 방법은 컴파일 및 확인을 참고하세요.
DT 파티션 나누기
플래시 메모리에서 부트로더 런타임으로 액세스 가능한 신뢰할 수 있는 위치를 파악하여 .dtb 및 .dtbo를 배치합니다.
기본 DT의 위치 예시
부팅 파티션의 일부, 커널에 추가됨(image.gz).
전용 파티션(dtb)에 있는 별도의 DT blobs(.dtb).
오버레이 DT의 위치 예시
고유 파티션
그림 1..dtbo를 고유 파티션(예: dtbo 파티션)에 배치합니다.
ODM 파티션
그림 2..dtbo를 odm 파티션에 배치(부트로더가 odm 파티션의 파일 시스템에서 데이터를 로드할 수 있는 경우에만 실행).
참고: 오버레이 DT 파티션의 크기는 기기, 그리고 기본 DT blob 외에 필요한 변화량에 따라 다릅니다. 일반적으로는 8MB로도 충분하며, 필요한 경우에는 향후 확장을 위한 공간도 확보할 수 있습니다.
원활한 (A/B) 업데이트를 지원하는 기기의 경우 기본 DT 및 오버레이 DT 파티션을 A/B로 분할:
예 1
그림 3. DTBO 파티션 A/B, 예시 1.
예 2
그림 4. DTBO 파티션 A/B, 예시 2.
부트로더에서 실행
실행 방법:
그림 5. 부트로더 기기 트리 오버레이의 일반적인 런타임 구현
.dtb를 저장소에서 메모리로 로드합니다.
.dtbo를 저장소에서 메모리로 로드합니다.
.dtb를 병합된 DT로 만들 .dtbo로 오버레이합니다.
병합된 DT의 메모리 주소가 주어진 커널을 시작합니다.
호환성 유지
SoC 공급업체의 기본 DTB는 DTBO의 API 노출 영역으로 간주됩니다. 기기 트리를 SoC의 공통 부분과 기기 전용 부분으로 구분한 후에는 두 부분이 앞으로도 상호 호환성을 유지하도록 해야 합니다. 여기에는 다음과 같은 내용도 포함됩니다.
기본 DT의 DT 정의(예: 노드, 속성, 라벨). 기본 DT의 정의를 변경하면 오버레이 DT가 변경됩니다. 예를 들어 기본 DT의 노드 이름을 수정하려면 원래 노드 이름에 매핑되는 '별칭' 라벨을 정의하여 오버레이 DT 변경을 방지해야 합니다.
오버레이 DT 저장소 위치(예: 파티션 이름, 저장소 형식).
보안 확립
부트로더는 DTB/DTBO가 안전한지, 그리고 수정되거나 손상되지 않았는지 확인해야 합니다.
원하는 솔루션을 사용하여 DTB/DTBO에 보안을 적용할 수 있습니다. VBoot 1.0 또는 AVB HASH footer(VBoot 2.0)의 부팅 이미지 서명을 예로 들 수 있습니다.
DTB/DTBO가 고유 파티션에 있는 경우 이 파티션을 AVB의 신뢰 체인에 추가할 수 있습니다. 신뢰 체인은 하드웨어로 보호된 신뢰할 수 있는 루트에서 시작되어 DTB/DTBO 파티션의 무결성과 진위성을 확인하는 부트로더로 이어집니다.
DTB/DTBO가 기존 파티션(예: odm 파티션)에 있는 경우 이 파티션이 AVB의 신뢰 체인이 되어야 합니다. (DTBO 파티션은 odm 파티션과 공개 키를 공유할 수 있습니다).
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2024-05-07(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2024-05-07(UTC)"],[],[],null,["# Implement DTOs\n\nImplementing device tree overlays (DTOs) involves dividing the device tree (DT), building,\npartitioning, and running. After you have a working implementation, you must also maintain\ncompatibility between the two DTs and determine a strategy for ensuring the\nsecurity of each DT partition.\n\nDivide the DT\n-------------\n\nStart by dividing the DT into two parts:\n\n- **Main DT**. The SoC-only part and the default configurations, provided by SoC vendor.\n- **Overlay DT**. The device-specific configurations, provided by ODM/OEM.\n\nAfter dividing the DTs, you must ensure compatibility between main\nDT and overlay DT so that merging main DT and overlay DT results in a complete\nDT for the device. For details on DTO format and rules, see\n[DTO syntax](/docs/core/architecture/dto/syntax). For details on\nmultiple DTs, see\n[Use multiple DTs](/docs/core/architecture/dto/multiple).\n\nBuild main and overlay DTs\n--------------------------\n\nTo build the main DT:\n\n1. Compile the main DT `.dts` into a `.dtb` file.\n2. Flash the `.dtb` file into a bootloader runtime-accessible partition (detailed in \\[Partition DTs\\](#partition)).\n\nTo build the overlay DT:\n\n1. Compile the overlay DT `.dts` into a `.dtbo` file. While this file format is the same as the `.dtb` file formatted as a flattened DT, the different file extension distinguishes it from the main DT.\n2. Flash the `.dtbo` file into a bootloader runtime-accessible partition (detailed in \\[Partition DTs\\](#partition)).\n\nFor details on compiling with DTC and verifying DTO results on the host, see\n[Compile and verify](/docs/core/architecture/dto/compile).\n\nPartition DTs\n-------------\n\nDetermine a bootloader runtime-accessible and trusted location in flash\nmemory to put `.dtb` and `.dtbo`.\n\nExample locations for the main DT:\n\n- Part of boot partition, appended to the kernel (`image.gz`)\n- Separate DT blobs (`.dtb`) in dedicated partition (`dtb`)\n\nExample locations for the overlay DT: \n\n**Figure 1.** Put .dtbo into an odm partition (do this only if your bootloader has\nthe capability to load data from the filesystem of an odm partition). \n\n**Figure 2.** Put .dtbo into a unique partition, such as a dtbo partition.\n\n**Note:** The size of the\noverlay DT partition depends on the device and the amount of changes needed on\ntop of the main DT blob. Typically, 8 MB is more than enough and allows room to\ngrow in the future if required.\n\nFor devices that support\n[seamless (A/B) updates](/docs/core/ota/ab_updates), A/B the\nmain DT and overlay DT partitions: \n\n**Figure 3.** DTBO partition A/B, example 1. \n\n**Figure 4.** DTBO partition A/B, example 2.\n\nRun in bootloader\n-----------------\n\nTo run:\n\n**Figure 5.** Typical runtime implementation for DTO in bootloader.\n\n1. Load `.dtb` from storage into memory.\n2. Load `.dtbo` from storage into memory.\n3. Overlay `.dtb` with `.dtbo` to be a merged DT.\n4. Start kernel given the memory address of the merged DT.\n\nMaintain compatibility\n----------------------\n\nThe main DTB (from SoC vendor) is treated as an API surface for DTBOs. After\nseparating the DT into a SoC-common part and a device-specific part,\nyou must keep the two parts mutually compatible in the future, including:\n\n- **DT definition in main DT.** For example, nodes, properties, labels. Any definition change in main DT could trigger changes in overlay DT. For example, to correct a node name in main DT, define an \"alias\" label that maps to the original node name (to avoid the change of overlay DT).\n- **Overlay DT store location.** For example, partition name, store format.\n\nEnsure security\n---------------\n\nBootloader must ensure the DTB or DTBO is secure, unmodified, and uncorrupted.\nYou could use any solution to secure DTB or DTBO, for example,\n[Boot image\nsignature](/docs/security/features/verifiedboot/verified-boot#signature_format) in VBoot 1.0 or\n[AVB\nHASH footer](https://android.googlesource.com/platform/external/avb/+/android16-release/README.md#The-VBMeta-struct) (VBoot 2.0).\n\n- If DTB or DTBO is in a unique partition, you can add that partition to the trust chain of AVB. The trust chain starts from a hardware-protected root of trust and goes to the bootloader, which verifies the integrity and authenticity of DTB or DTBO partition.\n- If DTB or DTBO is in an existing partition (such as the `odm` partition), that partition should be in the trust chain of AVB. (DTBO partition could share a public key with `odm` partition).\n\nFor details, refer to [Verified\nBoot](/docs/security/features/verifiedboot)."]]