Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Gambar DTB

Implementasi Android bisa menyertakan image device tree blob (DTB) untuk digunakan oleh bootloader. Lokasi gambar DTB (dan opsi untuk menentukan parameter gambar DTB) berbeda 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 image DTB berisi data khusus vendor, image DTB sekarang menjadi bagian dari partisi boot vendor. Untuk menentukan parameter gambar DTB, lihat Header boot vendor .

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

  • Di Android 9 dan lebih rendah, image DTB dapat berada 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:

  • Blob DT digabungkan satu demi 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 id , rev , dan bidang custom ) yang dapat menyimpan informasi identifikasi perangkat keras untuk entri tersebut). Untuk detailnya, lihat Partisi DTB / DTBO .

Termasuk gambar DTB dalam gambar boot

Perangkat yang menjalankan Android 10 dapat menyertakan image DTB di image 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 menstandarisasi) penempatan DTB.

Selain itu, untuk perangkat non-A / B, lebih aman 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 untuk boot ke mode pemulihan untuk menyelesaikan OTA; namun, karena partisi DTB telah diperbarui, ketidakcocokan dapat terjadi dengan citra pemulihan (yang 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 gambar booting

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

Bagian gambar booting 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
Recovery 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 gambar DTB.

Argumen Deskripsi
dtb Jalur ke image DTB untuk disertakan dalam image boot / pemulihan.
dtb_offset Saat ditambahkan ke argumen base , berikan alamat beban fisik untuk pohon perangkat terakhir. Sebagai contoh, jika base argumen adalah 0x10000000 dan dtb_offset argumen adalah 0x01000000 , yang dtb_addr_field di header boot image dihuni 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 dalam direktori BOARD_PREBUILT_DTBIMAGE_DIR , sistem build Android akan menggabungkan file-file tersebut untuk membuat gambar DTB akhir yang digunakan dalam pembuatan image booting.

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 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 berhasil berjalan di perangkat yang menjalankan Android 10, bootloader harus mendukung gambar 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 dalam image booting.