Gambar DTB

Implementasi Android dapat menyertakan image blob pohon perangkat (DTB) untuk digunakan oleh bootloader. Lokasi image DTB (dan opsi untuk menentukan parameter image DTB) berbeda-beda di setiap rilis Android.

  • Di Android 11, perangkat yang menggunakan Generic Kernel Image (GKI) harus mendukung partisi boot vendor , yang mencakup semua informasi spesifik vendor yang dipindahkan dari partisi boot. Karena image DTB berisi data khusus vendor, kini image tersebut menjadi bagian dari partisi boot vendor. Untuk menentukan parameter image DTB, lihat Header boot vendor .

  • Di Android 10, perangkat dapat menyertakan image DTB di partisi boot. Untuk menentukan parameter image DTB, lihat Menyertakan image DTB dalam image boot .

  • Di Android 9 dan yang lebih rendah, image DTB dapat ada di partisinya sendiri atau ditambahkan ke kernel image.gz untuk membuat image kernel + DTB (yang kemudian diteruskan ke mkbootimg untuk membuat boot.img ).

Format gambar DTB

Di Android 10 dan lebih tinggi, gambar DTB harus menggunakan salah satu format berikut:

  • Gumpalan DT digabungkan satu demi satu. Bootloader menggunakan bidang totalsize di setiap header FDT untuk membaca dan mengurai blob yang sesuai.

  • Partisi DTB/DTBO. Bootloader memiliki cara yang efisien untuk memilih gumpalan DT yang benar dengan memeriksa struct dt_table_entry (berisi bidang id , rev , dan custom ) yang dapat menyimpan informasi pengidentifikasi perangkat keras untuk entri tersebut). Untuk detailnya, lihat Partisi DTB/DTBO .

Menyertakan image DTB di image boot

Perangkat yang menjalankan Android 10 dapat menyertakan image DTB di 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, lebih aman untuk memiliki DTB sebagai bagian dari citra pemulihan daripada di partisi terpisah untuk mencegah masalah yang disebabkan oleh OTA yang terputus. Selama OTA, jika masalah terjadi setelah partisi DTB diperbarui (tetapi sebelum menyelesaikan pembaruan penuh), perangkat mencoba melakukan booting ke mode pemulihan untuk menyelesaikan OTA; namun, karena partisi DTB telah diperbarui, mungkin terjadi ketidakcocokan dengan image pemulihan (yang belum diperbarui). Memiliki image DTB sebagai bagian dari format image booting mencegah masalah tersebut dengan membuat image pemulihan mandiri (artinya, tidak bergantung pada partisi lain).

Struktur gambar boot

Perangkat yang menjalankan Android 10 dapat menyertakan image DTB menggunakan struktur image booting berikut.

Bagian gambar boot Jumlah halaman
Header 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) 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 Keterangan
dtb Jalur ke image DTB untuk disertakan dalam image boot/pemulihan.
dtb_offset Ketika ditambahkan ke argumen base , berikan 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 akan diisi sebagai 0x11000000 .

Variabel konfigurasi papan BOARD_PREBUILT_DTBIMAGE_DIR harus digunakan untuk menentukan jalur ke gambar DTB. Jika lebih dari satu file dengan ekstensi *.dtb ada di direktori BOARD_PREBUILT_DTBIMAGE_DIR , sistem build Android akan menggabungkan file-file tersebut untuk membuat image DTB akhir yang digunakan dalam pembuatan image 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 . Misalnya:

BOARD_INCLUDE_DTB_IN_BOOTIMG := true

Anda dapat menambahkan argumen dtb_offset ke variabel konfigurasi papan BOARD_MKBOOTIMG_ARGS dengan versi offset dan header lainnya. Misalnya:

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 dapat berjalan dengan sukses pada 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) 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.