Mengimplementasikan DTO

Penerapan overlay pohon perangkat (DTO) melibatkan pembagian pohon perangkat (DT), pembuatan, pemartisian, dan eksekusi. 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.

Membangun DT utama dan overlay

Untuk membuat DT utama:

  1. Kompilasi DT .dts utama ke dalam file .dtb.
  2. Flash file .dtb ke partisi yang dapat diakses runtime bootloader (dijelaskan di [Partition DTs](#partition)).

Untuk membuat DT overlay:

  1. 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.
  2. Flash file .dtbo ke partisi yang dapat diakses runtime bootloader (dijelaskan di [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 yang dapat diakses saat runtime bootloader di memori flash untuk menempatkan .dtb dan .dtbo.

Contoh lokasi untuk DT utama:

  • Bagian dari partisi boot, ditambahkan ke kernel (image.gz)
  • Memisahkan blob DT (.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 atas blob DT utama. Biasanya, 8 MB sudah lebih dari cukup dan memungkinkan ruang untuk berkembang di masa mendatang jika diperlukan.

Untuk perangkat yang mendukung update lancar (A/B), lakukan A/B pada partisi DT utama dan DT overlay:

Gambar 3. A/B partisi DTBO, contoh 1.

Gambar 4. A/B partisi DTBO, contoh 2.

Menjalankan di bootloader

Untuk menjalankan:

Gambar 5. Implementasi runtime umum untuk DTO di bootloader.

  1. Muat .dtb dari penyimpanan ke dalam memori.
  2. Muat .dtbo dari penyimpanan ke dalam memori.
  3. Tumpang-tindihkan .dtb dengan .dtbo agar menjadi DT gabungan.
  4. Mulai kernel dengan alamat memori DT gabungan.

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 satu sama lain 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 mengoreksi 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 dimodifikasi, dan tidak rusak. Anda dapat menggunakan solusi apa pun untuk mengamankan DTB atau DTBO, misalnya, Tanda tangan image boot di VBoot 1.0 atau footer HASH AVB (VBoot 2.0).

  • Jika DTB atau DTBO berada di partisi unik, Anda dapat menambahkan partisi tersebut ke rantai kepercayaan AVB. Rantai kepercayaan dimulai dari root of trust yang dilindungi hardware dan berlanjut ke bootloader, yang memverifikasi integritas dan keaslian partisi DTB atau DTBO.
  • Jika DTB atau DTBO berada di partisi yang ada (seperti partisi odm), partisi tersebut harus berada di rantai kepercayaan AVB. (Partisi DTBO dapat membagikan kunci publik dengan partisi odm).

Untuk mengetahui detailnya, lihat Booting Terverifikasi.