Image DTB

Implementasi Android dapat menyertakan image device tree blob (DTB) untuk digunakan oleh {i>bootloader<i}. 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 booting vendor, yang mencakup semua informasi khusus vendor yang dipindahkan dari partisi booting. Karena image DTB berisi data khusus vendor, image tersebut 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 DTB di image booting.

  • 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 ke mkbootimg untuk membuat boot.img).

Format gambar DTB

Di Android 10 dan yang lebih tinggi, image DTB harus menggunakan satu format berikut:

  • Blob DT yang digabungkan satu per satu. Bootloader menggunakan Kolom totalsize di setiap header FDT untuk membaca dan mengurai blob yang sesuai.

  • Partisi DTB/DTBO. {i>Bootloader<i} memiliki cara yang efisien untuk memilih memperbaiki blob DT dengan memeriksa struct dt_table_entry (berisi id, rev, dan custom) yang dapat menyimpan informasi identifikasi hardware untuk entri tersebut. Untuk mengetahui detailnya, lihat DTB/DTBO Partisi.

Menyertakan image DTB dalam image booting

Perangkat yang menjalankan Android 10 dapat menyertakan image DTB dalam image booting. Dengan demikian, Android tidak perlu mendukung skrip yang menambahkan image DTB ke image.gz di kernel, dan memungkinkan penggunaan Pengujian Vendor Pengujian Suite (VTS) untuk memverifikasi (dan menstandarkan) DTB penempatan.

Selain itu, untuk perangkat non-A/B, sebaiknya gunakan DTB sebagai bagian dari gambar pemulihan, bukan 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 lengkap), perangkat mencoba untuk {i>booting<i} ke mode pemulihan untuk menyelesaikan OTA; namun, karena partisi DTB memiliki diperbarui, ketidakcocokan bisa terjadi pada gambar pemulihan (yang memiliki belum diperbarui). Memiliki image DTB sebagai bagian dari format image booting mencegah masalah tersebut dengan membuat image pemulihan mandiri (yaitu, tidak bergantung pada partisi lain).

Struktur image booting

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

Bagian image booting Jumlah halaman
Header booting (1 halaman) 1
Kernel (halaman l) 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
DTBO pemulihan (o halaman) o = (recovery_dtbo_size + page_size - 1) / page_size
DTB (halaman p) p = (dtb_size + page_size - 1) / page_size

Jalur image DTB

Untuk perangkat yang menjalankan Android 10, Anda dapat menggunakan Alat mkbootimg.py dan argumen berikut untuk menentukan jalur ke DTB gambar.

Argumen Deskripsi
dtb Jalur ke image DTB yang akan disertakan dalam image booting/pemulihan.
dtb_offset Saat ditambahkan ke argumen base, menyediakan alamat pemuatan fisik untuk hierarki perangkat akhir. Misalnya, jika argumen base adalah 0x10000000 dan argumen dtb_offset adalah 0x01000000, dtb_addr_field di header image booting akan diisi sebagai 0x11000000.

Variabel konfigurasi board 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, yaitu sistem build Android menyambungkan file untuk membuat image DTB akhir yang digunakan dalam image booting pembuatan konten.

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 board BOARD_MKBOOTIMG_ARGS variabel config dengan versi header dan offset 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 booting yang diupdate dan harus menambahkan parameter command line kernel androidboot.dtb_idx untuk menunjukkan indeks hierarki perangkat (DT) yang dipilih. Anda hanya dapat menentukan satu (1) indeks. Misalnya, parameter androidboot.dtb_idx=N melaporkan N sebagai indeks berbasis nol dari hierarki perangkat yang dipilih oleh bootloader dari kumpulan DTB yang ada di boot image.