DTO 구현

DTO 구현 과정에는 기기 트리, 빌딩, 파티션 나누기와 실행이 포함됩니다. 작동하는 구현을 완성한 후에는 2개의 DT 간에도 호환성을 유지해야 하며 각 DT 파티션의 보안을 확립하기 위한 전략도 파악해야 합니다.

DT 분할

먼저 기기 트리를 두 부분으로 나눕니다.

  • 기본 DT. SoC 전용 부분 및 기본 구성으로, SoC 공급업체에 의해 제공됩니다.
  • 오버레이 DT. 기기 전용 구성으로, ODM/OEM에 의해 제공됩니다.

기기 트리를 분할한 후에는 기본 DT와 오버레이 DT의 결합이 기기의 온전한 DT라는 결과로 이어지도록 기본 DT와 오버레이 DT 간의 호환성을 확인해야 합니다. DTO 형식 및 규칙에 관한 자세한 내용은 DTO 구문을 참조하세요. 여러 기기 트리에 관한 자세한 내용은 다중 DT를 참조하세요.

기본 및 오버레이 DT 빌드

기본 DT를 빌드하는 방법:

  1. 기본 DT .dts.dtb 파일로 컴파일합니다.
  2. .dtb 파일을 부트로더 런타임으로 액세스 가능한 파티션에 플래시합니다(자세한 내용은 아래 참조).

오버레이 DT를 빌드하는 방법:

  1. 오버레이 DT .dts.dtbo 파일로 컴파일합니다. 이 파일 형식은 평면화된 기기 트리로 형식이 지정된 .dtb 파일과 동일하지만 파일 확장자가 다르다는 점에서 기본 DT와 구분됩니다.
  2. .dtbo 파일을 부트로더 런타임으로 액세스 가능한 파티션에 플래시합니다(자세한 내용은 아래 참고).

DTC로 컴파일하고 호스트의 DTO 결과를 확인하는 자세한 방법은 컴파일 및 확인을 참고하세요.

DT 파티션 나누기

플래시 메모리에서 부트로더 런타임으로 액세스 가능한 신뢰할 수 있는 위치를 파악하여 .dtb.dtbo를 배치합니다.

기본 DT의 위치 예시

  • 부팅 파티션의 일부, 커널에 추가됨(image.gz).
  • 전용 파티션(dtb)에 있는 별도의 DT blobs(.dtb).

오버레이 DT의 위치 예시

고유 파티션
그림 1. .dtbo를 고유 파티션(예: dtbo 파티션)에 배치합니다.
ODM 파티션
그림 2. .dtboodm 파티션에 배치(부트로더가 odm 파티션의 파일 시스템에서 데이터를 로드할 수 있는 경우에만 실행).

참고: 오버레이 DT 파티션의 크기는 기기, 그리고 기본 DT blob 외에 필요한 변화량에 따라 다릅니다. 일반적으로는 8MB로도 충분하며, 필요한 경우에는 향후 확장을 위한 공간도 확보할 수 있습니다.

원활한 (A/B) 업데이트를 지원하는 기기의 경우 기본 DT 및 오버레이 DT 파티션을 A/B로 분할:

예 1
그림 3. DTBO 파티션 A/B, 예시 1.
예 2
그림 4. DTBO 파티션 A/B, 예시 2.

부트로더에서 실행

실행 방법:

그림 5. 부트로더 기기 트리 오버레이의 일반적인 런타임 구현
  1. .dtb를 저장소에서 메모리로 로드합니다.
  2. .dtbo를 저장소에서 메모리로 로드합니다.
  3. .dtb를 병합된 DT로 만들 .dtbo로 오버레이합니다.
  4. 병합된 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 파티션과 공개 키를 공유할 수 있습니다).

자세한 내용은 자체 검사 부팅을 참조하세요.