Cihaz ağacı kaynak (DTS) dosyalarını derlemek için cihaz ağacı derleyicisini (DTC) kullanabilirsiniz. Ancak hedef ana DT'ye yer paylaşımı cihaz ağacını (DT) uygulamadan önce, cihaz ağacı yer paylaşımı (DTO) davranışını simüle ederek sonucu da doğrulamanız gerekir.
DTC ile derleme
dtc kullanarak .dts derlerken sonuçtaki .dtbo öğesine __symbols__ düğümü eklemek için -@ seçeneğini eklemeniz gerekir. __symbols__ düğümü, DTO kitaplığının referanslar için kullanabileceği, etiketle işaretlenmiş tüm düğümlerin listesini içerir.
Ana DT'yi oluşturmaya yönelik örnek komut .dts:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
Yer paylaşımı DT'sini oluşturmaya yönelik örnek komut .dts:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
Ana makinedeki DTO sonuçlarını doğrulama
Doğrulama, ana DT'ye yerleştirilen yer paylaşımı DT'sinde oluşabilecek hataları belirlemenize yardımcı olabilir. Hedefi güncellemeden önce, /include/ kullanarak .dts içinde DTO davranışını simüle ederek DT'nin ana makineye yerleştirilmesinin sonucunu doğrulayabilirsiniz.

Şekil 1. Ana makinede DTO'yu simüle etmek için /include/ söz dizimini kullanın.
- Yer paylaşımının
.dtskopyasını oluşturun. Kopyada ilk satır başlığını kaldırın. Örnek: Dosyayı/dts-v1/; /plugin/;
my_overlay_dt_wo_header.dts(veya istediğiniz herhangi bir dosya adı) olarak kaydedin. - Ana
.dtsöğesinin bir kopyasını oluşturun. Kopyada, son satırdan sonra 1. adımda oluşturduğunuz dosyanın include söz dizimini ekleyin. Örneğin: Dosyayı/include/ "my_overlay_dt_wo_header.dts"
my_main_dt_with_include.dts(veya istediğiniz herhangi bir dosya adı) olarak kaydedin. dtcile derleyin. Birleştirilmiş DT'yi almak içinmy_main_dt_with_include.dtskullanı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.dtodökümü almak içindtckullanın.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Android 9'da DTO'yu doğrulama
Android 9, cihaz ağacı blob kaplaması (DTBO) bölümü gerektirir. SoC DT'ye düğüm eklemek veya özelliklerde değişiklik yapmak için önyükleyicinin, SoC DT'nin üzerine cihaza özel bir DT'yi dinamik olarak yerleştirmesi gerekir.
Uygulanan yer paylaşımlarını belirtme
Tedarikçilerin, yer paylaşımı uygulamasının doğruluğunu değerlendirmek için
Tedarikçi Test Paketi'ni (VTS) etkinleştirmesi gerekir.
Bunun için DTBO bölümünden seçilen yer paylaşımlarını belirten yeni bir çekirdek komut satırı parametresi androidboot.dtbo_idx eklemeleri gerekir. Çekirdek sürümü 5.10 veya daha yeni olan Android 12'de bu parametre, bootconfig üzerinden iletilir.
Örneğin, androidboot.dtbo_idx=x,y,z parametresi, önyükleyici tarafından temel DT'ye uygulanan DTBO bölümündeki DTO'ların sıfır tabanlı dizinleri olarak x, y ve z değerlerini bildirir (bu sırayla).
Yer paylaşımları, ana DT'deki düğümler için geçerli olabilir veya yeni düğümler ekleyebilir. Ancak önceki bir yer paylaşımında eklenen bir düğüme başvuramaz. Bu kısıtlama, yer paylaşımı uygulaması yer paylaşımı sembol tablosunu ana DT sembol tablosuyla birleştirmediği için gereklidir (birleştirme yapılmaması, sembol adlarında çakışmaları ve yer paylaşımları arasındaki bağımlılıkların karmaşıklaşmasını önler).
Örnek: Geçersiz yer paylaşımları
Bu örnekte, overlay_2.dts , overlay_1.dts tarafından eklenen e düğümünü ifade eder. overlay_1 ana DT'ye uygulandıktan sonra, sonuçtaki DT'ye overlay_2 uygulanmaya çalışılırsa yer paylaşımı uygulaması, temel DT'nin sembol tablosunda e sembolünün bulunmadığına dair bir hatayla başarısız olur.
| main.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 yer paylaşımları
Bu örnekte, overlay_2.dts yalnızca ana DTS'deki düğüm b'ü ifade eder. overlay_1 temel DT'ye uygulandıktan sonra overlay_2 uygulaması uygulandığında, e düğümündeki prop özelliğinin değeri (overlay_1.dts tarafından ayarlanır) overlay_2.dts tarafından ayarlanan değerle üzerine yazılır.
| main.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ü uygulama
Gerekli DTBO bölümünü uygulamak için önyükleyicinin aşağıdakileri yapabildiğinden emin olun:
- Üzerinde çalıştığı kartı belirleyin ve uygulanacak ilgili katmanları seçin.
androidboot.dtbo_idxparametresini çekirdek komut satırına ekleyin.- Parametre, DTBO bölümü görüntüsündeki DTO'ların sıfır tabanlı dizinlerini, temel DT'ye uygulandığı şekilde (aynı sırada) belirtmelidir.
- Dizinler, DTBO bölümündeki yer paylaşımının konumunu belirtmelidir.
DTBO bölümünün yapısıyla ilgili ayrıntılar için Cihaz ağacı katmanları başlıklı makaleyi inceleyin.
DTBO bölümünü doğrulama
VTS'yi kullanarak aşağıdakileri doğrulayabilirsiniz:
- Çekirdek komut satırı parametresinin varlığı
androidboot.dtbo_idx(Init'nin ilgiliro.boot.dtbo_idxsistem özelliğini otomatik olarak ayarladığını kontrol ederek). ro.boot.dtbo_idxsistem özelliğinin geçerliliği (özelliğin en az bir geçerli DTBO resmi dizini belirtip belirtmediği kontrol edilerek).- DTBO bölümünün geçerliliği (DTBO bölümündeki, temel DT'ye uygulanan katmanlar da doğrulanır).
- Sonuçta elde edilen DT'deki ek düğümler veya özellik değişiklikleri Linux çekirdeğine sunulur.
Örneğin, aşağıdaki yer paylaşımlarında ve nihai DT'de, çekirdek komut satırına androidboot.dtbo_idx=5,3 eklenmesi doğrulama adımını geçer ancak çekirdek komut satırına androidboot.dtbo_idx=3,5 eklenmesi doğrulama adımını geçmez.
| 3. dizinde yer paylaşımlı DT | 5. dizinde DT'yi yerleştir |
|---|---|
[overlay_1.dts]
/dts-v1/;
/plugin/;
&c { prop = <0xfe>; };
|
[overlay_2.dts]
/dts-v1/;
/plugin/;
&c { prop = <0xff>; };
|
| Nihai GM |
|---|
/dts-v1/;
/ {
a {
phandle = <0x1>;
};
b {
phandle = <0x2>;
};
c {
phandle = <0x3>;
prop = <0xfe>;
};
__symbols__ {
a = "/a";
b = "/b";
c = "/c";
};
};
|