Implementasi Android dapat menyertakan image device tree blob (DTB) untuk digunakan oleh bootloader. Lokasi gambar DTB (dan opsi untuk menentukan parameter gambar DTB) berbeda di antara rilis Android.
Di Android 11, perangkat yang menggunakan Generic Kernel Image (GKI) harus mendukung partisi boot vendor , yang menyertakan semua informasi khusus vendor yang dipindahkan dari partisi boot. Karena gambar DTB berisi data khusus vendor, sekarang menjadi bagian dari partisi boot vendor. Untuk menentukan parameter image DTB, lihat Vendor boot header .
Di Android 10, perangkat dapat menyertakan gambar DTB di partisi boot. Untuk menentukan parameter gambar DTB, lihat Menyertakan gambar DTB dalam gambar boot .
Di Android 9 dan yang lebih rendah, image DTB dapat berada di partisinya sendiri atau ditambahkan ke kernel
image.gz
untuk membuat kernel + image DTB (yang kemudian diteruskan kemkbootimg
untuk membuatboot.img
).
format gambar DTB
Di Android 10 dan yang lebih tinggi, gambar DTB harus menggunakan salah satu format berikut:
Gumpalan DT bersambung satu demi satu. Bootloader menggunakan bidang
totalsize
di setiap header FDT untuk membaca dan mengurai gumpalan yang sesuai.Partisi DTB/DTBO. Bootloader memiliki cara yang efisien untuk memilih gumpalan DT yang benar dengan memeriksa struct
dt_table_entry
(berisiid
,rev
, dan bidangcustom
) yang dapat menyimpan informasi pengenal perangkat keras untuk entri tersebut). Untuk detailnya, lihat Partisi DTB/DTBO .
Termasuk gambar DTB di gambar boot
Perangkat yang menjalankan Android 10 dapat menyertakan gambar DTB di gambar boot. Ini menghilangkan kebutuhan Android untuk mendukung skrip yang menambahkan gambar DTB ke image.gz
di kernel, dan memungkinkan penggunaan pengujian Vendor Test Suite (VTS) untuk memverifikasi (dan menstandardisasi) penempatan DTB.
Selain itu, untuk perangkat non-A/B, lebih aman untuk memiliki DTB sebagai bagian dari citra pemulihan daripada di partisi terpisah untuk mencegah masalah yang disebabkan oleh OTA yang terganggu. Selama OTA, jika masalah terjadi setelah partisi DTB diperbarui (tetapi sebelum menyelesaikan pembaruan penuh), perangkat mencoba untuk boot ke mode pemulihan untuk menyelesaikan OTA; namun, karena partisi DTB telah diperbarui, ketidakcocokan dapat terjadi dengan gambar pemulihan (yang belum diperbarui). Memiliki gambar DTB sebagai bagian dari format gambar boot mencegah masalah tersebut dengan membuat gambar pemulihan mandiri (yaitu, tidak bergantung pada partisi lain).
Struktur gambar boot
Perangkat yang menjalankan Android 10 dapat menyertakan gambar DTB menggunakan struktur gambar boot berikut.
Bagian gambar boot | Jumlah halaman |
---|---|
Judul boot (1 halaman) | 1 |
Kernel (l halaman) | l = ( kernel_size + page_size - 1) / page_size |
Ramdisk (m halaman) | m = ( ramdisk_size + page_size - 1) / page_size |
Bootloader tahap kedua (n halaman) | n = ( second_size + page_size - 1) / page_size |
Pemulihan DTBO (o halaman) | o = ( recovery_dtbo_size + page_size - 1) / page_size |
DTB (halaman) | p = ( dtb_size + page_size - 1) / page_size |
Jalur gambar DTB
Untuk perangkat yang menjalankan Android 10, Anda dapat menggunakan alat mkbootimg.py
dan argumen berikut untuk menentukan jalur ke gambar DTB.
Argumen | Keterangan |
---|---|
dtb | Jalur ke gambar DTB untuk disertakan dalam gambar boot/pemulihan. |
dtb_offset | Ketika ditambahkan ke argumen base , memberikan alamat beban fisik untuk pohon perangkat akhir. Misalnya, jika argumen base adalah 0x10000000 dan argumen dtb_offset adalah 0x01000000 , dtb_addr_field di header gambar boot diisi sebagai 0x11000000 . |
Variabel konfigurasi papan BOARD_PREBUILT_DTBIMAGE_DIR
harus digunakan untuk menentukan jalur ke gambar DTB. Jika ada lebih dari satu file dengan ekstensi *.dtb
di direktori BOARD_PREBUILT_DTBIMAGE_DIR
, sistem pembangunan Android akan menggabungkan file tersebut untuk membuat gambar DTB akhir yang digunakan dalam pembuatan gambar boot.
Untuk meneruskan argumen dtb
ke mkbootimg.py
dengan gambar DTB dari direktori yang ditentukan oleh BOARD_PREBUILT_DTBIMAGE_DIR
, variabel konfigurasi papan BOARD_INCLUDE_DTB_IN_BOOTIMG
harus disetel ke true
. Sebagai contoh:
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
Anda dapat menambahkan argumen dtb_offset
ke variabel konfigurasi papan BOARD_MKBOOTIMG_ARGS
dengan offset dan versi header lainnya. Sebagai contoh:
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)
Dukungan bootloader
Agar VTS berjalan dengan sukses di perangkat yang menjalankan Android 10, bootloader harus mendukung image boot yang diperbarui dan harus menambahkan parameter baris perintah kernel androidboot.dtb_idx
untuk menunjukkan indeks pohon perangkat (DT) yang dipilih. Anda hanya dapat menentukan satu (1) index. Misalnya, parameter androidboot.dtb_idx=N
melaporkan N
sebagai indeks berbasis nol dari pohon perangkat yang dipilih oleh bootloader dari kumpulan DTB yang ada di image boot.