Mengimplementasikan overlay hierarki perangkat (DTO) melibatkan pembagian hierarki perangkat (DT), mem-build, mempartisi, dan menjalankan. Setelah memiliki implementasi yang berfungsi, Anda juga harus mempertahankan kompatibilitas antara kedua DT dan menentukan strategi untuk memastikan keamanan setiap partisi DT.
Membagi DT
Mulailah dengan membagi DT menjadi dua bagian:
- DT Utama. Bagian khusus SoC dan konfigurasi default, yang disediakan oleh vendor SoC.
- Overlay DT. Konfigurasi khusus perangkat, yang disediakan oleh ODM/OEM.
Setelah membagi DT, Anda harus memastikan kompatibilitas antara DT utama dan DT overlay sehingga penggabungan DT utama dan DT overlay menghasilkan DT lengkap untuk perangkat. Untuk mengetahui detail tentang format dan aturan DTO, lihat sintaksis DTO. Untuk mengetahui detail tentang beberapa DT, lihat Menggunakan beberapa DT.
Membuat DT utama dan overlay
Untuk mem-build DT utama:
- Kompilasi
.dts
DT utama ke dalam file.dtb
. - Flash file
.dtb
ke partisi yang dapat diakses runtime bootloader (dijelaskan dalam [Partition DTs](#partition)).
Untuk mem-build DT overlay:
- Kompilasi DT overlay
.dts
menjadi file.dtbo
. Meskipun format file ini sama dengan file.dtb
yang diformat sebagai DT yang diratakan, ekstensi file yang berbeda membedakannya dari DT utama. - Flash file
.dtbo
ke partisi yang dapat diakses runtime bootloader (dijelaskan dalam [Partition DTs](#partition)).
Untuk mengetahui detail tentang mengompilasi dengan DTC dan memverifikasi hasil DTO di host, lihat Mengompilasi dan memverifikasi.
DT Partisi
Tentukan lokasi tepercaya dan dapat diakses runtime bootloader di memori
flash untuk menempatkan .dtb
dan .dtbo
.
Contoh lokasi untuk DT utama:
- Bagian dari partisi booting, ditambahkan ke kernel (
image.gz
) - Blob DT terpisah (
.dtb
) di partisi khusus (dtb
)
Contoh lokasi untuk DT overlay:
Gambar 1. Masukkan .dtbo ke partisi odm (lakukan ini hanya jika bootloader Anda memiliki kemampuan untuk memuat data dari sistem file partisi odm).
Gambar 2. Masukkan .dtbo ke dalam partisi unik, seperti partisi dtbo.
Catatan: Ukuran partisi DT overlay bergantung pada perangkat dan jumlah perubahan yang diperlukan di bagian atas blob DT utama. Biasanya, 8 MB sudah lebih dari cukup dan memungkinkan ruang untuk membesar di masa mendatang jika diperlukan.
Untuk perangkat yang mendukung pembaruan lancar (A/B), A/B partisi DT utama dan DT overlay:
Gambar 3. Partisi DTBO A/B, contoh 1.
Gambar 4. Partisi A/B DTBO, contoh 2.
Berjalan di bootloader
Untuk menjalankan:
Gambar 5. Implementasi runtime umum untuk DTO di bootloader.
- Muat
.dtb
dari penyimpanan ke dalam memori. - Muat
.dtbo
dari penyimpanan ke dalam memori. - Tumpang-tindih
.dtb
dengan.dtbo
menjadi DT gabungan. - Mulai kernel dengan alamat memori DT yang digabungkan.
Mempertahankan kompatibilitas
DTB utama (dari vendor SoC) diperlakukan sebagai platform API untuk DTBO. Setelah memisahkan DT menjadi bagian umum SoC dan bagian khusus perangkat, Anda harus menjaga kedua bagian tersebut tetap kompatibel di masa mendatang, termasuk:
- Definisi DT di DT utama. Misalnya, node, properti, label. Setiap perubahan definisi di DT utama dapat memicu perubahan di DT overlay. Misalnya, untuk memperbaiki nama node di DT utama, tentukan label "alias" yang dipetakan ke nama node asli (untuk menghindari perubahan DT overlay).
- Overlay lokasi toko DT. Misalnya, nama partisi, format penyimpanan.
Memastikan keamanan
Bootloader harus memastikan DTB atau DTBO aman, tidak diubah, dan tidak rusak. Anda dapat menggunakan solusi apa pun untuk mengamankan DTB atau DTBO, misalnya, tanda tangan image booting di VBoot 1.0 atau footer HASH AVB (VBoot 2.0).
- Jika DTB atau DTBO berada dalam partisi unik, Anda dapat menambahkan partisi tersebut ke rantai kepercayaan AVB. Rantai kepercayaan dimulai dari root of trust yang dilindungi hardware dan mengarah ke bootloader, yang memverifikasi integritas dan keaslian partisi DTB atau DTBO.
- Jika DTB atau DTBO berada dalam partisi yang ada (seperti partisi
odm
), partisi tersebut harus berada dalam rantai kepercayaan AVB. (Partisi DTBO dapat berbagi kunci publik dengan partisiodm
).
Untuk mengetahui detailnya, lihat Booting Terverifikasi.