Android 구현에는 부트로더에서 사용할 DTB(기기 트리 블롭) 이미지가 포함될 수 있습니다. 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에서 커널의 image.gz
에 DTB 이미지를 추가하는 스크립트를 지원할 필요가 없고 VTS(Vendor Test Suite) 테스트를 사용하여 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 이미지에 대한 경로를 지정해야 합니다. 확장명이 *.dtb
파일이 BOARD_PREBUILT_DTBIMAGE_DIR
디렉터리에 두 개 이상 있는 경우 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
매개변수는 N
을 부트 이미지에 있는 DTB 세트에서 부트로더가 선택한 장치 트리의 0부터 시작하는 인덱스로 보고합니다.