2025년 3월 27일부터 AOSP를 빌드하고 기여하려면 aosp-main
대신 android-latest-release
를 사용하는 것이 좋습니다. 자세한 내용은 AOSP 변경사항을 참고하세요.
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
를 생성할 수 있습니다.
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_field 는 0x11000000 으로 입력됩니다. |
보드 구성 변수 BOARD_PREBUILT_DTBIMAGE_DIR
은 DTB 이미지의 경로를 지정하는 데 사용되어야 합니다. 디렉터리 BOARD_PREBUILT_DTBIMAGE_DIR
에 확장자 *.dtb
가 포함된 파일이 2개 이상 있는 경우 Android 빌드 시스템은 파일을 연결하여 부팅 이미지 생성에 사용되는 최종 DTB 이미지를 만듭니다.
BOARD_PREBUILT_DTBIMAGE_DIR
을 통해 지정된 디렉터리의 DTB 이미지와 함께 인수 dtb
를 mkbootimg.py
에 전달하려면 보드 구성 변수 BOARD_INCLUDE_DTB_IN_BOOTIMG
를 true
로 설정해야 합니다. 예:
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
을 보고합니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-27(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"]],["최종 업데이트: 2025-07-27(UTC)"],[],[],null,["# DTB images\n\nAndroid implementations can include a device tree blob (DTB) image for use by\nthe bootloader. The location of the DTB image (and the options for specifying\nDTB image parameters) differs between Android releases.\n\n- In Android 11, devices using the [Generic Kernel\n Image (GKI)](/docs/core/architecture/kernel/generic-kernel-image) must\n support the [vendor boot\n partition](/docs/core/architecture/bootloader/partitions/vendor-boot-partitions),\n which includes all vendor-specific information that was relocated from the\n boot partition. Because the DTB image contains vendor-specific data, it's now\n part of the vendor boot partition. To specify DTB image parameters, see\n [Vendor boot\n header](/docs/core/architecture/bootloader/partitions/vendor-boot-partitions#vendor-boot-header).\n\n- In Android 10, devices can include the DTB image in\n the boot partition. To specify DTB image parameters, see [Including the DTB\n image in the boot image](#dtb-image-include).\n\n- In Android 9 and lower, the DTB image can exist in\n its own partition or be appended to the kernel `image.gz` to create the kernel\n + DTB image (which is then passed to `mkbootimg` to create `boot.img`).\n\nDTB image format\n----------------\n\nIn Android 10 and higher, the DTB image must use one\nof the following formats:\n\n- **DT blobs concatenated one after the other.** The bootloader uses the\n `totalsize` field in each FDT header to read and parse the corresponding blob.\n\n- **DTB/DTBO partitions.** The bootloader has an efficient way to select the\n correct DT blob by examining the `dt_table_entry` struct (contains `id`,\n `rev`, and `custom` fields) that can hold hardware identifying information for\n the entry. For details, see [DTB/DTBO\n Partitions](/docs/core/architecture/dto/partitions#structures).\n\nInclude the DTB image in the boot image\n---------------------------------------\n\nDevices running Android 10 can include the DTB image in\nthe boot image. This removes the need for Android to support scripts that append\nthe DTB image to `image.gz` in the kernel, and enables the use of [Vendor Test\nSuite (VTS)](/docs/compatibility/vts) test to verify (and standardize) DTB\nplacement.\n\nIn addition, for non-A/B devices, it's safer to have the DTB as part of the\nrecovery image rather than in a separate partition to prevent issues caused by\ninterrupted OTAs. During an OTA, if a problem occurs after the DTB partition is\nupdated (but prior to completing the full update), the device tries to boot into\nrecovery mode to complete the OTA; however, because the DTB partition has\nalready been updated, a mismatch could occur with the recovery image (which has\nnot yet been updated). Having the DTB image as part of the boot image format\nprevents such issues by making the recovery image self sufficient (that is, it\ndoesn't depend on another partition).\n\n### Boot image structure\n\nDevices running Android 10 can include a DTB image\nusing the following boot image structure.\n\n| Boot image section | Number of pages |\n|-----------------------------------|------------------------------------------------------------|\n| Boot header (1 page) | 1 |\n| Kernel (l pages) | l = (`kernel_size` + `page_size` - 1) / `page_size` |\n| Ramdisk (m pages) | m = (`ramdisk_size` + `page_size` - 1) / `page_size` |\n| Second stage bootloader (n pages) | n = (`second_size` + `page_size` - 1) / `page_size` |\n| Recovery DTBO (o pages) | o = (`recovery_dtbo_size` + `page_size` - 1) / `page_size` |\n| DTB (p pages) | p = (`dtb_size` + `page_size` - 1) / `page_size` |\n\n### DTB image path\n\nFor devices running Android 10, you can use the\n`mkbootimg.py` tool and the following arguments to specify the path to the DTB\nimage.\n\n| Argument | Description |\n|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `dtb` | Path to the DTB image to be included in the boot/recovery images. |\n| `dtb_offset` | When added to the `base` argument, provides the physical load address for the final device tree. For example, if the `base` argument is `0x10000000` and the `dtb_offset` argument is `0x01000000`, the `dtb_addr_field` in the boot image header is populated as `0x11000000`. |\n\nThe board config variable `BOARD_PREBUILT_DTBIMAGE_DIR` must be used to specify\nthe path to the DTB image. If more than one file with extension `*.dtb` is\npresent in the directory `BOARD_PREBUILT_DTBIMAGE_DIR`, the Android build system\nconcatenates the files to create the final DTB image used in the boot image\ncreation.\n\nTo pass the argument `dtb` to `mkbootimg.py` with the DTB image from the\ndirectory specified by `BOARD_PREBUILT_DTBIMAGE_DIR`, the board config variable\n`BOARD_INCLUDE_DTB_IN_BOOTIMG` must be set to `true`. For example: \n\n BOARD_INCLUDE_DTB_IN_BOOTIMG := true\n\nYou can append the `dtb_offset` argument to the `BOARD_MKBOOTIMG_ARGS` board\nconfig variable with the other offsets and header version. For example: \n\n 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)\n\n### Bootloader support\n\nFor VTS to run successfully on devices running Android\n10, the bootloader must support the updated boot image\nand must add the `androidboot.dtb_idx` kernel command line parameter to indicate\nthe index of the selected device tree (DT). **You can specify only one (1)\nindex.** For example, the parameter `androidboot.dtb_idx=N` reports `N` as the\nzero-based index of the device tree selected by the bootloader from the set of\nDTBs present in the boot image."]]