Implementasi Android dapat menyertakan image blob tree perangkat (DTB) untuk digunakan oleh bootloader. Lokasi gambar DTB (dan opsi untuk menentukan parameter gambar DTB) berbeda di setiap rilis Android.
Di Android 11, perangkat yang menggunakan Image Kernel Generik (GKI) harus mendukung partisi boot vendor, yang mencakup semua informasi khusus vendor yang dipindahkan dari partisi boot. Karena gambar DTB berisi data khusus vendor, kini menjadi bagian dari partisi booting vendor. Untuk menentukan parameter image DTB, lihat Header booting vendor.
Di Android 10, perangkat dapat menyertakan image DTB di partisi booting. Untuk menentukan parameter image DTB, lihat Menyertakan image DTB dalam image boot.
Di Android 9 dan yang lebih lama, image DTB dapat berada di partisinya sendiri atau ditambahkan ke
image.gz
kernel untuk membuat image kernel + DTB (yang kemudian diteruskan kemkbootimg
untuk membuatboot.img
).
Format gambar DTB
Di Android 10 dan yang lebih tinggi, image DTB harus menggunakan salah satu format berikut:
Blob DT digabungkan satu per satu. Bootloader menggunakan kolom
totalsize
di setiap header FDT untuk membaca dan mengurai blob yang sesuai.Partisi DTB/DTBO. Bootloader memiliki cara yang efisien untuk memilih blob DT yang benar dengan memeriksa struct
dt_table_entry
(berisi kolomid
,rev
, dancustom
) yang dapat menyimpan informasi identifikasi hardware untuk entri. Untuk mengetahui detailnya, lihat Partisi DTB/DTBO.
Sertakan image DTB dalam image boot
Perangkat yang menjalankan Android 10 dapat menyertakan image DTB dalam
image boot. Hal ini menghilangkan kebutuhan Android untuk mendukung skrip yang menambahkan
image 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, DTB lebih aman jika menjadi bagian dari image pemulihan, bukan di partisi terpisah, untuk mencegah masalah yang disebabkan oleh OTA yang terganggu. Selama OTA, jika terjadi masalah setelah partisi DTB diupdate (tetapi sebelum menyelesaikan update penuh), perangkat akan mencoba melakukan booting ke mode pemulihan untuk menyelesaikan OTA; namun, karena partisi DTB telah diupdate, ketidakcocokan dapat terjadi dengan image pemulihan (yang belum diupdate). Memiliki image DTB sebagai bagian dari format image boot mencegah masalah tersebut dengan membuat image pemulihan mandiri (yaitu, tidak bergantung pada partisi lain).
Struktur image boot
Perangkat yang menjalankan Android 10 dapat menyertakan image DTB menggunakan struktur image boot berikut.
Bagian gambar boot | Jumlah halaman |
---|---|
Header booting (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 (p 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 image DTB.
Argumen | Deskripsi |
---|---|
dtb |
Jalur ke image DTB yang akan disertakan dalam image boot/pemulihan. |
dtb_offset |
Jika ditambahkan ke argumen base , akan memberikan alamat
pemuatan fisik untuk pohon perangkat akhir. Misalnya, jika argumen base
adalah 0x10000000 dan argumen dtb_offset
adalah 0x01000000 , maka dtb_addr_field di header
image booting akan diisi sebagai 0x11000000 . |
Variabel konfigurasi papan BOARD_PREBUILT_DTBIMAGE_DIR
harus digunakan untuk menentukan
jalur ke image DTB. Jika lebih dari satu file dengan ekstensi *.dtb
ada di direktori BOARD_PREBUILT_DTBIMAGE_DIR
, sistem build Android akan menggabungkan file untuk membuat image DTB akhir yang digunakan dalam pembuatan image boot.
Untuk meneruskan argumen dtb
ke mkbootimg.py
dengan image DTB dari
direktori yang ditentukan oleh BOARD_PREBUILT_DTBIMAGE_DIR
, variabel konfigurasi papan
BOARD_INCLUDE_DTB_IN_BOOTIMG
harus ditetapkan ke true
. 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. 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 berhasil berjalan di perangkat yang menjalankan Android 10, bootloader harus mendukung image boot yang diupdate dan harus menambahkan parameter command line kernel androidboot.dtb_idx
untuk menunjukkan indeks pohon perangkat (DT) yang dipilih. Anda hanya dapat menentukan satu (1)
indeks. 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.