Anda dapat menggunakan Device Tree Compiler (DTC) untuk mengkompilasi file Device Tree Source. Namun, sebelum menerapkan overlay DT pada DT utama target, Anda juga harus memverifikasi hasilnya dengan mensimulasikan perilaku DTO.
Kompilasi dengan DTC
Saat menggunakan .dts
dtc
Anda harus menambahkan opsi -@
untuk menambahkan simpul __symbols__
di .dtbo
yang dihasilkan. Node __symbols__
berisi daftar semua node yang ditandai dengan label, yang dapat digunakan pustaka DTO untuk referensi.
Contoh perintah untuk membangun DT .dts
utama :
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
Contoh perintah untuk membangun overlay DT .dts
:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
Verifikasi hasil DTO di host
Verifikasi dapat membantu Anda mengidentifikasi kesalahan yang mungkin terjadi saat menempatkan DT overlay pada DT utama. Sebelum memperbarui target, Anda dapat memverifikasi hasil overlay DT pada host dengan mensimulasikan perilaku DTO menggunakan /include/
di .dts
.
/include/
untuk mensimulasikan DTO pada host- Buat salinan overlay
.dts
. Dalam salinan, hapus tajuk baris pertama. Contoh:/dts-v1/; /plugin/;
Simpan file sebagaimy_overlay_dt_wo_header.dts
(atau nama file apa pun yang Anda inginkan). - Buat salinan
.dts
utama. Dalam salinan, setelah baris terakhir, tambahkan sintaks include untuk file yang Anda buat di langkah 1. Misalnya:/include/ "my_overlay_dt_wo_header.dts"
Simpan file sebagaimy_main_dt_with_include.dts
(atau nama file apa pun yang Anda inginkan). - Gunakan
my_main_dt_with_include.dts
dtc
mendapatkan DT gabungan, yang seharusnya sama dengan hasil DTO. Misalnya:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
- Gunakan
my_merged_dt.dto
dtc
dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Memverifikasi DTO di Android 9
Android 9 memerlukan partisi Device Tree Blob Overlay (DTBO). Untuk menambahkan node atau membuat perubahan pada properti di SoC DT, bootloader harus secara dinamis melapisi DT khusus perangkat di atas SoC DT.
Menunjukkan overlay yang diterapkan
Untuk mengaktifkan Vendor Test Suite (VTS) untuk menilai kebenaran aplikasi overlay, vendor harus menambahkan parameter baris perintah kernel baru androidboot.dtbo_idx
yang menunjukkan overlay yang dipilih dari partisi DTBO. Di Android 12 menggunakan kernel versi 5.10 atau lebih tinggi, parameter ini melewati bootconfig. Misalnya, parameter androidboot.dtbo_idx=x,y,z
melaporkan x
, y
dan z
sebagai indeks berbasis nol dari Device Tree Overlay (DTO) dari partisi DTBO yang diterapkan (dalam urutan itu) oleh bootloader ke basis Pohon Perangkat (DT).
Overlay dapat diterapkan ke node dari pohon perangkat utama atau menambahkan node baru, tetapi tidak dapat merujuk ke node yang ditambahkan di overlay sebelumnya. Pembatasan ini diperlukan karena aplikasi overlay tidak menggabungkan tabel simbol overlay dengan tabel simbol DT utama (tidak menggabungkan menghindari konflik dalam nama simbol dan komplikasi ketergantungan antara overlay).
Contoh: Hamparan tidak valid
Dalam contoh ini, overlay_2.dts
merujuk ke node e
, yang ditambahkan oleh overlay_1.dts
. Setelah overlay_1
diterapkan ke DT utama, jika upaya dilakukan untuk menerapkan overlay_2
ke DT yang dihasilkan, aplikasi overlay akan gagal dengan kesalahan bahwa simbol e
tidak ada dalam tabel simbol untuk DT dasar.
main.dts | hamparan_1.dts | hamparan_2.dts |
---|---|---|
[main.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; | [overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e: e { prop = <0x0a>; phandle = <0x04>; }; }; | [overlay_2.dts] /dts-v1/; /plugin/; /* invalid! */ &e { prop = <0x0b>; }; |
Contoh: Hamparan yang valid
Dalam contoh ini, overlay_2.dts
hanya merujuk ke simpul b
dari DTS utama. Ketika overlay_1
diterapkan ke DT dasar, kemudian diikuti oleh penerapan overlay_2
, nilai properti prop
di node e
(ditetapkan oleh overlay_1.dts
) ditimpa oleh nilai yang ditetapkan oleh overlay_2.dts
.
main.dts | hamparan_1.dts | hamparan_2.dts |
---|---|---|
[final.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; | [overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e { prop = <0x0c>; }; }; | [overlay_2.dts] /dts-v1/; /plugin/; /* valid */ &b { ref1 = <&c>; e { prop = <0x0d>; }; }; |
Menerapkan partisi DTBO
Untuk mengimplementasikan partisi DTBO yang diperlukan, pastikan bootloader dapat melakukan hal berikut:
- Identifikasi papan yang dijalankannya dan pilih overlay yang sesuai untuk diterapkan.
- Tambahkan parameter
androidboot.dtbo_idx
ke baris perintah kernel.- Parameter harus menunjukkan, indeks berbasis nol dari DTO dari gambar partisi DTBO yang diterapkan ke DT dasar (dalam urutan yang sama).
- Indeks harus mengacu pada posisi overlay di partisi DTBO.
Untuk detail tentang struktur partisi DTBO, lihat Hamparan Pohon Perangkat di source.android.com.
Memvalidasi partisi DTBO
Anda dapat menggunakan VTS untuk memverifikasi hal berikut:
- Keberadaan parameter baris perintah kernel
androidboot.dtbo_idx
(dengan memeriksa bahwaInit
telah secara otomatis mengatur properti sistemro.boot.dtbo_idx
yang sesuai). - Validitas properti sistem
ro.boot.dtbo_idx
(dengan memeriksa bahwa properti menentukan setidaknya satu indeks gambar DTBO yang valid). - Validitas partisi DTBO (juga memverifikasi overlay di partisi DTBO yang diterapkan ke DT dasar).
- Node tambahan atau perubahan properti dalam DT yang dihasilkan disajikan ke kernel Linux.
Misalnya, dalam overlay dan DT akhir berikut, menambahkan androidboot.dtbo_idx=5,3
ke baris perintah kernel lolos validasi tetapi menambahkan androidboot.dtbo_idx=3,5
ke baris perintah kernel tidak lolos validasi.
Overlay DT pada indeks 3 | Overlay DT pada indeks 5 |
---|---|
[overlay_1.dts] /dts-v1/; /plugin/; &c { prop = <0xfe>; }; | [overlay_2.dts] /dts-v1/; /plugin/; &c { prop = <0xff>; }; |
DT akhir |
---|
/dts-v1/; / { a { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; prop = <0xfe>; }; __symbols__ { a = "/a"; b = "/b"; c = "/c"; }; }; |
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2022-06-06 UTC.