DTB 이미지

Android 구현에는 부트로더에서 사용할 DTB(기기 트리 Blob) 이미지가 포함될 수 있습니다. DTB 이미지의 위치와 DTB 이미지 매개변수를 지정하는 옵션은 Android 출시에 따라 다릅니다.

  • Android 11에서 GKI(일반 커널 이미지)를 사용하는 기기는 부팅 파티션에서 재배치된 모든 공급업체별 정보가 포함된 공급업체 부팅 파티션을 지원해야 합니다. DTB 이미지에는 공급업체별 데이터가 포함되므로 이제 이 이미지는 공급업체 부팅 파티션에 포함됩니다. DTB 이미지 매개변수를 지정하려면 공급업체 부팅 헤더를 참고하세요.

  • Android 10에서 기기는 부팅 파티션에 DTB 이미지를 포함할 수 있습니다. DTB 이미지 매개변수를 지정하려면 부팅 이미지에 DTB 이미지 포함을 참고하세요.

  • Android 9 이하에서 DTB 이미지는 자체 파티션에 존재하거나 커널 image.gz에 추가되어 커널 + DTB 이미지를 생성한 다음, mkbootimg에 전달되어 boot.img를 생성할 수 있습니다.

DTB 이미지 형식

Android 10 이상에서 DTB 이미지는 다음 형식 중 하나를 사용해야 합니다.

  • 순차적으로 연결된 DT blob. 부트로더는 각 FDT 헤더의 totalsize 필드를 사용하여 상응하는 blob을 읽고 파싱합니다.

  • DTB/DTBO 파티션. 부트로더는 항목에 관한 정보를 식별하는 하드웨어를 유지하는 dt_table_entry 구조체(id, rev, custom 필드 포함)를 검사하여 올바른 DT blob을 효율적으로 선택할 수 있습니다. 자세한 내용은 DTB/DTBO 파티션을 참고하세요.

부팅 이미지에 DTB 이미지 포함

Android 10을 실행하는 기기는 DTB 이미지를 부팅 이미지에 포함할 수 있습니다. 이렇게 하면 Android에서 DTB 이미지를 커널의 image.gz에 추가하는 스크립트를 지원할 필요가 없고 VTS(공급업체 테스트 도구 모음) 테스트를 사용하여 DTB 배치를 확인(및 표준화)할 수 있습니다.

A/B가 아닌 기기의 경우, 중단된 OTA로 인한 문제를 방지하기 위해 DTB를 별도의 파티션에 두는 대신 복구 이미지의 일부로 포함하는 것이 안전합니다. OTA 도중 DTB 파티션이 업데이트되었지만 전체 업데이트가 완료되기 전에 문제가 발생하면, 기기는 OTA를 완료하기 위해 복구 모드로 부팅을 시도합니다. 하지만 DTB 파티션이 이미 업데이트되었으므로 아직 업데이트되지 않은 복구 이미지와의 불일치가 발생할 수 있습니다. DTB 이미지를 부팅 이미지 형식의 일부로 포함하면 복구 이미지 자체로 충분하게 되면서 다른 파티션에 의존하지 않으므로 이러한 문제를 방지할 수 있습니다.

부팅 이미지 구조

Android 10을 실행하는 기기는 다음 부팅 이미지 구조를 사용하여 DTB 이미지를 포함할 수 있습니다.

부팅 이미지 섹션 페이지 수
부팅 헤더(1페이지) 1
커널(l페이지) l = (kernel_size + page_size - 1) / page_size
램디스크(m페이지) m = (ramdisk_size + page_size - 1) / page_size
2단계 부트로더(n페이지) n = (second_size + page_size - 1) / page_size
복구 DTBO(o페이지) o = (recovery_dtbo_size + page_size - 1) / page_size
DTB(p페이지) p = (dtb_size + page_size - 1) / page_size

DTB 이미지 경로

Android 10을 실행하는 기기의 경우 mkbootimg.py 도구와 다음 인수를 사용하여 DTB 이미지 경로를 지정할 수 있습니다.

인수 설명
dtb 부팅/복구 이미지에 포함될 DTB 이미지의 경로입니다.
dtb_offset base 인수에 추가되면 최종 기기 트리의 실제 로드 주소를 제공합니다. 예를 들어 base 인수가 0x10000000이고 dtb_offset 인수가 0x01000000인 경우 부팅 이미지 헤더의 dtb_addr_field0x11000000으로 입력됩니다.

보드 구성 변수 BOARD_PREBUILT_DTBIMAGE_DIR은 DTB 이미지의 경로를 지정하는 데 사용되어야 합니다. 디렉터리 BOARD_PREBUILT_DTBIMAGE_DIR에 확장자 *.dtb가 포함된 파일이 2개 이상 있는 경우 Android 빌드 시스템은 파일을 연결하여 부팅 이미지 생성에 사용되는 최종 DTB 이미지를 만듭니다.

BOARD_PREBUILT_DTBIMAGE_DIR을 통해 지정된 디렉터리의 DTB 이미지와 함께 인수 dtbmkbootimg.py에 전달하려면 보드 구성 변수 BOARD_INCLUDE_DTB_IN_BOOTIMGtrue로 설정해야 합니다. 예:

BOARD_INCLUDE_DTB_IN_BOOTIMG := true

dtb_offset 인수를 다른 오프셋 및 헤더 버전과 함께 BOARD_MKBOOTIMG_ARGS 보드 구성 변수에 추가할 수 있습니다. 예:

BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --dtb_offset $(BOARD_DTB_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)

부트로더 지원

Android 10을 실행하는 기기에서 VTS를 성공적으로 실행하려면 부트로더는 업데이트된 부팅 이미지를 지원해야 하고 androidboot.dtb_idx 커널 명령줄 매개변수를 추가하여 선택한 DT(기기 트리)의 색인을 표시해야 합니다. 색인은 하나만 지정할 수 있습니다. 예를 들어 매개변수 androidboot.dtb_idx=N은 부팅 이미지에 있는 DTB 세트에서 부트로더가 선택한 기기 트리의 0 기반 색인으로서 N을 보고합니다.