Cihaz Ağacı Kaynağı dosyalarını derlemek için Cihaz Ağacı Derleyicisini (DTC) kullanabilirsiniz. Ancak bindirme CE'sini hedef ana CE'ye uygulamadan önce, DTO'nun davranışını simüle ederek sonucu da doğrulamanız gerekir.
DTC ile derleme
.dts
dosyasını derlemek için dtc
kullanıldığında, elde edilen .dtbo
dosyasına bir __symbols__
düğümü eklemek için -@
seçeneğini eklemelisiniz. __symbols__
düğümü, DTO kütüphanesinin referans olarak kullanabileceği bir etiketle işaretlenmiş tüm düğümlerin bir listesini içerir.
Ana DT .dts
oluşturmak için örnek komut:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
DT .dts
kaplamasını oluşturmak için örnek komut:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
Ana makinedeki DTO sonuçlarını doğrulayın
Doğrulama, bindirme CE'sini ana CE'ye yerleştirirken oluşabilecek hataları tanımlamanıza yardımcı olabilir. Hedefi güncellemeden önce, .dts
dosyasında /include/
kullanarak DTO davranışını simüle ederek DT'yi ana makineye yerleştirmenin sonucunu doğrulayabilirsiniz.
/include/
sözdizimini kullanın-
.dts
kaplamasının bir kopyasını oluşturun. Kopyada ilk satır başlığını kaldırın. Örnek:/dts-v1/; /plugin/;
Dosyayımy_overlay_dt_wo_header.dts
(veya istediğiniz herhangi bir dosya adı) olarak kaydedin. - Ana
.dts
dosyasının bir kopyasını oluşturun. Kopyada, son satırın sonrasına, 1. adımda oluşturduğunuz dosyanın dahil etme sözdizimini ekleyin. Örneğin:/include/ "my_overlay_dt_wo_header.dts"
Dosyayımy_main_dt_with_include.dts
(veya istediğiniz herhangi bir dosya adı) olarak kaydedin. - Birleştirilmiş DT'yi elde etmek amacıyla
my_main_dt_with_include.dts
dosyasını derlemek içindtc
kullanın; bu, DTO ile aynı sonuç olmalıdır. Örneğin:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
-
my_merged_dt.dto
boşaltmak içindtc
kullanın.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Android 9'da DTO'yu doğrulama
Android 9, bir Cihaz Ağacı Blob Yerleşimi (DTBO) bölümü gerektirir. SoC DT'de düğüm eklemek veya özelliklerde değişiklik yapmak için, önyükleyicinin SoC DT üzerine cihaza özel bir DT'yi dinamik olarak yerleştirmesi gerekir.
Uygulanan kaplamaları belirtme
Satıcı Test Paketinin (VTS) kaplama uygulamasının doğruluğunu değerlendirmesini sağlamak için satıcıların, DTBO bölümünden seçilen kaplamaları belirten yeni bir çekirdek komut satırı parametresi androidboot.dtbo_idx
eklemesi gerekir. Çekirdek sürümü 5.10 veya üzerini kullanan Android 12'de bu parametre bootconfig'ten geçer. Örneğin, androidboot.dtbo_idx=x,y,z
parametresi x
, y
ve z
, önyükleyici tarafından tabana uygulanan (bu sırayla) DTBO bölümündeki Cihaz Ağacı Kaplamalarının (DTO'lar) sıfır tabanlı endeksleri olarak bildirir. Cihaz Ağacı (DT).
Kaplamalar, ana cihaz ağacındaki düğümlere uygulanabilir veya yeni düğümler ekleyebilir ancak önceki katmana eklenen bir düğüme atıfta bulunamaz . Bu kısıtlama gereklidir çünkü bindirme uygulaması bindirme sembol tablosunu ana CE sembol tablosuyla birleştirmez (birleştirmemek sembol adlarındaki çakışmaları ve bindirmeler arasındaki bağımlılıkların karmaşıklığını önler).
Örnek: Geçersiz kaplamalar
Bu örnekte overlay_2.dts
, overlay_1.dts
tarafından eklenen e
düğümünü ifade eder. Ana CE'ye overlay_1
uygulandıktan sonra, ortaya çıkan CE'ye overlay_2
uygulanmaya çalışılırsa, bindirme uygulaması, temel CE'ye ait sembol tablosunda e
sembolünün mevcut olmadığı hatasıyla başarısız olacaktır.
ana.dts | overlay_1.dts | overlay_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>; }; |
Örnek: Geçerli katmanlar
Bu örnekte overlay_2.dts
yalnızca ana DTS'deki b
düğümünü ifade eder. Temel CE'ye overlay_1
uygulandığında ve ardından overlay_2
uygulandığında, e
düğümündeki prop
özelliğinin değerinin ( overlay_1.dts
tarafından ayarlanan) overlay_2.dts
tarafından ayarlanan değer üzerine yazılır.
ana.dts | overlay_1.dts | overlay_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>; }; }; |
DTBO bölümünün uygulanması
Gerekli DTBO bölümünü uygulamak için önyükleyicinin aşağıdakileri yapabildiğinden emin olun:
- Üzerinde çalıştığı kartı tanımlayın ve uygulanacak ilgili kaplamayı/katmanları seçin.
-
androidboot.dtbo_idx
parametresini çekirdek komut satırına ekleyin.- Parametre, temel CE'ye uyguladığı DTBO bölüm görüntüsündeki DTO'ların sıfır tabanlı endekslerini (aynı sırada) belirtmelidir.
- Endeksler, DTBO bölümündeki kaplamanın konumuna atıfta bulunmalıdır.
DTBO bölümünün yapısına ilişkin ayrıntılar için source.android.com adresindeki Cihaz Ağacı Kaplamaları'na bakın.
DTBO bölümünü doğrulama
Aşağıdakileri doğrulamak için VTS'yi kullanabilirsiniz:
- Çekirdek komut satırı parametresi
androidboot.dtbo_idx
varlığı (Init
karşılık gelenro.boot.dtbo_idx
sistem özelliğini otomatik olarak ayarladığını kontrol ederek). -
ro.boot.dtbo_idx
sistem özelliğinin geçerliliği (özelliğin en az bir geçerli DTBO görüntü dizini belirttiğini kontrol ederek). - DTBO bölümünün geçerliliği (aynı zamanda temel DT'ye uygulanan DTBO bölümündeki kaplamaları da doğrular).
- Ortaya çıkan CE'deki ek düğümler veya özellik değişiklikleri Linux çekirdeğine sunulur.
Örneğin, aşağıdaki kaplamalarda ve son DT'de, androidboot.dtbo_idx=5,3
çekirdek komut satırına eklenmesi doğrulamayı geçer ancak androidboot.dtbo_idx=3,5
çekirdek komut satırına eklenmesi doğrulamayı geçmez.
İndeks 3'te DT kaplaması | İndeks 5'te DT kaplaması |
---|---|
[overlay_1.dts] /dts-v1/; /plugin/; &c { prop = <0xfe>; }; | [overlay_2.dts] /dts-v1/; /plugin/; &c { prop = <0xff>; }; |
Son CE |
---|
/dts-v1/; / { a { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; prop = <0xfe>; }; __symbols__ { a = "/a"; b = "/b"; c = "/c"; }; }; |
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2024-04-29 UTC.