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 Gambar (GKI) harus dukung booting vendor partisi, yang mencakup semua informasi khusus vendor yang dipindahkan dari partisi {i>booting<i}. Karena gambar DTB berisi data khusus vendor, {i>image<i} tersebut sekarang dari partisi {i>boot<i} vendor. Untuk menentukan parameter image DTB, lihat Booting vendor {i>header<i}.
Di Android 10, perangkat dapat menyertakan image DTB di partisi {i>boot<i}. 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 kemkbootimg
untuk membuatboot.img
).
Format gambar DTB
Di Android 10 dan yang lebih tinggi, image DTB harus menggunakan 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. {i>Bootloader<i} memiliki cara yang efisien untuk memilih memperbaiki blob DT dengan memeriksa struct
dt_table_entry
(berisiid
,rev
, dancustom
) yang dapat menyimpan informasi identifikasi hardware untuk entri tersebut. Untuk mengetahui detailnya, lihat DTB/DTBO Partisi.
Menyertakan image DTB dalam image boot
Perangkat yang menjalankan Android 10 dapat
menyertakan gambar DTB di
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, akan lebih aman jika DTB menjadi bagian dari alih-alih 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 gambar DTB sebagai bagian dari format {i>boot image<i} mencegah masalah tersebut dengan membuat gambar 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 |
{i>Kernel<i} (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 |
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 , akan memberikan beban fisik
untuk hierarki perangkat akhir. Misalnya, jika base
argumennya adalah 0x10000000 dan argumen dtb_offset
adalah 0x01000000 , dtb_addr_field dalam image booting
header 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 gambar DTB dari
yang ditentukan oleh BOARD_PREBUILT_DTBIMAGE_DIR
, variabel konfigurasi board
BOARD_INCLUDE_DTB_IN_BOOTIMG
harus disetel 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 boot image yang diperbarui
dan harus menambahkan parameter command line kernel androidboot.dtb_idx
untuk menunjukkan
indeks dari 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 hierarki perangkat yang dipilih oleh bootloader dari kumpulan
DTB yang ada di boot image.